簡體   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