我正在使用HierarchicalDataTemplate来构建我的TreeView dynamicaly,并不知道如何从treeview中获取所选项目的标题。
我试图通过TreeViewItem.Selected事件来获取它。
private void TreeViewItem_OnItemSelected(object sender, RoutedEventArgs e) { TreeViewItem item = e.OriginalSource as TreeViewItem; string name = item.Header.ToString(); }但'item.Header'属于Node类型
这是我的XAML代码:
<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>I am using HierarchicalDataTemplate to build my TreeView dynamicaly and don't know how to get the header of the selected item from treeview.
I tried to get it by the TreeViewItem.Selected event.
private void TreeViewItem_OnItemSelected(object sender, RoutedEventArgs e) { TreeViewItem item = e.OriginalSource as TreeViewItem; string name = item.Header.ToString(); }but 'item.Header' is of type Node
this is my 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 ,似乎是。 标题将是您用于标题的类的任何属性 - Name ,它看起来像。
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的集合中包含的类。 我还包括演示如何获取所选TreeViewItem代码。
Yes, the selected item will be one of the items in RootNodes. Cast it to that type. Node, it seems to be. The header will be whatever property of that class you use for the header -- Name, it looks like.
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 is the class contained in the collection you bound to ItemsSource on the TreeView. I've also included code demonstrating how to get the selected TreeViewItem.
更多推荐
发布评论