【问题标题】:parent object mouse events not fired when mouse is over the inner object in silverlight当鼠标悬停在 Silverlight 中的内部对象上时,未触发父对象鼠标事件
【发布时间】:2013-03-27 17:24:33
【问题描述】:

我的 XAML 中有一个矩形,它充当文本框的容器(文本框显示在矩形上),我可以通过拖动来移动矩形(使用矩形对象的 mousedown 和 mousemove 事件),但是有一个问题文本框,因为它覆盖了我的矩形的很大一部分,因此当用户单击鼠标(并尝试移动它)时,他们很有可能实际单击文本框,因此矩形鼠标事件不会触发并且没有任何作用! (即无法移动)。我该如何克服这个问题? (我使用 SL 5 和 VS 2012)

【问题讨论】:

  • 您是通过在画布上排列文本框和矩形还是其他方式来做到这一点?
  • 为您的矩形尝试 AddHandler 方法:msdn.microsoft.com/en-us/library/ms598899(v=vs.95).aspx usehandledEventsToo = true
  • 我想我已经遇到了类似的问题。女巫事件你在听吗?我认为“预览”事件可以满足您的需求。
  • 预览活动是什么意思?我使用 mousemove、leftbuttondown 和 leftbuttonup
  • 我以为预览事件只能在 WPF 中使用

标签: silverlight


【解决方案1】:

TextBox 控件处理鼠标按下事件并阻止它们在可视树上冒泡。 (如果您使用的是画布,但冒泡事件无济于事)

您可以通过代码将自己的事件处理程序添加到鼠标事件中,例如

txtbox.AddHandler(TextBox.MouseLeftButtonDownEvent, 
                  new MouseButtonEventHandler(<your handler>), true);

您的处理程序在哪里签名:

  private void <your handler>(object sender, MouseButtonEventArgs e)
        {

        }

如果您的具体情况需要更多信息,请告诉我。

【讨论】:

  • 我使用画布,所有东西都在我的画布上,所以这里出了什么问题?
  • 如果文本框和矩形是画布的子级,则使用此处理程序来画布。
  • Silverlight 使用事件冒泡,这是首先将事件提供给可视树中的“孩子”并冒泡的地方。 kirupa.com/net/event_bubbling_tunneling.htm 有一个很好的解释。使用我假设您拥有的画布,您的文本框将不是矩形的视觉子级。但是,这不是问题。文本框处理鼠标事件,这意味着该事件无论如何都不会在视觉树上进一步冒泡。正如我上面所概述的那样,将处理程序添加到文本框将让您在不影响文本框现有行为的情况下接收事件
猜你喜欢
  • 2015-09-10
  • 2017-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-26
  • 1970-01-01
  • 1970-01-01
  • 2011-08-22
相关资源
最近更新 更多