<TreeView Name="myTreeViewEvent" >
<TreeViewItem Header="Employee1" IsSelected="True">
<TreeViewItem Header="Jesper Aaberg"/>
<TreeViewItem Header="Employee Number">
<TreeViewItem Header="12345"/>
</TreeViewItem>
<TreeViewItem Header="Work Days">
<TreeViewItem Header="Monday"/>
<TreeViewItem Header="Tuesday"/>
<TreeViewItem Header="Thursday"/>
</TreeViewItem>
</TreeViewItem>
<TreeViewItem Header="Employee2">
<TreeViewItem Header="Dominik Paiha"/>
<TreeViewItem Header="Employee Number">
<TreeViewItem Header="98765"/>
</TreeViewItem>
<TreeViewItem Header="Work Days">
<TreeViewItem Header="Tuesday"/>
<TreeViewItem Header="Wednesday"/>
<TreeViewItem Header="Friday"/>
</TreeViewItem>
</TreeViewItem>
</TreeView>
创建 TreeView
TreeView 控件包含 TreeViewItem 控件的层次结构。 TreeViewItem 控件是具有 Header 和 Items 集合的 HeaderedItemsControl。
如果使用 Extensible Application Markup Language (XAML) 定义 TreeView,则可以显式定义 TreeViewItem 控件的 Header 内容以及标记其集合的项。 上图演示了此方法。
还可以指定 ItemsSource 作为数据源,然后指定 HeaderTemplate 和 ItemTemplate 以定义 TreeViewItem 内容。
要定义 TreeViewItem 控件的布局,还可使用 HierarchicalDataTemplate 对象。 有关详细信息和示例,请参阅使用 SelectedValue、SelectedValuePath 和 SelectedItem。
如果某个项不是 TreeViewItem 控件,当显示 TreeView 控件时,该项自动包含在 TreeViewItem 控件中。
展开和折叠 TreeViewItem
如果用户展开 TreeViewItem,则 IsExpanded 属性将设置为 true。 还可以通过将 IsExpanded 属性设置为 true(展开)或 TreeViewItem(折叠)来展开或折叠 false,而无需任何直接的用户操作。 当此属性发生更改时,会发生 Expanded 或 Collapsed 事件。
在 TreeViewItem 控件上调用 BringIntoView 方法时,TreeViewItem 及其父 TreeViewItem 控件将展开。 如果 TreeViewItem 不可见或部分可见,则 TreeView 将滚动以使其可见。
TreeViewItem 选择
当用户单击 TreeViewItem 控件以将其选中时,将发生 Selected 事件,并且其 IsSelected 属性将设置为 true。 TreeViewItem 也将成为 TreeView 控件的 SelectedItem。 相反,当所选内容从 TreeViewItem 控件更改为其他内容时,将发生 Unselected 事件,并且其 IsSelected 属性将设置为 false。
TreeView 控件上的 SelectedItem 属性是只读属性,因此无法显式设置它。 如果用户单击 TreeViewItem 控件或者当 TreeViewItem 控件上的 IsSelected 属性设置为 true 时,则会设置 SelectedItem 属性。
使用 SelectedValuePath 属性指定 SelectedItem 的 SelectedValue。 有关详细信息,请参阅使用 SelectedValue、SelectedValuePath 和 SelectedItem。
可以在 SelectedItemChanged 事件上注册事件处理程序,以便确定所选的 TreeViewItem 何时更改。 向事件处理程序提供的 RoutedPropertyChangedEventArgs<T> 指定 OldValue(上一个选择)和 NewValue(当前选择)。 如果应用程序或用户未进行上一个或当前选择,则任一值都可能为 null。
TreeView 样式
针对 TreeView 控件的默认样式是将其放在包含 ScrollViewer 控件的 StackPanel 对象内部。 设置 TreeView 的 Width 和 Height 属性时,这些值用于调整显示 TreeView 的 StackPanel 对象的大小。 如果要显示的内容大于显示区域,ScrollViewer 将自动显示,以便用户可以滚动浏览 TreeView 内容。
若要自定义 TreeViewItem 控件的外观,请将 Style 属性设置为自定义 Style。
下面的示例演示如何使用 Style 设置 TreeViewItem 控件的 Foreground 和 FontSize 属性值。
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="Foreground" Value="Blue"/>
<Setter Property="FontSize" Value="12"/>
</Style>
向 TreeView 项添加图像和其他内容
可在 TreeViewItem 的 Header 内容中包含多个对象。 若要将多个对象包含在 Header 内容中,请将这些对象包含在布局控件内,如 Panel 或 StackPanel。
以下示例演示如何将 TreeViewItem 的 Header 定义为 CheckBox 和 TextBlock,这两者都包含在 DockPanel 控件中。
<TreeViewItem>
<TreeViewItem.Header>
<DockPanel>
<CheckBox/>
<TextBlock>
TreeViewItem Text
</TextBlock>
</DockPanel>
</TreeViewItem.Header>
</TreeViewItem>
以下示例演示如何定义包含 Image 和 TextBlock(这两者都包含在 DockPanel 控件中)的 DataTemplate。 可以使用 DataTemplate 设置TreeViewItem 的 HeaderTemplate 或 ItemTemplate。
<DataTemplate x:Key="NewspaperTVItem">
<DockPanel>
<Image Source="images\icon.jpg"/>
<TextBlock VerticalAlignment="center" Text ="{Binding Path=Name}"/>
</DockPanel>
</DataTemplate>
TreeView
TreeViewItem
操作指南主题
WPF 内容模型