[英]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.