在tabItem中获取UserControl

时间:2017-06-08 08:25:13

标签: c# wpf user-controls datatemplate tabitem

我有TabControl,带有模板,如下:

<TabControl ItemsSource="{Binding MyItems}" x:Name="tabs">
  <TabControl.Resources>
    <DataTemplate x:Key="contentTemplate" x:Name="contentTemplate" >
      <other:MyUserControl x:Name="mUserControl"  CustomData="{Binding}"/>
    </DataTemplate>
    <Style TargetType="{x:Type TabItem}">
      <Setter Property="Header" Value="{Binding Name}" />
      <Setter Property="ContentTemplate" Value="{StaticResource contentTemplate}"/>
    </Style>
  </TabControl.Resources>
</TabControl>

MyItemsObservableCollection个自定义对象。 当我致电tabs.SelectedContent时,它会返回一个项目。

我想获得MyUserControl DataTemplate中包含的UserControl contentTemplate

由于mUserControl位于模板中,因此我无法将其称为mUserControl.doSomething()

我尝试使用模板“FindName”功能:

ControlTemplate dt = tabs.Template;
MyUserControl mControl = (MyUserControl)dt.FindName("mUserControl", tabs);

但它返回null。

我想访问MyUserControl对象来调用一个会改变它状态的函数(显示一个控件并隐藏另一个控件)。 当用户单击MenuItem(由MainWindow拥有)时,会发生这种情况,但受影响的窗口小部件是UserControl。

那么,我如何获得对MyUserControl对象的引用?

1 个答案:

答案 0 :(得分:1)

您可以从TabControl中更深入地遍历您的Visual树,您可以获得其中的所有用户控件。

您应该阅读有关视觉树或这样的答案: Find control in the visual tree