繁体   English   中英

如何从CustomControl内部找到CustomControl的Parent

[英]How to find the Parent of a CustomControl from inside the CustomControl

我有一个在WPF中扩展Canvas的类。

此类放在ScrollViewer

而没有经过具体参考ScrollViewerCanvas ,我想找到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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM