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内部

从 WinUI 3.0 Preview 3 Desktop App 中 WebView2 中的帖子获取响应

winui中创建自定义控件库的正确方法