如何将 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();
}
现在,如果您点击屏幕的红色部分或屏幕的紫色部分,您将看到该对话框。
我在 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();
}
现在,如果您点击屏幕的红色部分或屏幕的紫色部分,您将看到该对话框。