ツリービュー項目(TreeViewItem)は自分自身の親項目を表すParentプロパティを持っています。
そこで、選択されている項目から再帰的に親項目を辿っていけば、現在選択されている項目のパスを得ることができます。
下記は、選択された項目のパスを取得する例です。
GetCurrentPathという関数で、指定された項目からルート項目までを再帰的に辿り、パスを表す文字列を作成します。
XAMLの例(WPFの例)
<DockPanel Name="DockPanel1" LastChildFill="True"> <TextBlock Name="TextBlock1" Margin="3" DockPanel.Dock="Bottom"/> <TreeView Name="TreeView1" DockPanel.Dock="Top"> <TreeViewItem Header="親1" Name="TreeViewItem1"> <TreeViewItem Header="子1" /> <TreeViewItem Header="子2"> <TreeViewItem Header="孫1"> <TreeViewItem Header="曾孫1" /> <TreeViewItem Header="曾孫2" /> <TreeViewItem Header="曾孫3" /> </TreeViewItem> <TreeViewItem Header="孫2" /> </TreeViewItem> </TreeViewItem> </TreeView> </DockPanel>
XAMLの例(Silverlightの例)
<sdk:TreeView Height="220" HorizontalAlignment="Left" Margin="10,44,0,0" VerticalAlignment="Top" Width="250" Name="TreeView1"> <sdk:TreeViewItem Header="親" Name="rootItem"> <sdk:TreeViewItem Header="子1" /> <sdk:TreeViewItem Header="子2"> <sdk:TreeViewItem Header="孫1"> <sdk:TreeViewItem Header="曾孫1" /> <sdk:TreeViewItem Header="曾孫2" /> <sdk:TreeViewItem Header="曾孫3" /> </sdk:TreeViewItem> <sdk:TreeViewItem Header="孫2" /> </sdk:TreeViewItem> </sdk:TreeViewItem> </sdk:TreeView> <TextBlock Height="23" HorizontalAlignment="Left" Margin="12,270,0,0" Name="TextBlock1" Text="TextBlock" VerticalAlignment="Top" />
VBの例
Private Sub TreeView1_SelectedItemChanged(ByVal sender As System.Object, ByVal e As System.Windows.RoutedPropertyChangedEventArgs(Of System.Object)) Handles TreeView1.SelectedItemChanged '選択項目のパスをテキストブロックに表示する TextBlock1.Text = GetCurrentPath(TreeView1.SelectedItem) End Sub ''' <summary> ''' 指定項目のパスを取得する ''' </summary> ''' <param name="item"></param> ''' <returns>パスを取得するツリービュー項目</returns> ''' <remarks>指定項目のパス</remarks> Private Function GetCurrentPath(ByVal item As TreeViewItem) As String Dim strPath As String = item.Header.ToString() '親項目がTreeViewItemか? If DirectCast(item, TreeViewItem).Parent.GetType().Equals(GetType(TreeViewItem)) Then '親項目を変数にセット Dim parentItem As TreeViewItem = DirectCast(item.Parent, TreeViewItem) strPath = GetCurrentPath(parentItem) & " > " & strPath End If Return strPath End Function
C#の例
private void TreeView1_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e) { // 選択項目のパスをテキストブロックに表示する TextBlock1.Text = GetCurrentPath((TreeViewItem)TreeView1.SelectedItem); } /// <summary> /// 指定項目のパスを取得する /// </summary> /// <param name="item">パスを取得するツリービュー項目</param> /// <returns>指定項目のパス</returns> private string GetCurrentPath(TreeViewItem item) { string strPath = item.Header.ToString(); // 親項目がTreeViewItemか? if (((TreeViewItem)item).Parent.GetType().Equals(typeof(TreeViewItem))) { // 親項目を変数にセット TreeViewItem parentItem = (TreeViewItem)item.Parent; strPath = GetCurrentPath(parentItem) + " > " + strPath; } return strPath; }