WPF中TreeView控制元件如何獲取選中的TreeViewItem物件?
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的物件集合,就可以自動顯示:
然而,在寫這個小程式時,我發現了一個問題:當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程式設計師可以提早做些準備。
相關文章
- C#如何獲取ListView控制元件選中項的值C#View控制元件
- WPF中繼承ItemsControl子類控制元件資料模板獲取選中屬性中繼繼承控制元件
- WPF執行緒中獲取控制元件的值和給控制元件賦值執行緒控制元件賦值
- QTP中如何快速獲取Page中的物件個數QT物件
- WPF TreeView級聯複選View
- 【Javascript】獲取選中的文字JavaScript
- WPF中的Popup控制元件控制元件
- [WPF]獲取控制元件間的相對位置控制元件
- js如何獲取文字框內被選中的字串JS字串
- WPF中Popup控制元件的使用控制元件
- Java 獲取Excel中的表單控制元件JavaExcel控制元件
- js如何獲取選中radio單選按鈕的值JS
- js如何獲取select下拉選單的預設選中項JS
- jQuery如何獲取選中單選按鈕radio的值jQuery
- WPF中Ribbon控制元件的使用控制元件
- 原生js如何獲取選中的select下拉項的值JS
- Java中獲取Class物件的三種方式Java物件
- Delphi中的TreeViewView
- jquery如何獲取select下拉選單選中項的值和文字jQuery
- WPF TreeView BringIntoViewBehaviorView
- js取得gridview中獲取checkbox選中的值--單選JSView
- JavaScript獲取選中checkbox核取方塊的選中值JavaScript
- 【轉載】WPF中TreeView控制元件資料繫結和後臺動態新增資料(一)View控制元件
- jQuery如何獲取iframe中的元素jQuery
- JavaScript獲取選中checkbox valueJavaScript
- jquery獲取checkbox是否選中jQuery
- android listview獲取選中項AndroidView
- 在ActionForm中如何獲取session中的資料?ORMSession
- js 獲取被選中核取方塊的值JS
- JavaScript 獲取選中radio的idJavaScript
- listview 後天獲取選中項的值View
- WPF中3D控制元件的使用3D控制元件
- WPF實現html中的table控制元件HTML控制元件
- struts之Action中獲取request、response物件的方法物件
- c#樹控制元件treeview_新增treenode節點_選中顯示_刪除C#控制元件View
- JavaScript 獲取選中checkbox核取方塊的值JavaScript
- jquery獲取選中checkbox核取方塊的值jQuery
- js獲取選中checkbox核取方塊的值JS