0

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

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

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

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

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

4

2 回答 2

1

如果“OriginalSource”与您想要的控件相同,请检查您的控件处理程序。

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

于 2014-12-04T10:58:01.913 回答
0

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

        void MyLabel_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            MyLabel dc = (MyLabel)sender;
            if (dc.Parent.GetType() != typeof(RadDiagramShape))
            {///....drop it}
}
于 2014-12-09T08:30:54.177 回答