TreeViewItem
绑定 TreeView 到数据结构,使用适当的模板渲染内容。
xaml <TreeView Name="treeView" Padding="0" Margin="5 5 0 5" Loaded="treeView_Loaded"> <TreeView.ItemTemplate> <HierarchicalDataTemplate DataType="{x:Type local:TreeNodeItem}" ItemsSource="{Binding Path=Children}"> <StackPanel Orientation="Horizontal"> <TextBlock VerticalAlignment="Center" Text="{Binding name}"></TextBlock> <StackPanel.ToolTip> <TextBlock VerticalAlignment="Center" Text="{Binding tips}" TextWrapping="Wrap" MaxWidth="200" ></TextBlock> </StackPanel.ToolTip> </StackPanel> </HierarchicalDataTemplate> </TreeView.ItemTemplate> </TreeView>
展开、收缩 需要在控件的 Loaded 事件里面处理
private void ExpandTree() { if (this.treeView.Items != null && this.treeView.Items.Count > 0) { foreach (var item in this.treeView.Items) { DependencyObject dependencyObject = this.treeView.ItemContainerGenerator.ContainerFromItem(item); if (dependencyObject != null)//第一次打开程序,dependencyObject为null,会出错 { ((TreeViewItem)dependencyObject).ExpandSubtree(); } } } } private void treeView_Loaded(object sender, RoutedEventArgs e) { ExpandTree(); }
事件 在 xaml 里面添加事件,对应的 cs 文件里面会添加映射函数
<TreeView Name="treeView" Padding="0" Margin="5 5 0 5" Loaded="treeView_Loaded" SelectedItemChanged="treeView_SelectedItemChanged"> ... </TreeView>
选择某一项 设置需要选择的项目的 IsSelected 为 true 就可以了
// xaml <TreeView Name="treeView" Padding="0" Margin="5 5 0 5" Loaded="treeView_Loaded" SelectedItemChanged="treeView_SelectedItemChanged"> <TreeView.Resources> <Style TargetType="TreeViewItem"> <Setter Property="IsSelected" Value="{Binding Path=IsSelected, Mode=TwoWay}" /> </Style> </TreeView.Resources> <TreeView.ItemTemplate> <HierarchicalDataTemplate DataType="{x:Type local:TreeNodeItem}" ItemsSource="{Binding Path=Children}"> <StackPanel Orientation="Horizontal"> <TextBlock VerticalAlignment="Center" Text="{Binding name}"></TextBlock> <StackPanel.ToolTip> <TextBlock VerticalAlignment="Center" Text="{Binding tips}" TextWrapping="Wrap" MaxWidth="200" ></TextBlock> </StackPanel.ToolTip> </StackPanel> </HierarchicalDataTemplate> </TreeView.ItemTemplate> </TreeView> // code internal class TreeNodeItem { public string name { get; set; } public string tips { get; set; } public int data { get; set; } public bool IsSelected { get; set; } public List<TreeNodeItem> Children { get; set; } public TreeNodeItem() { Children = new List<TreeNodeItem>(); } public TreeNodeItem(string inName, string inTips,int inData,bool inIsSelected=false) { name = inName; tips = inTips; data = inData; IsSelected = inIsSelected; Children = new List<TreeNodeItem>(); } }
失去焦点时设置背景色 <TreeView Name="treeView" Padding="0" Margin="5 5 0 5" Loaded="treeView_Loaded" SelectedItemChanged="treeView_SelectedItemChanged"> <TreeView.Resources> <Style TargetType="TreeViewItem"> <Setter Property="IsSelected" Value="{Binding Path=IsSelected, Mode=TwoWay}" /> </Style> <!-- Style the inactive selection the same as active --> <SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}" Color="{DynamicResource {x:Static SystemColors.HighlightColorKey}}" /> <SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightTextBrushKey}" Color="{DynamicResource {x:Static SystemColors.HighlightTextColorKey}}"/> </TreeView.Resources> <TreeView.ItemTemplate> <HierarchicalDataTemplate DataType="{x:Type local:TreeNodeItem}" ItemsSource="{Binding Path=Children}"> <StackPanel Orientation="Horizontal"> <TextBlock VerticalAlignment="Center" Text="{Binding name}"></TextBlock> <StackPanel.ToolTip> <TextBlock VerticalAlignment="Center" Text="{Binding tips}" TextWrapping="Wrap" MaxWidth="200" ></TextBlock> </StackPanel.ToolTip> </StackPanel> </HierarchicalDataTemplate> </TreeView.ItemTemplate> </TreeView>