Ten*_*iko 5 wpf templates parent wpf-controls onmouseclick
在我的WPF项目中,我有一点复杂的控制.在项目中我只使用Controls(它们都是模板化的),除了MainWindow.
在一个屏幕上,我有以下布局(用于显示模板应用和填充内容后的布局):
MyScreenControl
-MyTableControl
--ItemsControl
--- HeaderItemsControl
----- HeaderItemsControl.Header
------ MyHeaderControl
----- HeaderItemsControl.Items
------ MyItemControl
------ MyItemControl
--- --- MyItemControl
......
当我在ScreenControl的代码文件中时,在OnMouseLeftButtonDown方法中,我想确定click事件是来自MyHeaderControl还是MyItemControl.
MouseButtonEventArgs的Source是ScreenControl,OriginalSource是MyItemControl/MyHeaderControl模板中的TextBlock.
我第一次尝试找到MyItemControl/MyHeaderControl是从OriginalSource开始,并递归地查看Parent属性的类型.它工作正常,直到我到达模板的根(在这种情况下是一个ViewBox),但根没有父元素.
我在我早期的z项目中使用了这样的方法并且它有效,但后来我使用的是UserControls,而不是Controls,也没有模板.
任何想法我应该如何处理这个问题(一个好主意是作为代码的好结果)?
thx,Tenshiko
您是否尝试过简单地获取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) ....
Run Code Online (Sandbox Code Playgroud)
(参见:http://msdn.microsoft.com/en-gb/library/system.windows.frameworkelement.templatedparent.aspx)