2013-07-26 3 views
2

У меня есть два одинаковых HierarchicalDataTemplates. Единственное отличие - это тип данных шаблонов.Как повторно использовать 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 был каким-то ресурсом, но я не могу понять, как это сделать.

+0

'StackPanel' в обоих случаях то же самое? –

+0

Да, в обоих случаях StackPanel и их содержимое идентичны. – mjcopple

+0

Я не понимаю сопротивления просто сделать его UserControl. Это именно то, для чего предназначен UserControl. –

ответ

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> 

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

 Смежные вопросы

  • Нет связанных вопросов^_^