gpt4 book ai didi

c# - 如何从 CustomControl 内部找到 CustomControl 的父级

转载 作者:行者123 更新时间:2023-11-30 15:53:58 27 4
gpt4 key购买 nike

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

这个类放在一个ScrollViewer .

没有传递对 ScrollViewer 的具体引用进入Canvas , 我想找到 ScrollViewer其中包含 Canvas来自 Canvas本身。

Parent扩展 Canvas 的类的属性是null ,以及每次使用 VisualTreeHelper 的尝试只返回 null

我试图使用 VisualTreeHelper.GetParent(this) 找到视觉祖先,但是父属性为空。

作为 ExtendedCanvas将在多个实例中使用,我希望它能够解析其包含 ScrollViewer无需特别引用 ScrollViewer在代码隐藏或 XAML 中。

我意识到我可以在 ExtendedCanvas 中添加一个依赖属性并在 XAML 中创建绑定(bind),但是我希望该组件只需将其放入容器中即可工作。

同样,我不反对放置 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;
}

关于c# - 如何从 CustomControl 内部找到 CustomControl 的父级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51560794/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com