C# 外部ListView.ItemClick事件发生在内部网格之前。点击但不点击内部按钮。点击

C# 外部ListView.ItemClick事件发生在内部网格之前。点击但不点击内部按钮。点击,c#,xaml,windows-runtime,windows-store-apps,windows-phone-8.1,C#,Xaml,Windows Runtime,Windows Store Apps,Windows Phone 8.1,给定以下XAML: <ListView IsItemClickEnabled="True" ItemClick="ListView_ItemClick"> <ListView.ItemTemplate> <DataTemplate> <Button Tapped="Button_Tapped" /> </DataTemplate> </ListView.Ite

给定以下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>

然后我点击一个网格,
ListView\u ItemClick
将首先执行,然后点击
grid\u
。为什么会这样?如何让事件以正确的顺序触发,如第一个示例中的按钮?

按钮处理指针事件以触发其自己的单击事件,因此ListView从不让它们触发其事件

在几乎所有情况下,我都建议使用一个按钮并处理点击,而不是处理点击。这对于可访问性更好,因为按钮内置了对键盘焦点和单击语义的支持。与实现自己的焦点处理和InvokePattern相比,为按钮设置模板以适应您的UI要容易得多

<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>