【问题标题】:How to get the DataContext of VisualParent?如何获取 VisualParent 的 DataContext?
【发布时间】:2017-01-23 13:43:35
【问题描述】:

我有一个ToggleButton 具有这种结构:

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 结构。
  • 如果它解决了您的问题,请不要忘记将其标记为答案。

标签: c# togglebutton


【解决方案1】:
((sender as System.Windows.Controls.Primitives.ToggleButton).Parent as Grid).DataContext

您可以使用不同的控件来代替网格。所以根据你的 xaml 结构替换它。

【讨论】:

  • 是否可以获取代码返回的对象的 Name 属性?
  • 是的。您在寻找 Grid 的名称,即 parent 吗? ((发送者为 System.Windows.Controls.Primitives.ToggleButton)。父为网格)。名称
【解决方案2】:

更新:

你真的需要它吗?查看您的 XAML,您没有在 ToggleButton 中设置 DataContext,因此您应该从设置其值的任何父级继承其值。

请参阅:DataContext

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

不管怎样,如果你需要的话……

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

话虽如此,您可以使用VisualTreeHelper 类(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 的元素。 p>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-06
    • 2010-09-21
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多