2015-03-12 9 views
6

में एक बच्चे का अभिभावक नोड प्राप्त करें मैं समझता हूं कि डब्ल्यूपीएफ के साथ सी # में प्रोग्रामिंग पारंपरिक सी # प्रक्रियाओं से अलग है, इसलिए अधिकांश ऑनलाइन सामग्री मुझे जो चाहिए वह बताती नहीं है।डब्ल्यूपीएफ सी # ट्री व्यू

मेरे पास मेरे डब्ल्यूपीएफ विंडो में ट्री व्यू नियंत्रण है और मेरे पास पैरेंट नोड्स और बाल नोड्स हैं। मैं उन्हें एक प्रकार की सूची नोड (आईडी, नाम, अभिभावक) में स्टोर करना चाहता हूं।

enter image description here

मैं इस का उपयोग करते हुए चयनित आइटम/नोड के नाम मिला:

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

और मैं इस का उपयोग कर इसे से ठीक पहले चाइल्ड नोड के जनक हो रही करने की कोशिश की:

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

हालांकि, यह बच्चे के माता-पिता के बजाय रूट अभिभावक (ए) देता है (जो 2 है)।

मूल माता-पिता के बजाय बच्चे के तत्काल माता-पिता को पाने के लिए मुझे क्या परिवर्तन करना चाहिए? :)

संपादित करें: यहाँ 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

यह असामान्य है कि यह मूल संपत्ति द्वारा लौटाए गए नोड का अभिभावक है। क्या आप शायद आपके द्वारा प्रदान किए गए कोड का एक विस्तारित संस्करण दिखा सकते हैं, शायद समस्या कहीं और है – Hristo

+0

'itemItem 'क्या था जब आइटम' माता-पिता 'रिटर्न 'ए'? –

+0

@Chris यह पूरा कोड है, दोस्त। मैं सिर्फ चयनित आइटम और अभिभावक को टेक्स्टबॉक्स में प्रिंट कर रहा हूं। यह रूट रूट नोड पर मैपिंग करता रहता है जो ए है। हालांकि चयनित आइटम वर्तमान में चयनित आइटम दिखाता है, यह सिर्फ इतना है कि माता-पिता – MWUser

उत्तर

13

एक छोटा सा उदाहरण बनाया आपकी समस्या

यानी MainWindow के पीछे कोड में 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> 

में प्रदर्शित करने के लिए है। 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; 
    } 

और यह किया गया।

+0

जीनियस! यह दोस्त काम किया! एक प्रदर्शन स्थापित करने के लिए समय निकालने के लिए बहुत बहुत धन्यवाद। एक महान दिन काइल है! – MWUser

संबंधित मुद्दे