在WPF应用程序中,我在网格中有很多量身定制。为了处理鼠标点击它们,我使用 MouseLeftButtonDown 网格的事件和事件处理程序,我检查了哪些contrycontrol被单击:

private void Grid_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        FrameworkElement feSourceComm = e.Source as FrameworkElement;
        MyCustomControl SCurrentComm = new MyCustomControl();            
        try
        {
            SCurrentComm = (MyCustomControl)feSourceComm;
        }
        catch (Exception)
        {
...

当我将所有定制控制放在UserControl中,然后在网格中放置时,出现了问题。在这种情况下,方法无效。
我检查了每种情况下的点击源类型 e.Source.GetType().ToString(); 并获得以下结果:

当没有问题时(如果我在没有USERCONTROL的情况下将定制控制放在网格中)

MyProjectNamespace.MyCustomControl

当我将定制控制放入USERCONTROL,然后将其放在网格中

MyProjectNamespace.UserControls.MyUserControlName

当我将定制控制放入USERCONTROL,然后将其放在网格中,然后通过外部文件加载USERCONTROL XamlReader.Load

System.Windows.Controls.UserControl

所以,我的问题:
如何使惯例可归功于 e.Source 当它们在Usercontrol内部时?

有帮助吗?

解决方案

e.OriginalSource 会告诉您点击发生的哪个特定元素。如果不是您的惯例,请沿着父母的链条走 OriginalSource 直到找到您的惯例

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top