WPF TreeView项不可选

本文关键字:TreeView WPF | 更新日期: 2023-09-27 18:24:11

我目前正在WPF中编写一个文件夹浏览器对话框。为了显示树,我使用TreeView:

<TreeView Name="FolderView" ItemsSource="{Binding DataTrees}" Grid.Row="0">
    <TreeView.ItemTemplate>
      <HierarchicalDataTemplate ItemsSource="{Binding Tree}">
      <TreeViewItem IsSelected="{Binding IsSelected, Mode=TwoWay}" IsExpanded="{Binding IsExpanded, Mode=TwoWay}" Header="{Binding Name}" HorizontalAlignment="Left"/>
      </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
  </TreeView>

目前我有三个问题:

  1. 您不能在正在运行的程序中选择项目
  2. 页眉在右边大约有两个选项卡(不是关键的,但很难看)
  3. "IsExpanded"仅在双击项目时设置,而不是在单击[+]时设置

我不知道问题在哪里,所以请评论,我会更新我的问题!

编辑:Itemsource是一个列表数据树类:

public class DataTree:INotifyPropertyChanged
{
  private string path;
  private string name;
  private ObservableCollection<DataTree> tree;
  private bool isSelected;
  private bool isExpanded;
}

(简单代码-没有属性和INotifyPropertyChanged的实现)

WPF TreeView项不可选

不要将TreeViewItem直接添加到ItemTemplate中:

<TreeView Name="FolderView" ItemsSource="{Binding DataTrees}" Grid.Row="0">
    <TreeView.ItemContainerStyle>
        <Style TargetType="{x:Type TreeViewItem}">    
            <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}"/>
            <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}"/>
            <Setter Property="HorizontalAlignment" Value="Left"/>
        </Style>    
    </TreeView.ItemContainerStyle>
    <TreeView.ItemTemplate>
      <HierarchicalDataTemplate ItemsSource="{Binding Tree}">
          <TextBlock Text="{Binding Name}"/>
      </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
</TreeView>

与任何ItemsControl一样,TreeView将其数据项包装到项容器中(在您的情况下为TreeViewItem)。因此,诸如选择和扩展之类的事情应该通过ItemContainerStyle来设置。