这是question发布的Thiado de Arruda的后续行动。简而言之,他希望在他的generic.xaml文件中有一个DataTemplate,但模板没有被应用。
给出的答案建议将DataTemplate放在ControlTemplate.Resources中,用于托管其自定义类型的控件。但是,这非常有效,假设他需要将DataTemplate应用于其他地方,而不仅仅是在主机控件中。是否有必要将DataTemplate复制到其他所有主机控件的ControlTemplates中?
修改(重述问题):
我正在使用MVVM设计原则开发WPF应用程序。 MainWindow.xaml 包含UI的结构,所有样式都在 Themes \ generic.xaml 中编码。 (行为在单独的视图模型类中编码,但这是无关紧要的。)作为UI的一部分,我创建了一个ListBox
(MyListBoxSubClass
)的子类来显示普通.Net对象的集合我自己的创作(MyObject
)。 MyListBoxSubClass
在 generic.xaml 中有一种样式,它重新定义Template
属性,并按预期应用它。我在 generic.xaml 中的DataTemplate
也有MyObject
,但这不会得到应用。根据上述链接,我必须将DataTemplate
放置在Resources
ControlTemplate
的{{1}}集合中,以便应用此MyListBoxSubClass
。这很有效。
我的问题是如何在我的应用中将DataTemplate
应用于DataTemplate
无处不在而无需复制MyObject
?我已经尝试在DataTemplate
添加一个密钥并在需要的地方引用它,但出于某种原因,我在运行时遇到了一个XAML解析错误,Resharper说它无法解析我的{{1} }键。
答案 0 :(得分:0)
将数据模板添加到另一个XAML文件中的单独资源字典中。
将XAML文件放入generic.xaml控件模板资源中:
<ControlTemplate ...>
<ControlTemplate.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="wherever.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</ControlTemplate.Resources>
</ControlTemplate>
然后,无论你想在哪里使用这个数据模板,你都可以把它带到你想要的任何地方的合并资源字典中 - 用户控制,窗口,另一个控制模板等......
<Window x:Name="someWindow">
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="wherever.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
</Window>
希望这有帮助。