WPF C#:如何从 HierarchicalDataTemplate 获取 treeviewitem header
WPF C#: How to get treeviewitem header from HierarchicalDataTemplate
我正在使用 HierarchicalDataTemplate 动态构建我的 TreeView,但不知道如何从 treeview 中获取所选项目的 header。
我试图通过 TreeViewItem.Selected 事件获得它。
private void TreeViewItem_OnItemSelected(object sender, RoutedEventArgs e)
{
TreeViewItem item = e.OriginalSource as TreeViewItem;
string name = item.Header.ToString();
}
但是 'item.Header' 的类型是
这是我的 XAML-code:
<Window x:Class="MaschinenStoppScheduler.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:MyNamespace="clr-namespace:MaschinenStoppScheduler"
Title="MaschinenStoppScheduler" Height="500" Width="900" Loaded="Window_Loaded_1">
<Window.DataContext>
<MyNamespace:MainWindowVM />
</Window.DataContext>
<Grid>
<TreeView x:Name="TreeViewGroups" TreeViewItem.Selected ="TreeViewItem_OnItemSelected"
ItemsSource="{Binding RootNodes}" HorizontalAlignment="Left" Margin="20,28,0,25"
VerticalAlignment="Stretch" Width="181" SelectedItemChanged="TreeViewGroups_SelectedItemChanged">
<ItemsControl.ItemContainerStyle>
<Style
TargetType="{x:Type TreeViewItem}">
<Setter Property="IsExpanded" Value="{Binding IsExpanded}" />
</Style>
</ItemsControl.ItemContainerStyle>
<ItemsControl.ItemTemplate>
<HierarchicalDataTemplate DataType="{x:Type MyNamespace:Node}" ItemsSource="{Binding Children}">
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
<TextBlock Text="{Binding Name}" />
</StackPanel>
</HierarchicalDataTemplate>
</ItemsControl.ItemTemplate>
</TreeView>
</Grid>
是的,所选项目将是 RootNodes 中的项目之一。将其转换为该类型。 Node
,好像是。 header 将是您用于 header -- Name
的 class 的任何 属性,它看起来像。
private void TreeView_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
var treeView = sender as TreeView;
var selectedNode = treeView.SelectedItem as Node;
TreeViewItem tvi = treeView.ItemContainerGenerator.ContainerFromItem(treeView.SelectedItem) as TreeViewItem;
}
Node
是您在 TreeView
上绑定到 ItemsSource
的 collection 中包含的 class。我还包含了演示如何获取所选 TreeViewItem
的代码。
我正在使用 HierarchicalDataTemplate 动态构建我的 TreeView,但不知道如何从 treeview 中获取所选项目的 header。
我试图通过 TreeViewItem.Selected 事件获得它。
private void TreeViewItem_OnItemSelected(object sender, RoutedEventArgs e)
{
TreeViewItem item = e.OriginalSource as TreeViewItem;
string name = item.Header.ToString();
}
但是 'item.Header' 的类型是
这是我的 XAML-code:
<Window x:Class="MaschinenStoppScheduler.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:MyNamespace="clr-namespace:MaschinenStoppScheduler"
Title="MaschinenStoppScheduler" Height="500" Width="900" Loaded="Window_Loaded_1">
<Window.DataContext>
<MyNamespace:MainWindowVM />
</Window.DataContext>
<Grid>
<TreeView x:Name="TreeViewGroups" TreeViewItem.Selected ="TreeViewItem_OnItemSelected"
ItemsSource="{Binding RootNodes}" HorizontalAlignment="Left" Margin="20,28,0,25"
VerticalAlignment="Stretch" Width="181" SelectedItemChanged="TreeViewGroups_SelectedItemChanged">
<ItemsControl.ItemContainerStyle>
<Style
TargetType="{x:Type TreeViewItem}">
<Setter Property="IsExpanded" Value="{Binding IsExpanded}" />
</Style>
</ItemsControl.ItemContainerStyle>
<ItemsControl.ItemTemplate>
<HierarchicalDataTemplate DataType="{x:Type MyNamespace:Node}" ItemsSource="{Binding Children}">
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
<TextBlock Text="{Binding Name}" />
</StackPanel>
</HierarchicalDataTemplate>
</ItemsControl.ItemTemplate>
</TreeView>
</Grid>
是的,所选项目将是 RootNodes 中的项目之一。将其转换为该类型。 Node
,好像是。 header 将是您用于 header -- Name
的 class 的任何 属性,它看起来像。
private void TreeView_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
var treeView = sender as TreeView;
var selectedNode = treeView.SelectedItem as Node;
TreeViewItem tvi = treeView.ItemContainerGenerator.ContainerFromItem(treeView.SelectedItem) as TreeViewItem;
}
Node
是您在 TreeView
上绑定到 ItemsSource
的 collection 中包含的 class。我还包含了演示如何获取所选 TreeViewItem
的代码。