如何获取内容控件中托管的用户控件的父级?



在 WPF 应用程序中,我有一个ContentControl.在这个内容控件中,我有一个View

从一个特定的UserControl开始,我试图进入它的逻辑树,并"激活"过程中的每个组件。例如,如果父母一方是Tab,我通过示例选择它。

我的问题是,当我的UserControlContentControl中时,当我调用LogicalTreeHelper.GetParent(...)时,我会收到空:

private static void Activate(FrameworkElement frameworkElement)
{
//Here, in one iteration, I receive null when it's supposed to be the `ContentControl`.
DependencyObject parent = LogicalTreeHelper.GetParent(frameworkElement); 
if (parent is FrameworkElement parentFrameworkElement) 
{
Activate(parentFrameworkElement);
}
if (frameworkElement is DXTabItem tab)
{
tab.IsSelected = true;//If it's a  tab, it gets activated
}
frameworkElement.Focus();
}

我的 Xaml 是这样的:

<dx:DXTabControl AllowMerging="True" TabContentCacheMode="None" Margin="0,3,0,0">
<dx:DXTabItem Header="Some channel">
<local:SomeControl Channel="{Binding Channel}"/>
</dx:DXTabItem>
<dx:DXTabItem Header="Some other view">
<ContentControl Content="{Binding Channel, Converter={StaticResource SomeModelToViewModelConverter}}" ContentTemplateSelector="{StaticResource ConventionBasedDataTemplateSelector}" />
</dx:DXTabItem>
</dx:DXTabControl>

所以:知道如何从其中的控件获取ContentControl吗?

编辑这似乎与控件位于未选中的选项卡中这一事实有关(我的功能的目标是激活绑定到某些内容的用户控件所在的选项卡(。

假设元素已加载并添加到可视化树中,则可以使用以下递归方法来查找父元素:

private static T FindParent<T>(DependencyObject dependencyObject) where T : DependencyObject
{
var parent = VisualTreeHelper.GetParent(dependencyObject);
if (parent == null) return null;
var parentT = parent as T;
return parentT ?? FindParent<T>(parent);
}

示例用法:

DXTabItem parent = FindParent<DXTabItem>(frameworkElement); 

最新更新