2009-10-18 4 views
4

Я пытаюсь создать TreeView, который имеет два уровня, но я ничего не получаю. У меня есть ItemTemplateSelector (который работает - выбор одного из первых двух шаблонов, перечисленных ниже), но я не могу заставить детей заполнять, используя DataTemplate. Это мой код:ControlTemplate для второго уровня TreeView

public class PlannedMealGroup : INotifyPropertyChanged { 
     public ObservableCollection<PlannedMeal> Meals; 
     public Constants.MealTimes MealTime; 
    ...// these implement INotifyPropertyChanged 
} 

<HierarchicalDataTemplate x:Key="groupTemplate" ItemsSource="{Binding Meals}"> 
    <TextBlock Text="{Binding Path=MealTime}"/> 
    <HierarchicalDataTemplate.ItemContainerStyle> 
     <Style TargetType="{x:Type TreeViewItem}"> 
      <EventSetter Event="TreeViewItem.PreviewMouseRightButtonDown" Handler="tre_PreviewMouseRightButtonDown"/> 
     </Style> 
    </HierarchicalDataTemplate.ItemContainerStyle> 
</HierarchicalDataTemplate> 
<DataTemplate x:Key="mealTemplate"> 
    <Border Name="Border" Margin="4,2" Padding="3" Background="Transparent" IsHitTestVisible="True" SnapsToDevicePixels="true" BorderThickness="0.6" CornerRadius="3"> 
     <Border Name="InnerBorder" Background="Transparent" IsHitTestVisible="True"> 
      <StackPanel Orientation="Horizontal"> 
       <Image Source="{Binding Recipe.Icon,Converter={StaticResource IconConverter}, ConverterParameter=16}" Stretch="None" /> 
       <TextBlock Text="{Binding Converter={StaticResource RecipeServingConverter}}"/> 
      </StackPanel> 
     </Border> 
    </Border> 

<TreeView ItemTemplateSelector="{StaticResource PlannedMealTemplateSelector}" Style="{StaticResource GroupedTreeView}"> 
    <TreeView.ItemsPanel> 
     <ItemsPanelTemplate> 
      <StackPanel IsItemsHost="True" Orientation="{Binding Orientation,RelativeSource={x:Static RelativeSource.TemplatedParent}}" /> 
     </ItemsPanelTemplate> 
    </TreeView.ItemsPanel> 
    <TreeView.ContextMenu> 
    ... 

<Style x:Key="GroupedTreeViewItem" TargetType="{x:Type TreeViewItem}"> 
    <Setter Property="IsExpanded" Value="True"/> 
    <Setter Property="Template"> 
    <Setter.Value> 
    <ControlTemplate TargetType="{x:Type TreeViewItem}"> 
    <Border Name="Border" Margin="4,2" Padding="3" Background="{StaticResource GroupBackgroundBrush}" IsHitTestVisible="True" SnapsToDevicePixels="true" BorderThickness="0.6" CornerRadius="3"> 
      <Expander Name="Exp" IsExpanded="{Binding IsExpanded, RelativeSource={RelativeSource AncestorType={x:Type TreeViewItem}},Mode=TwoWay}"> 
       <Expander.Header> 
        <ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
         x:Name="PART_Header" ContentSource="Header"/> 
       </Expander.Header> 
       <ItemsPresenter x:Name="ItemsHost"/> 
      </Expander> 
     </Border> 
    </ControlTemplate> 
    </Setter.Value> 
    </Setter> 
</Style> 
<Style x:Key="GroupedTreeView" TargetType="TreeView"> 
    <Setter Property="ItemContainerStyle" Value="{StaticResource GroupedTreeViewItem}"/> 
</Style> 

Спасибо за любые указатели.

ответ

3

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

<HierarchicalDataTemplate x:Key="groupTemplate" ItemsSource="{Binding Meals}"> 
      <TextBlock Text="{Binding Path=MealTime}"/> 
      <HierarchicalDataTemplate.ItemContainerStyle> 
       <Style TargetType="{x:Type TreeViewItem}"> 
        <EventSetter Event="TreeViewItem.PreviewMouseRightButtonDown" Handler="tre_PreviewMouseRightButtonDown"/> 
        <Setter Property="Background" Value="Red"/> 
        <Setter Property="Template"> 
         <Setter.Value> 
          <ControlTemplate TargetType="{x:Type TreeViewItem}"> 
           <ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
            x:Name="PART_Header" ContentSource="Header"/> 
... 
Смежные вопросы