【问题标题】:Treeview Header in WPF xamlWPF xaml 中的树视图标题
【发布时间】:2013-01-22 03:53:19
【问题描述】:

我的 wpf 应用程序中有一个树视图,它动态绑定来自我的视图模型的数据。

<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>

我需要将标题添加到整个树视图中,比如“家庭”,其子项是上述树视图元素。 如何将标题添加到整个 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>

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

【问题讨论】:

    标签: .net wpf xaml treeview


    【解决方案1】:

    你可以用 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>
    

    【讨论】:

    • 感谢您的关注。我不需要扩展器。我需要一个树视图的根,就像父母一样。它不会改变。所以我可以对其进行硬编码。
    • 如果我这样使用会出现异常“在使用 ItemsSource 之前,项目集合必须为空”。我有一个包含 5 个元素的树结构,并且各个元素中都有子元素。我需要为整个添加一个根。当我单击该根(树视图)时,它应该显示这 5 个元素。
    • 您是否尝试在 TreeView 中删除 ItemsSource?我所有的作品都很完美。您也可以尝试在 TreeViewItem 中移动资源和ItemContainerStyle
    • 按照你的指示我做了。树的父级添加成功。 Local:MviewModel 中的 Mname 作为 root 的子项加载。之后,各个子元素无法加载..:(无法弄清楚为什么..:(
    • 你应该在 TreeViewItem 中使用精确的TreeViewItem.Resources。不是TreeView.Resources
    猜你喜欢
    • 2011-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-28
    相关资源
    最近更新 更多