2009-03-13 8 views
1

Ma définition de l'arbre est:Trouver contrôle ItemTemplate dans TreeView

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

Avoir un élément TreeViewItem, j'essaie de trouver correspondant CheckBox, mais

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

jette

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

Et

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

me donne null. Quelle est la bonne solution?

Répondre

0

Essayez x: propriété Name, au lieu de la propriété Name ...

En second lieu, vous devez référencer ItemTemplate, pas le modèle du TreeView

De plus, le second paramètre doit être le conteneur du ListItem, pas l'élément de données:

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

Votre code effectivement retourné contenant 'null', mais avec ce code: ContentPresenter conteneur = FindVisualChild (point); J'ai l'élément "foo". Merci! – alex2k8

+0

Voir http://stackoverflow.com/questions/980120/finding-control-within-wpf-itemscontrol pour plus de détails sur FindVisualChild – Jake1164

Questions connexes