如何自动应用generic.xaml中的数据模板(redux)?

时间:2012-09-03 04:54:34

标签: wpf themes datatemplate

这是question发布的Thiado de Arruda的后续行动。简而言之,他希望在他的generic.xaml文件中有一个DataTemplate,但模板没有被应用。

给出的答案建议将DataTemplate放在ControlTemplate.Resources中,用于托管其自定义类型的控件。但是,这非常有效,假设他需要将DataTemplate应用于其他地方,而不仅仅是在主机控件中。是否有必要将DataTemplate复制到其他所有主机控件的ControlTemplates中?

修改(重述问题):

我正在使用MVVM设计原则开发WPF应用程序。 MainWindow.xaml 包含UI的结构,所有样式都在 Themes \ generic.xaml 中编码。 (行为在单独的视图模型类中编码,但这是无关紧要的。)作为UI的一部分,我创建了一个ListBoxMyListBoxSubClass)的子类来显示普通.Net对象的集合我自己的创作(MyObject)。 MyListBoxSubClass generic.xaml 中有一种样式,它重新定义Template属性,并按预期应用它。我在 generic.xaml 中的DataTemplate也有MyObject,但这不会得到应用。根据上述链接,我必须将DataTemplate放置在Resources ControlTemplate的{​​{1}}集合中,以便应用此MyListBoxSubClass。这很有效。

我的问题是如何在我的应用中将DataTemplate应用于DataTemplate 无处不在而无需复制MyObject?我已经尝试在DataTemplate添加一个密钥并在需要的地方引用它,但出于某种原因,我在运行时遇到了一个XAML解析错误,Resharper说它无法解析我的{{1} }键。

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>

希望这有帮助。