鉴于以下XAML:
<ListView IsItemClickEnabled="True" ItemClick="ListView_ItemClick">
<ListView.ItemTemplate>
<DataTemplate>
<Button Tapped="Button_Tapped" />
</DataTemplate>
</ListView.ItemTemplate>
<x:String>hello</x:String>
<x:String>world</x:String>
</ListView>
如果单击某个按钮,则会执行Button_Tapped
处理程序,然后根本不执行ListView_ItemClick
(无论e.Handled
是否在{{1}中设置为true处理程序)。如果我没有单击按钮,但我在列表视图项中单击,则将执行Button_Tapped
。这种行为没问题。
但是如果替换网格的按钮是这样的:
ListView_ItemClick
然后点击网格,<ListView IsItemClickEnabled="True" ItemClick="ListView_ItemClick">
<ListView.ItemTemplate>
<DataTemplate>
<Grid Width="50" Height="50" Margin="10" Background="Red" IsTapEnabled="True" Tapped="Grid_Tapped" />
</DataTemplate>
</ListView.ItemTemplate>
<x:String>hello</x:String>
<x:String>world</x:String>
</ListView>
将首先执行,然后ListView_ItemClick
。为什么会这样?如何使用按钮以正确的顺序触发事件?如第一个示例中的按钮?
答案 0 :(得分:1)
该按钮处理指针事件以触发其自己的Click事件,因此ListView永远不会让它们触发其事件。
在几乎所有情况下,我建议使用按钮并处理Click而不是处理Tapped。这对于可访问性更好,因为Button内置了对键盘焦点和单击语义的支持。模板按钮适合您的UI要比实现自己的焦点处理和InvokePattern要容易得多。