【问题标题】:How to pass Tapped event to sibling in the same canvas?如何将 Tapped 事件传递给同一画布中的兄弟姐妹?
【发布时间】:2015-04-12 22:05:00
【问题描述】:
Canvas 中有两个控件,其中一个与另一个重叠(按 z 顺序)。前端控件接收到的Tapped事件默认会路由回父Canvas。
但是,我希望前面的控件忽略该事件并让后面的控件接收它。通过在 SO 中搜索,我发现我们无法以任何方式“模拟”对后台控件的点击,那么我该怎么做呢?
tl;dr 如何将事件路由到同级而不是返回父级?
【问题讨论】:
标签:
c#
windows-runtime
microsoft-metro
winrt-xaml
windows-8.1
【解决方案1】:
使用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();
}
现在,如果您点击屏幕的红色部分或屏幕的紫色部分,您将看到对话框。