Как повторно использовать HierarchicalDataTemplate?


У меня есть две идентичные иерархические таблицы. Единственное различие - это тип данных шаблонов.

<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 2

1 ответ:

Я бы пошел по пути создания отдельных шаблонов для вещей, которые должны выглядеть одинаково, как это:

<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>

Есть архитектурно более элегантные решения, но видя, что внешний вид обрабатывается дизайнерами, я не люблю использовать решения, которые являются слишком сложной парадигмой программирования, мудрой в этих вещах.