[英]How to find the Parent of a CustomControl from inside the CustomControl
我有一个在WPF中扩展Canvas
的类。
此类放在ScrollViewer
。
而没有经过具体参考ScrollViewer
到Canvas
,我想找到ScrollViewer
其中包含Canvas
从内Canvas
本身。
扩展Canvas
的类的Parent
属性为null
,并且每次使用VisualTreeHelper
尝试也都返回null
。
我试图使用VisualTreeHelper.GetParent(this)
找到可视祖先,但是parent属性为null。
由于ExtendedCanvas
将在多个实例中使用,我希望它能够解析其包含的ScrollViewer
而无需在后面的代码或XAML中专门引用ScrollViewer
。
我意识到我可以在ExtendedCanvas
添加一个依赖项属性并在XAML
创建一个绑定,但是我希望该组件只需将其放入容器即可。
类似地,我不反对将ScrollViewer
放到某种面板上,然后将ExtendedCanvas
放在其中,以便我的组件使用该面板作为其最下面的包含元素。
令我困惑的是,据我了解, VisualTreeHelper
将导航正在运行的应用程序的整个可视树。 似乎我的假设完全错误,或者它只能从指定的组件向下导航。
没有上述方法,这可能实现吗?
示例代码:
cs -
public class ExtendedCanvas:Canvas {
//I wish to automatically populate this scroll viewer
//reference to the instance of the scrollviwer which contains
//this ExtendedCanvas instance
private ScrollViewer _containingScrollViewer = null;
}
xaml -
<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" >
<local:ExtendedCanvas x:Name="extendedCanvas" />
</ScrollViewer>
你可以找到它的父母:
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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.