我有一个TabControl
,其中ContentTemplate
由DataTemplate
定义,其中包含ContentPresenter
。映射UIElement
类由特定ViewModel类型的DataTemplate
定义。它的工作原理如下:
<UserControl.Resources>
<DataTemplate DataType="{x:Type ViewModels:DiagramVM}">
<Controls:Diagram DataContext="{Binding}" x:Name="diagram"/>
</DataTemplate>
</UserControl.Resources>
<TabControl ItemsSource="{Binding Path=Tabs, Mode=TwoWay}" SelectedIndex="{Binding Path=SelectedTabIndex}"
x:Name="AnalysisTabCtrl" Template="{DynamicResource ScrollableTabControlTemplate}">
<TabControl.ItemTemplate>
<DataTemplate>
<Label Content="{Binding Path=Header}"/>
</DataTemplate>
</TabControl.ItemTemplate>
<TabControl.ContentTemplate>
<DataTemplate>
<ContentPresenter Content="{Binding Path=ViewModel}"/>
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
我的问题是我需要实例化的UIElements的实例。在这种情况下, Diagram 实例。我怎么能得到它们?
答案 0 :(得分:1)
您可以使用ItemsControl.ItemContainerGenerator
从TabItem
中获取TabControl
,然后您可以使用FindName
上的TabItem.ContentTemplate
来搜索已命名的实例化控制。 (在这里你可能需要命名内容演示者,然后再次搜索其ContentTemplate
)
我不建议做这样的事情,如果没有这个你就无法管理,你可能没有将所有相关属性绑定到你的项目。