WPF xaml中的T​​reeview标头

时间:2013-01-22 03:53:20

标签: .net wpf xaml treeview

我在我的wpf应用程序中有一个树视图,它动态地绑定了我的viewmodel中的数据。

<TreeView Grid.Column="0"
          Grid.Row="0"
          ItemsSource="{Binding Main}"
          HorizontalAlignment="Stretch"
          Name="treeView1"
          VerticalAlignment="Stretch"
          Height="auto"
          Width="auto"
          SelectedItemChanged="treeView1_SelectedItemChanged"
          HorizontalContentAlignment="Stretch"
          VerticalContentAlignment="Top"
          Margin="0,0,5,5">
  <TreeView.ItemContainerStyle>
    <Style TargetType="{x:Type TreeViewItem}">
      <Setter Property="IsExpanded"
              Value="{Binding IsExpanded, Mode=TwoWay}" />
      <Setter Property="IsSelected"
              Value="{Binding IsSelected, Mode=TwoWay}" />
      <Setter Property="FontWeight"
              Value="Normal" />
      <Style.Triggers>
        <Trigger Property="IsSelected"
                 Value="True">
          <Setter Property="FontWeight"
                  Value="Bold" />
        </Trigger>
      </Style.Triggers>
    </Style>
  </TreeView.ItemContainerStyle>
  <TreeView.Resources>
    <HierarchicalDataTemplate DataType="{x:Type local:MViewModel}"
                              ItemsSource="{Binding Children}">
      <StackPanel Orientation="Horizontal">
        <TextBlock Text="{Binding Mname}" />
      </StackPanel>
    </HierarchicalDataTemplate>
    <HierarchicalDataTemplate DataType="{x:Type local:FViewModel}"
                              ItemsSource="{Binding Children}">
      <StackPanel Orientation="Horizontal">
        <TextBlock Text="{Binding FName}" />
      </StackPanel>
    </HierarchicalDataTemplate>
    <HierarchicalDataTemplate DataType="{x:Type local:CViewModel}"
                              ItemsSource="{Binding Children}">
      <StackPanel Orientation="Horizontal">
        <TextBlock Text="{Binding Com}" />
      </StackPanel>
    </HierarchicalDataTemplate>
    <DataTemplate DataType="{x:Type local:LViewModel}">
      <StackPanel Orientation="Horizontal">
        <TextBlock Text="{Binding Lo}" />
      </StackPanel>
    </DataTemplate>
  </TreeView.Resources>
</TreeView>

我需要将标题添加到整个树视图中说“Family”,其中childs是上面的treeview元素。 如何将标题添加到整个treeview.so当我点击该标题时,它应显示所有Mname,依此类推。 请帮我解决这个问题。

编辑:

我用过

  <HierarchicalDataTemplate  DataType="{x:Type TextBlock}" ItemsSource="{Binding Children}">
                        <StackPanel Orientation="Horizontal">
                            <TextBlock Text="Family" />
                        </StackPanel>
  </HierarchicalDataTemplate>

在我的TreeviewResource中。但我仍然无法为树分配父级。

编辑2:

<TreeView>
   <TreeViewItem ItemsSource="{Binding Main}" Header="Family">
      <TreeViewItemContainerStyle>
      //..
      </TreeViewItemContainerStyle>
      <TreeView.Resources>
      //..
      </TreeView.Resources>
   </TreeViewItem>
</TreeView>

显示错误。

但是当我喜欢下面的时候,

<TreeView>
       <TreeViewItemContainerStyle>
      //..
      </TreeViewItemContainerStyle>
      <TreeView.Resources>
      //..
      </TreeView.Resources>
   <TreeViewItem ItemsSource="{Binding Main}" Header="Family"/>
</TreeView>

已设置根项目。但只显示第一组孩子。子元素的子元素未显示。

1 个答案:

答案 0 :(得分:2)

您可以使用 Expander 元素包装 TreeView

<Expander Header="Family">
    <TreeView>
        ...
    <TreeView>
</Expander>

但是,从您的问题中不清楚您要将哪个元素用作Header

修改

因此,如果您需要树的根元素,可以在 xaml 中明确添加:

<TreeView> <!--ItemsSource you should set on a TreeViewItem-->
    <TreeViewItem ItemsSource="{Binding Main}" Header="Family">
        <TreeViewItem.ItemContainerStyle>
            ...
        </TreeViewItem.ItemContainerStyle>
        <TreeViewItem.Resources>
            ...
        </TreeViewItem.Resources>         
    </TreeViewItem>
<TreeView>