如何处理不同元素的冒泡事件?

时间:2017-11-24 15:22:35

标签: c# xaml uwp

ListViewItem中有多个控件,在我将事件代理方法添加到Textblock后,它首先调用ListView.ItemClick事件,然后调用TextBlock.Tapped事件。

,有一项功能,即当用户点击Textblock时,只需调用Textblock.Tapped事件而不调用ListView.ItemClick事件,当用户点击控件不是TextBlock时,调用ListView.ItemClick事件

XAML:

<ListView ItemClick="ListView_ItemClick">
    <ListViewItem>
        <StackPanel>
            <Image/>
            <!-- other controls -->
            <TextBlock Tapped="TextBlock_Tapped"/>
        </StackPanel>
    </ListViewItem>
</ListView>

1 个答案:

答案 0 :(得分:2)

当指针进入ItemClick时禁用TextBlock事件,并在指针退出ItemClick事件时重新启用它

在XAML中

<ListView Name="MyListView" ItemClick="MyListView_ItemClick">
    <ListViewItem>
        <StackPanel>
            <Image/>
            <!-- other controls -->
            <TextBlock Tapped="TextBlock_Tapped"/>
        </StackPanel>
    </ListViewItem>
</ListView>

在Code背后

private void TextBlock_Tapped(object sender, TappedRoutedEventArgs e)
{

}

private void MyListView_ItemClick(object sender, ItemClickEventArgs e)
{

}

private void TextBlock_PointerEntered(object sender, PointerRoutedEventArgs e)
{
    MyListView.IsItemClickEnabled = false;
}

private void TextBlock_PointerExited(object sender, PointerRoutedEventArgs e)
{
    MyListView.IsItemClickEnabled = true;
}