在我的WPF项目中,我有一些复杂的控件。在项目中,除了MainWindow之外,我仅使用Controls(它们都是模板化的)。
在一个屏幕上,我具有以下布局(用于在应用模板并填充内容之后显示布局):
MyScreenControl
-MyTableControl
--ItemsControl
--- HeaderItemsControl
----- HeaderItemsControl.Header
------ MyHeaderControl
----- HeaderItemsControl.Items
------ MyItemControl
------ MyItemControl
------ MyItemControl
...
当我进入ScreenControl的代码文件时,在OnMouseLeftButtonDown方法中,我想确定click事件是否来自MyHeaderControl或MyItemControl。
在MyItemControl/MyHeaderControl模板中,MouseButtonEventArgs的Source是ScreenControl,OriginalSource是TextBlock。
我第一次尝试找到MyItemControl/MyHeaderControl是从OriginalSource开始,然后递归查看Parent属性的类型。直到我到达模板的根目录(在本例中为ViewBox)之前,它都可以正常工作,但该根目录没有Parent元素。
我曾在我的z早期项目中使用过类似的方法,并且该方法有效,但是后来我使用的是UserControls,而不是Controls或Templates。
有什么主意我应该如何解决这个问题(好主意和代码一样好)?
谢谢,
天四子
最佳答案
您是否尝试过简单地获取originalSource的templatedParent? :
Control originalSource = e.OriginalSource;
MyItemControl myItemControl = originalSource.TemplatedParent as MyItemControl;
MyHeaderControl myHeaderControl = originalSource.TemplatedParent as MyHeaderControl;
if (MyItemControl != null) ....
else if (MyHeaderControl != null) ....
(请参阅:http://msdn.microsoft.com/en-gb/library/system.windows.frameworkelement.templatedparent.aspx)
关于wpf - 找不到按类型(!)(wpf)的模板控件的父级,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4336801/