1

在 WPF 应用程序中,我在 Grid 中有一堆 CustomControls。为了处理鼠标单击它们,我使用了MouseLeftButtonDownGrid 的事件,并在事件处理程序中检查单击了哪个 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)
        {
...

当我将所有 CustomControls 放在 UserControl 中,然后放在 Grid 中时,问题就出现了。在这种情况下,方法不起作用。
我检查了每种情况下的点击源类型,e.Source.GetType().ToString();并得到以下结果:

当没有问题时(如果我将CustomControls放在没有UserControl的Grid中)

MyProjectNamespace.MyCustomControl

当我将 CustomControls 放入 UserControl 然后放入 Grid

MyProjectNamespace.UserControls.MyUserControlName

当我将 CustomControls 放入 UserControl 然后放入 Grid 并通过XamlReader.Load

System.Windows.Controls.UserControl

所以,我的问题是:
如何使 CustomControls 像e.Source在 UserControl 中一样可见?

4

1 回答 1

2

e.OriginalSource将告诉您点击发生在哪个特定元素上。如果那不是您的自定义控件,请沿着父链向上走,OriginalSource直到找到您的自定义控件

于 2011-01-25T18:26:56.957 回答