2015-07-03 6 views
1

Мне нужно повторно использовать следующую DataTemplate:WPF - многоразовые DataTemplate для ItemsControl/ListBox

 <DataTemplate x:Key="courseItemTemplate"> 
     <Border BorderThickness="3" CornerRadius="5"> 
      <Border.Background> 
       <SolidColorBrush> 
        <SolidColorBrush.Color> 
         <MultiBinding Converter="{StaticResource CourseColorConverter}"> 
          <Binding RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType=Window}" Path="DataContext.CourseColors"/> 
          <Binding Path="Course.CourseInfo.ID"/> 
         </MultiBinding> 
        </SolidColorBrush.Color> 
       </SolidColorBrush> 
      </Border.Background> 
      <ContentControl Content="{Binding}"/> 
     </Border> 
    </DataTemplate> 

Шаблон будет служить как ListBox и ItemsControl, с различными ItemsSource и другой шаблон для представления содержания каждого элемента , По сути, то, что я хотел бы, чтобы иметь возможность заменить тег ContentControl, с соответствующим шаблоном для каждого из элементов управления

+1

Что так плохо два разные шаблоны? Вы можете сделать SolidColorBrush ресурсом. – Clemens

+0

Что делать, если я хочу изменить стиль границы? Мне пришлось бы изменить его в 2-х местах, если я хочу, чтобы обе границы были в стиле одинаковыми. – barho

+0

Этот стиль, очевидно, также может быть ресурсом. – Clemens

ответ

0

Используйте два DataTemplates с общей границей Стиль:

<Style x:Key="BorderStyle" TargetType="Border"> 
    <Setter Property="Background"> 
     <Setter.Value> 
      <SolidColorBrush>...</SolidColorBrush> 
     </Setter.Value> 
    </Setter> 
</Style> 
<DataTemplate x:Key="T1"> 
    <Border Style="{StaticResource BorderStyle}"> 
     <ContentPresenter Content="{Binding P1}"/> 
    </Border> 
</DataTemplate> 
<DataTemplate x:Key="T2"> 
    <Border Style="{StaticResource BorderStyle}"> 
     <ContentPresenter Content="{Binding P2}"/> 
    </Border> 
</DataTemplate>