Asp.Net教程,WinForm教程,Asp.Net MVC,vs2008教程,vs2010教程,Silverlight技术,源码下载,Asp.Net视频教程
全站热门标签
vs2010 Silverlight 存储过程 水晶报表 ADO.NET JavaScript LINQ AjaxPro DataGridView 面向对象 Extjs GridView XML DevExpress HTML教程 Oracle jQuery 分页 GDI+ Visual C++2010 MySQL Office2010 WPF MVC Dojo WCF4.0 VB.NET Sql2005 textbox cookie WCF WinForm Discuz!NT SQL经典语句 T-SQL checkbox ASPxGridView F# asp.net SQL VS2008新特性 DropDownList Access TreeView Ajax VS2008 页面执行时间 Flex 字符串 回调 VB2005 DataSet C#时间 ASP.NET性能优化 用户在线检测 动画
Framework C#技术 VB.NET VC.NET WCFWPF
当前位置: 主页 > WinForm教程 > WPF >

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

时间:2010-03-06 13:49来源:未知 作者:admin 点击:

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的对象集合,就可以自动显示:


然而,在写这个小程序时,我发现了一个问题:当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程序员可以提早做些准备。
 

 

(责任编辑:admin)
Tags:WPF TreeView TreeViewItem
责任编辑:admin
返回顶部
------分隔线----------------------------
推荐内容
骆驼户外男 真皮磨砂日常休闲鞋 低帮 2011秋冬新款 专柜正品特价 骆驼户外男 真皮磨砂日常休闲鞋 低帮 2011秋冬新款 专柜正品特价