2015-12-08 7 views
0

У меня есть TreeView, что можно упростить до:TreeView с HierarchicalDataTemplates нуждающихся Заголовки

<TreeView ItemsSource="{Binding A}"> 
    <TreeView.Resources> 

     <HierarchialDataTemplate DataType="{x:Type local:A}"> 
      <!-- XAML to display objects of type A --> 
     </HierarchialDataTemplate> 

     <HierarchialDataTemplate DataType="{x:Type local:B}"> 
      <!-- XAML to display objects of type B --> 
     </HierarchialDataTemplate> 

     <DataTemplate DataType="{x:Type local:C}"> 
      <!-- XAML to display objects of type C --> 
     </DataTemplate> 

    </TreeView.Resources> 
</TreeView> 

И это хорошо работает.

Теперь у меня есть, казалось бы, простое требование, чтобы добавить заголовки к DataTemplates, такие как:

enter image description here

Я не могу за жизнь мне понять, как сделать это, как я могу изменить только стиль каждого отдельного элемента с помощью HierarchicalDataTemplate, я не могу изменить сам шаблон, чтобы отображать статические заголовки (выделено полужирным шрифтом).

Любая помощь будет принята с благодарностью, я просто ужасен в WPF.

+0

Вместо TreeView вы можете посмотреть, как добиться функциональности с помощью 'DataGrid' и' RowDetailsTemplate'. – user1672994

+0

Я думаю, вы хотите установить ['ItemsPanel'] (https://msdn.microsoft.com/en-us/library/system.windows.controls.itemscontrol.itemspanel (v = vs.110) .aspx). – Kcvin

ответ

0

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

<TreeView ItemsSource="{Binding DataSource}"> 
    <TreeView.ItemContainerStyle> 
     <Style TargetType="{x:Type TreeViewItem}"> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="{x:Type TreeViewItem}"> 
         <Grid> 
          <Grid.ColumnDefinitions> 
           <ColumnDefinition Width="10" /> 
           <ColumnDefinition /> 
          </Grid.ColumnDefinitions> 
          <Grid.RowDefinitions> 
           <RowDefinition Height="Auto" /> 
           <RowDefinition Height="Auto" /> 
           <RowDefinition Height="Auto" /> 
          </Grid.RowDefinitions> 
          <ToggleButton 
           Name="ExpandButton" 
           ClickMode="Press" 
           IsChecked="{Binding Path=IsExpanded, RelativeSource={RelativeSource TemplatedParent}}" 
           /> 
          <ContentPresenter 
           Grid.Column="1" 
           ContentSource="Header" 
           /> 
          <TextBlock 
           Name="Caption" 
           Grid.Column="1" 
           Grid.Row="1" 
           Text="List Caption" 
           /> 
          <ItemsPresenter 
           Name="Content" 
           Grid.Column="1" 
           Grid.Row="2" 
           /> 
          </Grid> 
          <ControlTemplate.Triggers> 
          <Trigger Property="IsExpanded" Value="False"> 
          <Setter TargetName="Caption" Property="Visibility" Value="Collapsed" /> 
           <Setter TargetName="Content" Property="Visibility" Value="Collapsed" /> 
          </Trigger> 
          <Trigger Property="HasItems" Value="False"> 
           <Setter TargetName="ExpandButton" Property="Visibility" Value="Collapsed" /> 
          </Trigger> 
         </ControlTemplate.Triggers> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </TreeView.ItemContainerStyle> 
</TreeView> 

Примечание: Шаблонирование TreeViewItem, как это будет только добавить заголовок к дочерним элементам. Если вы хотите, чтобы корневые элементы также имели титры, вы можете либо перемотать TreeView аналогичным образом, либо просто поставить что-то выше самого TreeView.

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