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>
目前我有三个问题:
- 您不能在正在运行的程序中选择项目
- 页眉在右边大约有两个选项卡(不是关键的,但很难看)
- "IsExpanded"仅在双击项目时设置,而不是在单击[+]时设置
我不知道问题在哪里,所以请评论,我会更新我的问题!
编辑:Itemsource是一个列表数据树类:
public class DataTree:INotifyPropertyChanged
{
private string path;
private string name;
private ObservableCollection<DataTree> tree;
private bool isSelected;
private bool isExpanded;
}
(简单代码-没有属性和INotifyPropertyChanged的实现)
不要将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
来设置。