数据类型的数据模板 - 如何在特定列表框中覆盖此数据模板?
我为我的宠物项目中的一些数据类型创建了几个数据模板。 这些数据模板非常酷,因为它们像魔法一样工作,无论何时何地出现在 UI 中,都会神奇地改变数据类型实例的外观。 现在我希望能够在一个特定的列表框中更改这些数据类型的数据模板。这是否意味着我必须停止依赖 WPF 自动将数据模板应用到数据类型,并将 ax:Key 分配给 DataTemplates,然后使用该键在 UI 中应用 Template/ItemTemplate?
ListBox 包含各种 DataType 的项目(全部派生自公共基类),就像现在一样,无需指定 TemplateSelector 即可神奇地工作,因为正确的模板是由 listBox 中项目的实际数据类型选择的。如果我选择使用 x:Key 来应用 DataTemplates,我是否需要编写 TemplateSelector?
我对此很陌生,只尝试使用 DataTemplates。有那么一刻我想,哇,多酷啊!然后我想要在不同的列表框中为相同的数据类型使用不同的数据模板,哎呀,我做不到:-) 请帮忙?
I have created several DataTemplates for some of the DataTypes in my pet project.
These data templates are really cool as they work like magic, magically transforming the look of the instances of the data types whenever and wherever they show up in the UI.
Now I want to be able to change the DataTemplate for these DataTypes in one particular ListBox. Does this mean I have to stop relying on WPF automatically applying the data template to the data types and assign a x:Key to the DataTemplates and then apply the Template/ItemTemplate in the UI using that key?
A ListBox contains items of various DataTypes (all derived from a common base class) and as it is now, all magically works without specifying a TemplateSelector, as the correct template is chosen by the actual data type of the item in the listBox. If I went for using the x:Key to apply DataTemplates, would I then need to write a TemplateSelector?
I am new to this and only experimenting with DataTemplates. One moment I think, wow, how cool! And then I want a different data template for the same data type in a different list box and ooops, I can't do it :-) Help please?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以专门为您的
ListBox
指定一个ItemTemplate
:或者,如果您已经在
ResourceDictionary
中定义了DataTemplate
> 某处:然后您可以在
ListBox
上引用它,使用:您不需要为这些方法中的任何一个编写模板选择器来工作
示例 来响应评论
该示例下面演示了为窗口的数据类型(在本例中为
String
)定义默认DataTemplate
,然后在列表框中覆盖它:这会产生以下 UI:
You can specify an
ItemTemplate
specifically for yourListBox
:Or alternatively, if you have already defined your
DataTemplate
in aResourceDictionary
somewhere:Then you can reference it on the
ListBox
using:You do not need to write a template selector for either of these approaches to work
Example in response to comments
The example below demonstrates defining a default
DataTemplate
for a data type (in this case,String
) for a window and then overridding it within a listbox:This produces the following UI: