2010-08-02 10 views
1

Dans mon application WPF, j'ai une liste de DocumentViewers qui sont liés à une propriété d'un objet. J'ajoute l'objet à un contrôle ListBox et applique par programme un datatemplate qui lie la propriété de l'objet à DocumentViewer. Cela signifie que DocumentViewer n'est pas du tout déclaré dans le code, mais je veux y accéder pour changer une propriété plus tard. Comment puis-je faire ceci? Mon code ressemble à ceci:Accès par programmation à un contrôle datatemplate dans WPF

<DataTemplate x:Key="SomeDataTemplate" x:Name="DocumentViewerTempl"> 
    <DocumentViewer x:Name="DocV" Document="{Binding DocumentContent}" 
        Style="{StaticResource DocumentViewerStyle1}"/> 
</DataTemplate> 

Le contenu du document sont la propriété de la classe DocumentContentDocument, comme vous pouvez le voir, la liaison se place au-dessus. Ma question est comment accéder à DocumentViewer dans le code? J'ai essayé de donner un nom et le référencement mais ce qui est clairement pas la façon de le faire ...

Merci

Répondre

2

Vous pouvez le faire via le ItemContainerGenerator:

var itemContainer = 
    listBox.ItemContainerGenerator.ContainerFromIndex(index) as ListBoxItem; 

// or: 
var itemContainer = 
    listBox.ItemContainerGenerator.ContainerFromItem(item) as ListBoxItem; 

var viewer = 
    itemContainer.ContentTemplate.FindName("DocV", itemContainer) as DocumentViewer; 

// Do stuff with viewer 
Questions connexes