我有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">
答案 0 :(得分:1)
((sender as System.Windows.Controls.Primitives.ToggleButton).Parent as Grid).DataContext
您可以使用不同的控件来代替网格。所以根据你的xaml结构替换它。
答案 1 :(得分:0)
更新:
你真的需要它吗?查看您的XAML,您没有在ToggleButton中设置DataContext,因此您应该从设置其值的父级继承其值。请参阅:DataContext。
此依赖项属性继承属性值。如果存在通过本地值或样式建立的DataContext没有其他值的子元素,则属性系统会将该值设置为最近的父元素的DataContext值,并指定此值。
无论如何,如果你需要它......
ORIGINAL: 任何假设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
的元素为止}。