1

这是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)。 在generic.xaml中有一个重新定义属性MyListBoxSubClass的样式,它会按预期应用。我也有一个for in generic.xaml,但这没有得到应用。根据上面的链接,我必须将TemplateDataTemplateMyObjectDataTemplateResourcesControlTemplate因为MyListBoxSubClass为了DataTemplate应用这个。这非常有效。

我的问题是如何在我的应用程序DataTemplate中应用到MyObject 任何地方而不必复制DataTemplate? 我已经尝试DataTemplate在我需要的地方添加一个密钥并引用它,但由于某种原因,我在运行时收到 XAML 解析错误,并且 Resharper 说它无法解析我的DataTemplate密钥。

4

1 回答 1

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>

希望这可以帮助。

于 2012-11-20T16:58:49.040 回答