2010-12-02 62 views
4

在我的WPF項目中,我有一些複雜的控制。在這個項目中,除了MainWindow之外,我只使用Controls(它們都是模板化的)。按類型(!)(wpf)找不到模板控件的父項

在一個屏幕上我有以下佈局(用於顯示的佈局已經被應用之後,模板和內容填寫):

MyScreenControl
-MyTableControl
--ItemsControl
--- HeaderItemsControl
- ---- HeaderItemsControl.Header
------ MyHeaderControl
----- HeaderItemsControl.Items
------ MyItemControl
------ MyItemC ONTROL
------ MyItemControl
...

當我在ScreenControl的代碼文件是,在OnMouseLeftButtonDown在方法我想,以確定是否click事件從MyHeaderControl或MyItemControl來到。

MouseButtonEventArgs的源代碼是ScreenControl,而OriginalSource是MyItemControl/MyHeaderControl的模板中的TextBlock。

我第一次找到MyItemControl/MyHeaderControl的嘗試是從OriginalSource開始並遞歸查看Parent屬性的類型。它工作正常,直到我到達模板的根目錄(在本例中爲ViewBox),但根目錄沒有父元素。

我已經在我早期的az項目中使用了這樣的方法,它工作,但後來我使用UserControls,而不是控件,也沒有模板。

任何想法我應該如何解決這個問題(一個好主意和代碼一樣好)?

THX, Tenshiko

+0

有時它可以幫助尋找父母,直到孩子已經被加載。例如,您可以使用yourChild.Loaded事件 – peter70 2017-05-11 07:36:08

回答

2

退房VisualTreeHelper.GetParent,這將讓你走可視化樹在控件實際上已經通過模板實例化。

+0

它也是這樣。根據GetParent(),我的控件看起來像: – Tenshiko 2010-12-02 16:01:38

+0

grid-grid-textblock而不是control-grid-grid-textblock – Tenshiko 2010-12-02 16:02:16