在WPF应用程序中,我在Grid中有一堆CustomControls。为了处理鼠标点击它们我使用Grid的MouseLeftButtonDown
事件,并在事件处理程序中检查单击了哪个CustomControl:
private void Grid_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
FrameworkElement feSourceComm = e.Source as FrameworkElement;
MyCustomControl SCurrentComm = new MyCustomControl();
try
{
SCurrentComm = (MyCustomControl)feSourceComm;
}
catch (Exception)
{
...
当我将所有CustomControl放置在UserControl中然后放入Grid中时出现问题。在这种情况下,方法不起作用。
我通过e.Source.GetType().ToString();
检查了每种情况下的点击来源类型,并得到以下结果:
当没有问题时(如果我将CustomControls放在没有UserControl的网格中)
MyProjectNamespace.MyCustomControl
当我将CustomControls放入UserControl然后放入网格
时MyProjectNamespace.UserControls.MyUserControlName
当我将CustomControls放入UserControl然后放入网格并通过XamlReader.Load
System.Windows.Controls.UserControl
所以,我的问题:
如何将CustomControls作为e.Source
在UserControl内部时显示?
答案 0 :(得分:2)
e.OriginalSource
会告诉您点击发生的具体元素。如果那不是您的自定义控件,请向上走OriginalSource
的父链,直到找到您的自定义控件