WPF C#:如何从HierarchicalDataTemplate获取treeviewitem头(WPF C#: How to get treeviewitem header from Hierar

编程入门 行业动态 更新时间:2024-10-26 07:36:55
WPF C#:如何从HierarchicalDataTemplate获取treeviewitem头(WPF C#: How to get treeviewitem header from HierarchicalDataTemplate)

我正在使用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.

更多推荐

本文发布于:2023-08-07 02:48:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1457938.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:HierarchicalDataTemplate   WPF   header   treeviewitem

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!