2015-03-12 32 views
6

C# ile WPF ile programlamanın geleneksel C# yordamlarından farklı olduğunu anlıyorum, bu nedenle çevrimiçi materyalin çoğu ihtiyacım olanı belirtmiyor.WPF C# TreeView içindeki bir çocuğun üst düğümünü edinin

WPF Penceremde bir TreeView denetimim var ve içinde üst düğümler ve alt düğümler var. Bunları bir Node (id, name, parent) türü listesinde saklamak istiyorum.

enter image description here

Bunu kullanarak seçilen öğesi/düğümün adı var:

private void TreeViewItem_OnItemSelected(object sender, RoutedEventArgs e) 
{ 
    TreeViewItem item = treeView.SelectedItem as TreeViewItem; 
    nameTxt.Text = item.Header.ToString(); 
} 

Ve bu kullanarak ona hemen önce çocuk düğümün Ebeveyn alma çalıştı:

TreeViewItem item = treeView.SelectedItem as TreeViewItem; 
nameTxt.Text = item.Parent.ToString(); 

Ancak, bu, çocuğun üst bilgisi yerine Kök Üstünü (A) döndürür (bu 2'dir).

Çocuğun ana üst öğeyi kök ana yerine almak için ne gibi değişiklikler yapmalıyım? :)

DÜZENLEME: İşte küçük bir örnek düzenlendi XAML

<TreeView Name="treeView" HorizontalAlignment="Left" Height="564" Margin="10,68,0,0" VerticalAlignment="Top" Width="363"> 
    <TreeViewItem TreeViewItem.Selected="TreeViewItem_OnItemSelected" Header="A" IsExpanded="True" Height="554" FontSize="18"> 
       <TreeViewItem Header="1" /> 
       <TreeViewItem Header="2" /> 
    </TreeViewItem> 
</TreeView> 
+0

Bu alışılmadık bir durumdur. Bu, ebeveyn özelliği tarafından döndürülen düğümün üst öğesidir. Belki de sağladığınız kodun genişletilmiş bir sürümünü gösterir misiniz, belki sorun başka bir yerde olabilir – Hristo

+0

Öğe ne zaman? SelectedItem 'öğesi 'A' döndürür? –

+0

@ Chris bu tam bir koddur, dostum. Sadece seçilen öğeyi ve üst öğeyi bir metin kutusuna yazdırıyorum. A olan kök düğümüne eşleme yapmaya devam eder. Ancak seçilen öğe şu anda seçili olan öğeyi gösterir, sadece üst öğe – MWUser

cevap

13

yani MainWindow arkasında Kanununda yılında MainWindow.xaml

<TreeView Name="tree"> 
    <TreeView> 
     <TreeViewItem Header="North America" Selected="TreeViewItem_OnItemSelected"> 
      <TreeViewItem Header="USA"> 
       <TreeViewItem Header="New York"/> 
       <TreeViewItem Header="Las Vegas"/> 
       <TreeViewItem Header="Washington"/> 
      </TreeViewItem> 
      <TreeViewItem Header="Canada"> 
       <TreeViewItem Header="Toronto"/> 
       <TreeViewItem Header="Quebec"/> 
       <TreeViewItem Header="Montreal"/> 
      </TreeViewItem> 
      <TreeViewItem Header="Mexico"></TreeViewItem> 
     </TreeViewItem> 
    </TreeView> 
</TreeView> 

sorununuzu

göstermek için bu. xaml.cs

private void TreeViewItem_OnItemSelected(object sender, RoutedEventArgs e) 
    { 
     TreeViewItem item = e.OriginalSource as TreeViewItem; 
     if (item != null) 
     { 
      ItemsControl parent = GetSelectedTreeViewItemParent(item); 

      TreeViewItem treeitem = parent as TreeViewItem; 
      string MyValue= treeitem .Header.ToString();//Gets you the immediate parent 
     } 
    } 
    public ItemsControl GetSelectedTreeViewItemParent(TreeViewItem item) 
    { 
     DependencyObject parent = VisualTreeHelper.GetParent(item); 
     while (!(parent is TreeViewItem || parent is TreeView)) 
     { 
      parent = VisualTreeHelper.GetParent(parent); 
     } 

     return parent as ItemsControl; 
    } 

Ve bitti.

+0

Genius! Bu çalışan dostum! Bir gösteri hazırlamak için zaman ayırdığınız için çok teşekkürler. İyi günler Kyle! – MWUser

İlgili konular