如何阻止根元素中的事件并让事件在容器(父)级别触发



我正在使用WPF。我的可视化树层次结构如下:RadDiagram> RadDiagramShape> MyControlRadDiagramShape的内容是mycontrol。

在myControl类中,我已经处理了(MouseLeftButtonDown(事件,我将拖放代码放在其中(我在另一个地方需要它(。所以,这是直接事件,而不是隧道或冒泡!

当我移动我的自定义控件时,它是RadDiagramShape的内容,在RadDiagram中,它不会移动(它试图被拖动(,因为MouseLeftButtonDown已经在MyControl中处理。它可以防止事件在可视化树中冒泡,从而防止任何父处理程序收到事件通知。

我尝试将 RadDiagramShape 和 RadDiagram 的事件处理为e.Handled = true; 但它什么也没做,因为它是 MouseLeftButtonDown 并且它在根元素内处理,所以它不会冒泡或隧道,我没有覆盖移动代码,我不想覆盖它。因为我以前尝试过,但它并没有给我与 WPF 中内置的相同的轻微移动。

如何在根元素中阻止 MouseLeftButtonDown 事件并让该事件在容器(父(级别触发?

请检查您的控件处理程序是否与"OriginalSource"是否是您想要的控件相同。

if ((e.OriginalSource is TextBox) && (e.OriginalSource as TextBox).Name == "TextBoxName")
            {
                //Do every thing you want            
            }

谢谢莱拉·卡里米。你给了我方向,条件本身不起作用。但是我放了另一个条件,它奏效了

        void MyLabel_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            MyLabel dc = (MyLabel)sender;
            if (dc.Parent.GetType() != typeof(RadDiagramShape))
            {///....drop it}
}

相关内容

  • 没有找到相关文章