WinUI 3 XAML DataTemplate - 如何包含由用于绑定的类公开的控件
Posted
技术标签:
【中文标题】WinUI 3 XAML DataTemplate - 如何包含由用于绑定的类公开的控件【英文标题】:WinUI 3 XAML DataTemplate - how to include a control exposed by the class used for binding 【发布时间】:2022-01-14 16:08:47 【问题描述】:我有一个 WinUi 3 桌面应用程序。它包含一个名为“mainGrid”的网格控件。它包含一个 Grid.Resources 元素,如下所示:
<Grid.Resources>
<DataTemplate x:Key="HorizontalMobTemplate" x:DataType="local:Mob" >
<Grid>
<Rectangle Width="50" Height="50" Stroke="Black" StrokeThickness="2" Fill="AliceBlue"></Rectangle>
<TextBlock Text="x:Bind Label" FontSize="16" />
</Grid>
</DataTemplate>
<StackLayout x:Name="HorizontalStackLayout" Orientation="Horizontal" Spacing="8" />
</Grid.Resources>
在代码中,我有一个名为 Mob 的类,它具有各种属性,包括一个名为 Label 的字符串属性和一个名为 MyGrid 的 Microsoft.UI.Xaml.Controls.Grid 属性。
Grid 包含一个 ScrollViewer:
<ScrollViewer Name="ScrollViewer1" Grid.Row="2" Grid.Column="1"
HorizontalScrollBarVisibility="Auto"
IsVerticalScrollChainingEnabled="False"
MaxHeight="50">
<ItemsRepeater
ItemsSource="x:Bind MobItems"
Layout="StaticResource HorizontalStackLayout"
ItemTemplate="StaticResource HorizontalMobTemplate"
/>
</ScrollViewer>
到目前为止,一切都很好——滚动查看器在一个漂亮的水平滚动中继器中显示每个 Mob 对象的 Label 属性。但这并不是我真正想要的。我想插入对 Mob.MyGrid 属性的引用,该属性是 Microsoft.UI.Xaml.Controls.Grid。像这样的:
<Grid.Resources>
<DataTemplate x:Key="HorizontalMobTemplate" x:DataType="local:Mob" >
<PULL IN THE Mob.MyGrid PROPERTY HERE />
</DataTemplate>
<StackLayout x:Name="HorizontalStackLayout" Orientation="Horizontal" Spacing="8" />
</Grid.Resources>
换句话说,我希望我的 XAML 插入一个子元素,该子元素是我的 Mob.MyGrid 属性中公开的 MyGrid 控件。我需要什么语法来做到这一点?
【问题讨论】:
【参考方案1】:使用绑定到Grid
属性的ContentControl
:
<ContentControl Content="x:Bind MyGrid" />
【讨论】:
以上是关于WinUI 3 XAML DataTemplate - 如何包含由用于绑定的类公开的控件的主要内容,如果未能解决你的问题,请参考以下文章
WinUI XAML:使用来自另一个项目的 ResourceDictionary
XAML - 如何从 ControlTemplate 中的子项访问父控件的 DataTemplate 属性?
WPF MVVM 为啥使用 ContentControl + DataTemplate 视图而不是直接的 XAML 窗口视图?
在ListBox UWP xaml中控制datatemplate内部