我和WPF一起工作。我的视觉树层次结构如下: RadDiagram > RadDiagramShape > mycontrol RadDiagramShape的内容是我控制的。
在myControl类中,我处理了(MouseLeftButtonDown)事件,我将拖放代码放入其中(我需要它在另一个地方)。所以,这是直接事件,而不是隧道或冒泡!
当我移动自定义控件(这是RadDiagramShape的内容)时,在RadDiagram中,它不会移动(它试图被拖动),因为MouseLeftButtonDown是在MyControl中处理的。它防止事件在视觉树上冒泡,防止任何父处理程序被告知事件.。
我试图为RadDiagramShape和RadDiagram作为e.Handled = true;处理事件,但是它什么也没做,因为它是MouseLeftButtonDown,它在根元素中处理,所以它不会出现气泡或隧道,我也没有覆盖移动代码,我不想重写它。因为我以前试过,但它并没有让我像WPF那样稍微移动一下。
如何阻止根元素中的MouseLeftButtonDown事件并让事件在容器(父级)级别触发?
发布于 2014-12-04 10:58:01
如果'OriginalSource‘是您想要或不想要的相同的控件,请签入您的控件处理程序。
if ((e.OriginalSource is TextBox) && (e.OriginalSource as TextBox).Name == "TextBoxName")
{
//Do every thing you want
}
发布于 2014-12-09 08:30:54
谢谢莱拉·卡里米。你给了我方向,条件本身不起作用。但我提出了另一个条件,它起了作用
void MyLabel_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
MyLabel dc = (MyLabel)sender;
if (dc.Parent.GetType() != typeof(RadDiagramShape))
{///....drop it}
}https://stackoverflow.com/questions/27290185
复制相似问题