C# 如何获取VisualParent的DataContext?

C# 如何获取VisualParent的DataContext?,c#,togglebutton,C#,Togglebutton,我有一个结构如下的切换按钮: private void ToggleButton_Checked(object sender, System.Windows.RoutedEventArgs e) { //store settings } 我需要获得VisualParent的详细信息,特别是DataContext,我如何才能做到这一点?谢谢 更新 xaml结构如下所示: <ToggleButton Focusable="False" Width="19" Height="19"

我有一个结构如下的
切换按钮

private void ToggleButton_Checked(object sender, System.Windows.RoutedEventArgs e)
{
     //store settings
}
我需要获得
VisualParent
的详细信息,特别是
DataContext
,我如何才能做到这一点?谢谢

更新

xaml结构如下所示:

<ToggleButton Focusable="False" Width="19" Height="19" IsChecked="{Binding Path = IsFavourite}" 
                  Checked="ToggleButton_Checked" Unchecked="ToggleButton_Unchecked">

您可以使用不同的控件而不是网格。因此,请根据您的xaml结构替换它。

更新:

你真的需要它吗?查看XAML,您并没有在ToggleButton中设置DataContext,所以您应该从设置其值的父级继承其值

请参阅:

此依赖项属性继承属性值。如果存在没有通过本地值或样式建立的DataContext的其他值的子元素,则特性系统将该值设置为最近的父元素的DataContext值,并指定该值

不管怎样,如果你需要它

原件: 任何假设XAML中存在给定结构的答案都是错误的。始终可以应用更改结构的模板

话虽如此,您可以使用类(GetParent方法)来导航可视化树。第一个参数是对已检查控件的引用

因此,在我的脑海中,我想你可以做以下几点:

DependencyObject source = sender as DependencyObject;
if(null != source) {
    DependencyObject parent = VisualTreeHelper.GetParent(source);
    FrameworkElement parentElement = parent as FrameworkElement;
    if(null != parentElement) {
        object context = parentElement.DataContext;
    }
}
您应该在助手方法中考虑这一点:

public static FrameworkElement GetParentContext(FrameworkElement element) {
    object result = null;
    DependencyObject parent = VisualTreeHelper.GetParent(element);
    FrameworkElement parentElement = parent as FrameworkElement;
    if(null != parentElement) {
        result = parentElement.DataContext;
    }
    return result;        
}

请考虑XAML结构可能有所不同,如果可能的话,您可能需要沿着树向上走,直到找到一个

DataContext
元素,该元素不是
null

共享xaml结构。如果它解决了您的问题,请不要忘了将其标记为答案。是否可能获取代码返回的对象的Name属性?是的。您是否正在查找网格的名称,即父网格?((发件人为System.Windows.Controls.Primitives.ToggleButton)。父项为Grid)。名称
public static FrameworkElement GetParentContext(FrameworkElement element) {
    object result = null;
    DependencyObject parent = VisualTreeHelper.GetParent(element);
    FrameworkElement parentElement = parent as FrameworkElement;
    if(null != parentElement) {
        result = parentElement.DataContext;
    }
    return result;        
}