Silverlight:如何防止将MouseMove事件从子画布路由到其父画布

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

我有我的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" 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一样。