WPF中TreeView控件如何获取选中的TreeViewItem

系统 2416 0

WPF中TreeView控件如何获取选中的TreeViewItem对象?

WPF的TreeView控件与过去的TreeView控件完全不同,几乎是从头重写了一遍,其最重要的特点之一就是支持绑定到层次型数据。只需给其指定一个HierarchicalDataTemplate即可。非常方便。请看以下例子:

<Window.Resources>
<!--大学-->
<HierarchicalDataTemplate ItemsSource="{Binding Path=Academies}" DataType="{x:Type local:University}">
<TextBlock Text="{Binding Path=UniversityName}"></TextBlock>
</HierarchicalDataTemplate>
<!--学院-->
<HierarchicalDataTemplate ItemsSource="{Binding Path=Departments}" DataType="{x:Type local:Academy}">
<TextBlock Text="{Binding Path=AcademyName}"></TextBlock>
</HierarchicalDataTemplate>
<!--系-->
<DataTemplate DataType="{x:Type local:Department}">
<TextBlock Text="{Binding Path=DepartmentName}"/>
</DataTemplate>

</Window.Resources>

其中,大学-->学院-->系,构成一个典型的对象层次。

以下XAML代码实现绑定:

<TreeView ……>
<TreeViewItem ItemsSource="{Binding}" Header="大学列表">
</TreeViewItem>

只需给TreeView的DataContext赋一个University的对象集合,就可以自动显示:

WPF中TreeView控件如何获取选中的TreeViewItem对象?

然而,在写这个小程序时,我发现了一个问题:当TreeView绑定到数据集合后,TreeView.SelectedItem返回的不是我预想中的TreeViewItem,而就是数据对象本身(如University,Academy等)。

这虽然方便了数据对象的提取,却带来其他的麻烦,比如,我可能需要将选中的节点加上红色标记以突出显示,或者是自动展开选中节点的子树,或者访问其父节点对象,这都需要获取TreeViewItem对象。

我想了多种方法在TreeView本身的SelectedItemChanged事件中尝试取出选中节点对应的TreeViewItem对象,均无功而返。

最后的解决方法很戏剧化,其实不根本需要钻牛角尖,非要在SelectedItemChanged事件中干这事。TreeViewItem本身有一个Selected事件,其参数e中就提供了需要的TreeViewItem对象。

于是,解决方案很简单,在TreeView中响应TreeViewItem的附加事件Selected:

<TreeView Name="treeView1" TreeViewItem.Selected="treeView1_Selected" ……>
<T/reeView>

其事件代码如下:


private void treeView1_Selected(object sender, RoutedEventArgs e)
{

//e.OriginalSource就是TreeViewItem对象,你可以将其保存到窗体类的某个私有字段中,或者直接使用它,如下所示:
(e.OriginalSource as TreeViewItem).IsExpanded = true;
}

搞定!

当前正在制作给企业培训所用的WPF教学PPT,对其特性进行了较多的探索与应用,谈些感触:

WPF比原先的Windows Form灵活得多,有几个特性我实在是非常欣赏:

(1)模板(包括控件模板与数据模板)

(2)数据绑定

(3)路由事件和依赖属性

我个人认为,在Windows桌面应用领域,WPF迟早必将全面取代Windows Form。诸位.NET程序员可以提早做些准备。

WPF中TreeView控件如何获取选中的TreeViewItem对象?


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论