如何将 Tapped 事件传递给同一个 canvas 中的兄弟姐妹?

How to pass Tapped event to sibling in the same canvas?

我在 Canvas 中有两个控件,其中一个与另一个重叠(按 z 顺序)。 Tapped 前端控件接收到的事件将默认路由回父级 Canvas

但是,我想让前面的控件忽略这个事件,让后面的控件接收它。通过在 SO 中四处搜索,我发现我们无法 'simulate' 以任何方式点击后台控件,那么我该怎么做呢?

tl;dr 如何将事件路由到兄弟姐妹而不是返回父级?

使用IsHitTestVisible属性。例如,这是一个 XAML 片段:

<Canvas>
  <Rectangle Width="200" Height="200" 
             Canvas.Left="100" Canvas.Top="100" 
             Fill="Red" Tapped="Rectangle_Tapped"/>
  <Rectangle Width="200" Height="200" 
             Canvas.Left="200" Canvas.Top="200" 
             Fill="Blue" IsHitTestVisible="False" 
             Opacity="0.5"/>
</Canvas>

以及匹配码:

private void Rectangle_Tapped(object sender, TappedRoutedEventArgs e)
{
  new MessageDialog("Ouch!").ShowAsync();
}

现在,如果您点击屏幕的红色部分或屏幕的紫色部分,您将看到该对话框。