我有一个在WPF中扩展Canvas
的类。
该课程放在ScrollViewer
中。
我没有在ScrollViewer
中传递对Canvas
的特定引用,我想从ScrollViewer
本身中找到包含Canvas
的{{1}}
扩展Canvas
的类的Parent
属性为Canvas
,每次使用null
的尝试也会返回VisualTreeHelper
。
我尝试使用null
查找视觉祖先,但是parent属性为null。
由于VisualTreeHelper.GetParent(this)
将在多个实例中使用,我希望它能够解析其包含的ExtendedCanvas
,而无需在后面的代码或在XAML中。
我意识到我可以在ScrollViewer
中添加一个依赖属性,并在ScrollViewer
中创建一个绑定,但是我希望该组件可以通过简单地将其放入容器中来工作。
类似地,我不会反对将ExtendedCanvas
放在某种面板上,然后将XAML
放在其中,以使我的组件使用该面板作为其最低的包含元素。 / p>
让我感到困惑的是,据我了解,ScrollViewer
将在正在运行的应用程序的整个可视树中导航。似乎我的假设是完全错误的,或者只能从指定的组件向下导航。
如果没有上述方法,是否有可能实现?
示例代码:
cs-
ExtendedCanvas
xaml-
VisualTreeHelper
答案 0 :(得分:3)
您可以找到其父级,如下所示:
public ExtendedCanvas()
{
//it hasn't been added to its parent yet
Loaded += ExtendedCanvas_Loaded;
}
private void ExtendedCanvas_Loaded(object sender, RoutedEventArgs e)
{
//now it is added to its parent
_containingScrollViewer = Parent as ScrollViewer;
}