2009-03-13 8 views
1

Mein Baum Definition lautet:Suche ItemTemplate Kontrolle in TreeView

<TreeView Name="tree" ItemsSource="{Binding Children}" > 
    <TreeView.ItemTemplate> 
     <HierarchicalDataTemplate ItemsSource="{Binding Children}"> 
      <CheckBox Name="foo"></CheckBox> 
     </HierarchicalDataTemplate> 
    </TreeView.ItemTemplate> 
</TreeView> 

ein TreeViewItem Element, ich versuche CheckBox zu finden entspricht, aber

tree.Template.FindName("foo", item); 

wirft

[System.InvalidOperationException] = {"This operation is valid only on elements that have this template applied."} 

Und

item.Template.FindName("foo", item) 

gibt mir null. Was ist eine richtige Lösung?

Antwort

0

Versuchen Sie das x: Name-Eigenschaft anstelle der Eigenschaft Name ...

Zweitens müssen Sie die ItemTemplate verweisen, nicht auf die Vorlage des TreeView

Auch der zweite Parameter der Behälter sein muss der ListItem, nicht das Datenelement:

ContentPresenter container = (ContentPresenter) tree.ItemContainerGenerator.ContainerFromItem(item); 
CheckBox box = (CheckBox) container.ContentTemplate.FindName("Foo", container); 
+0

Ihr Code tatsächlich 'null' Behälter zurückgeführt, aber mit einem solchen Code: Content Container = FindVisualChild (Punkt); Ich habe das "foo" Element. Vielen Dank! – alex2k8

+0

Weitere Informationen zu FindVisualChild finden Sie unter http://stackoverflow.com/questions/980120/finding-control-within-wpf-itemscontrol – Jake1164