簡體   English   中英

在內部Grid.Tapped之前發生外部ListView.ItemClick事件,但在內部Button.Tapped之前發生

[英]Outer ListView.ItemClick event happening before inner Grid.Tapped but not inner Button.Tapped

鑒於以下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執行Button_Tapped處理程序,然后根本不會執行ListView_ItemClick (無論Button_Tapped處理程序中e.Handled是否設置為true)。 如果我沒有單擊按鈕,而是在列表視圖項中單擊,則將執行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 ,然后執行Grid_Tapped 為什么會這樣呢? 如何像第一個示例中一樣,以正確的順序觸發事件?

該按鈕處理指針事件以觸發其自己的Click事件,因此ListView永遠不會使它們觸發其事件。

在幾乎所有情況下,我建議您使用Button並處理Click而不是處理Tapped。 由於Button具有對鍵盤焦點和單擊語義的內置支持,因此這對可訪問性更好。 模板化Button以適合您的UI比實現您自己的焦點處理和InvokePattern要容易得多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM