gpt4 book ai didi

c# - DataType 的 DataTemplate - 如何在特定的 ListBox 中覆盖此 DataTemplate?

转载 作者:行者123 更新时间:2023-11-30 16:32:22 27 4
gpt4 key购买 nike

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

ListBox 包含各种数据类型的项(全部派生自公共(public)基类),就像现在一样,无需指定 TemplateSelector 即可神奇地工作,因为正确的模板由 listBox 中项的实际数据类型选择.如果我使用 x:Key 来应用 DataTemplates,我是否需要编写一个 TemplateSelector?

我是新手,只尝试使用 DataTemplates。有一瞬间我想,哇,多酷啊!然后我想在不同的列表框中为相同的数据类型使用不同的数据模板,哎呀,我做不到 :-) 请帮忙?

最佳答案

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

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

或者,如果您已经在某个地方的 ResourceDictionary 中定义了您的 DataTemplate:

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

然后你可以在 ListBox 上引用它,使用:

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

您不需要为这两种方法中的任何一种编写模板选择器


示例响应评论

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

<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:

Example Display

关于c# - DataType 的 DataTemplate - 如何在特定的 ListBox 中覆盖此 DataTemplate?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4076884/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com