我正在使用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}
}