如何重用HierarchicalDataTemplate?

时间:2013-07-26 14:54:05

标签: wpf xaml hierarchicaldatatemplate

我有两个相同的HierarchicalDataTemplates。唯一的区别是模板的DataType。

<HierarchicalDataTemplate DataType="{x:Type Data:OuterType}"
                          ItemsSource="{Binding Items}">
    <StackPanel>...</StackPanel>
</HierarchicalDataTemplate>

<HierarchicalDataTemplate DataType="{x:Type Data:InnerType}"
                          ItemsSource="{Binding Items}">
    <StackPanel>...</StackPanel>
</HierarchicalDataTemplate>

如何避免在两个数据模板中复制堆栈面板的内容?

我考虑将StackPanel变成用户控件,但这是唯一可以使用控件的地方。我宁愿StackPanel是某种资源,但我无法弄清楚如何使这项工作。

1 个答案:

答案 0 :(得分:4)

我会为那些应该看起来像这样的东西制作单独模板的路线:

<DataTemplate x:Key="sharedTemplate">
    <StackPanel>...</StackPanel>
</DataTemplate>

<HierarchicalDataTemplate DataType="{x:Type InnerType}"
                            ItemsSource="{Binding Items}">
    <ContentControl Content="{Binding}"
                    ContentTemplate="{StaticResource sharedTemplate}" />
</HierarchicalDataTemplate>

<HierarchicalDataTemplate DataType="{x:Type OuterType}"
                            ItemsSource="{Binding Items}">
    <ContentControl Content="{Binding}"
                    ContentTemplate="{StaticResource sharedTemplate}" />
</HierarchicalDataTemplate>

在架构上有更优雅的解决方案,但外观和感觉由设计师处理,我不喜欢在这些事情中使用过于复杂的编程范式的解决方案。