以编程方式访问WPF中的datatemplate控件

时间:2010-08-02 21:22:53

标签: c# wpf xaml data-binding listbox

在我的WPF应用程序中,我有一个DocumentViewers列表,它们绑定到一个对象的某个属性。我将对象添加到ListBox并以编程方式应用一个datatemplate,它将对象的属性绑定到DocumentViewer。这意味着DocumentViewer根本没有在代码中声明,但我希望稍后更改属性。我怎样才能做到这一点?我的代码如下所示:

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

文档的内容位于DocumentContent类的Document属性中,如您所见,绑定发生在上面。我的问题是如何在代码中访问DocumentViewer?我试过给它一个名字并引用它,但这显然不是这样做的方法......

由于

1 个答案:

答案 0 :(得分:2)

您可以通过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