Silverlight:如何防止将MouseMove事件从子画布路由到其父画布
我有我的XAML代码:Silverlight:如何防止将MouseMove事件从子画布路由到其父画布,silverlight,events,routing,mousemove,silverlightcontrols,Silverlight,Events,Routing,Mousemove,Silverlightcontrols,我有我的XAML代码: <Canvas x:Name="mainCanvas" Width="200" Height="150" Background="LightGray" MouseLeftButtonUp="mainCanvas_MouseLeftButtonUp" MouseMove="mainCanvas_MouseMove"> <Canvas x:Name="topCanvas" Width="200" Height="100
<Canvas x:Name="mainCanvas" Width="200" Height="150" Background="LightGray"
MouseLeftButtonUp="mainCanvas_MouseLeftButtonUp"
MouseMove="mainCanvas_MouseMove">
<Canvas x:Name="topCanvas" Width="200" Height="100" Background="LightBlue"
MouseLeftButtonUp="topCanvas_MouseLeftButtonUp"
MouseMove="topCanvas_MouseMove">
</Canvas>
</Canvas>
我的问题已经在评论中了
如何防止将MouseMove事件从topCanvas子画布路由到mainCanvas父画布
谢谢
Peter此功能称为事件冒泡。您可以使用以下代码停止它: jQuery: 事件。停止传播; 参考: 您也可以尝试以下代码: e、 停止传播//防止事件冒泡 e、 防止违约//如果可以取消,则取消该事件
Ref: http://stackoverflow.com/questions/1967537/how-to-stop-event-bubbling-with-jquery-live
谢谢,
Ravi Verma该功能称为事件冒泡。您可以使用以下代码停止它: jQuery: 事件。停止传播; 参考: 您也可以尝试以下代码: e、 停止传播//防止事件冒泡 e、 防止违约//如果可以取消,则取消该事件
Ref: http://stackoverflow.com/questions/1967537/how-to-stop-event-bubbling-with-jquery-live
谢谢,
Ravi Verma您可以尝试在mainCanvas的MouseMove事件中比较e.OriginalSource,如果它不是来自mainCanvas,则退出Sub
private void mainCanvas_MouseMove(object sender, MouseEventArgs e)
{
if (sender != e.OriginalSource)
return;
}
更详细地回答你的评论。根据事件MSDN链接
继承MouseMove的控件可以为事件提供处理
通过重写OnMouseMove,它充当所有实例的处理程序
方法与直接处理事件一样,不存在已处理事件
属性可用,因此OnMouseMove无法以这种方式实现
它抑制通过已处理事件的进一步处理
技术
这说明:
此事件为鼠标创建别名。MouseMove附加事件用于
这个班
这就把我们带到了国家之间的联系
可扩展应用程序标记语言XAML定义了一种语言
称为附加事件的事件的组件和类型。概念
附加事件使您能够为特定事件添加处理程序
指向任意元素,而不是实际
定义或继承事件。在这种情况下,对象
可能引发事件或目标处理实例
定义或以其他方式拥有事件
因此,在我看来,您唯一的选择是围绕它进行编码。您可以尝试在mainCanvas的MouseMove事件中比较e.OriginalSource,如果它不是来自mainCanvas,则退出Sub
private void mainCanvas_MouseMove(object sender, MouseEventArgs e)
{
if (sender != e.OriginalSource)
return;
}
更详细地回答你的评论。根据事件MSDN链接
继承MouseMove的控件可以为事件提供处理
通过重写OnMouseMove,它充当所有实例的处理程序
方法与直接处理事件一样,不存在已处理事件
属性可用,因此OnMouseMove无法以这种方式实现
它抑制通过已处理事件的进一步处理
技术
这说明:
此事件为鼠标创建别名。MouseMove附加事件用于
这个班
这就把我们带到了国家之间的联系
可扩展应用程序标记语言XAML定义了一种语言
称为附加事件的事件的组件和类型。概念
附加事件使您能够为特定事件添加处理程序
指向任意元素,而不是实际
定义或继承事件。在这种情况下,对象
可能引发事件或目标处理实例
定义或以其他方式拥有事件
因此,在我看来,您唯一的选择就是围绕它编码。尝试设置画布的IshittetVisible属性。相应地设置该属性后,鼠标事件将通过控件或被控件捕获
希望这就是您所需要的。尝试设置画布的IshitteVisible属性。相应地设置该属性后,鼠标事件将通过控件或被控件捕获
希望这就是您所需要的。嗨,拉维,谢谢您的回复。但我很困惑。我在Silverlight中讨论这个问题,您的代码似乎是JavaScript。你的意思是使用网页中的JavaScript来防止Silverlight中冒泡?JavaScript,尤其是jQuery,与Silverlight无关,这使得这个答案错误得难以置信。嗨,Ravi,谢谢你的回复。但我很困惑。我在Silverlight中讨论这个问题,您的代码似乎是JavaScript。你的意思是使用网页中的JavaScript来防止Silverlight中冒泡?JavaScript,尤其是jQuery,与Silverlight无关,这使得这个答案错得离谱。我不理解你的问题。如果不希望事件发生,请将其从xamlHmmm中删除。有时我需要它,有时我不需要它。上面的代码只是一个例子。你知道什么时候需要,什么时候不需要吗?我不明白你的问题。如果不希望事件发生,请将其从xamlHmmm中删除。有时我需要它,有时我不需要它。上面的代码只是一个例子。你知道什么时候需要它吗
它和什么时候你不在任何时候?谢谢你的回复。这不会阻止从顶部画布到主画布的路由。我需要的是与MouseButtonEventArgs中的e.Handled=true一样简单。@PeterLee它不会阻止路由,因为您没有处理此事件的选项。它所做的是阻止处理程序运行其代码,除非事件源自MainCanvas,MainCanvas有效地执行了相同的操作。感谢您的回复。这不会阻止从顶部画布到主画布的路由。我需要的是与MouseButtonEventArgs中的e.Handled=true一样简单。@PeterLee它不会阻止路由,因为您没有处理此事件的选项。它所做的是阻止处理程序运行其代码,除非事件源自MainCanvas,MainCanvas有效地执行了相同的操作。感谢您的回复。这不会阻止从顶部画布到主画布的路由。我需要的只是像e.Handled=true一样简单,就像在MouseButtonEventArgs中一样。谢谢你的回复。这不会阻止从顶部画布到主画布的路由。我需要的只是像e.Handled=true一样简单,就像MouseButtonEventArgs一样。