如何获取VisualParent的DataContext?
How to get the DataContext of VisualParent?
我有一个 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">
((sender as System.Windows.Controls.Primitives.ToggleButton).Parent as Grid).DataContext
您可以使用不同的控件来代替网格。因此,请根据您的 xaml 结构替换它。
更新:
你真的需要吗?查看您的 XAML,您没有在 ToggleButton 中设置 DataContext,因此您应该从设置其值的父级继承其值。
参见:DataContext。
This dependency property inherits property values. If there are child elements without other values for DataContext established through local values or styles, then the property system will set the value to be the DataContext value of the nearest parent element with this value assigned.
总之,如果你需要的话...
原文:
任何假定您 XAML 中的给定结构的答案都是错误的。 您始终可以应用更改结构的模板。
话虽如此,您可以使用 VisualTreeHelper class(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 结构 可能不同 ,也许您需要沿着树向上走,直到找到具有 [=12] 的元素=] 那不是 null
.
我有一个 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">
((sender as System.Windows.Controls.Primitives.ToggleButton).Parent as Grid).DataContext
您可以使用不同的控件来代替网格。因此,请根据您的 xaml 结构替换它。
更新:
你真的需要吗?查看您的 XAML,您没有在 ToggleButton 中设置 DataContext,因此您应该从设置其值的父级继承其值。
参见:DataContext。
This dependency property inherits property values. If there are child elements without other values for DataContext established through local values or styles, then the property system will set the value to be the DataContext value of the nearest parent element with this value assigned.
总之,如果你需要的话...
原文: 任何假定您 XAML 中的给定结构的答案都是错误的。 您始终可以应用更改结构的模板。
话虽如此,您可以使用 VisualTreeHelper class(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 结构 可能不同 ,也许您需要沿着树向上走,直到找到具有 [=12] 的元素=] 那不是 null
.