4

我为我的宠物项目中的一些数据类型创建了几个数据模板。这些数据模板真的很酷,因为它们像魔术一样工作,无论何时何地出现在 UI 中,都会神奇地改变数据类型实例的外观。现在我希望能够在一个特定的 ListBox 中更改这些 DataTypes 的 DataTemplate。这是否意味着我必须停止依赖 WPF 自动将数据模板应用于数据类型并将 ax:Key 分配给 DataTemplates,然后使用该键在 UI 中应用 Template/ItemTemplate?

ListBox 包含各种 DataTypes 的项目(都派生自一个公共基类),现在,所有项目都可以在不指定 TemplateSelector 的情况下神奇地工作,因为正确的模板是由 listBox 中项目的实际数据类型选择的。如果我使用 x:Key 来应用 DataTemplates,我是否需要编写一个 TemplateSelector?

我对此并不陌生,只尝试使用 DataTemplates。一瞬间我想,哇,好酷!然后我想在不同的列表框中为相同的数据类型使用不同的数据模板,哎呀,我做不到:-) 请帮忙?

4

1 回答 1

4

ItemTemplate您可以专门为您指定一个ListBox

<ListBox>
    <ListBox.ItemTemplate>
        <DataTemplate>
            <!-- your template here -->
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

或者,如果您已经DataTemplateResourceDictionary某个地方定义了您的:

<DataTemplate x:Key="MyTemplate">
      <!-- your template here -->
</DataTemplate>

然后您可以在ListBox使用时引用它:

<ListBox ItemTemplate="{StaticResource MyTemplate}" />

您无需为这些方法中的任何一种编写模板选择器即可


回应评论的例子

下面的示例演示了为窗口定义DataTemplate数据类型(在本例中String为 )的默认值,然后在列表框中覆盖它:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:sys="clr-namespace:System;assembly=mscorlib"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <DataTemplate DataType="{x:Type sys:String}">
            <Rectangle Height="10" Width="10" Margin="3" Fill="Red" />
        </DataTemplate>
    </Window.Resources>
    <Grid>
        <ListBox>
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Rectangle Height="10" Width="10" Margin="3" Fill="Blue" />
                </DataTemplate>
            </ListBox.ItemTemplate>

            <sys:String>One</sys:String>
            <sys:String>Two</sys:String>
            <sys:String>Three</sys:String>
        </ListBox>
    </Grid>
</Window>

这将产生以下 UI:

示例显示

于 2010-11-02T10:45:03.947 回答