gpt4 book ai didi

c# - 单击 DataTemplate 中的项目时禁用 ListView 的 ItemClick (WP 8.1)

转载 作者:可可西里 更新时间:2023-11-01 09:37:46 24 4
gpt4 key购买 nike

我有 ListView

<ListView x:Name="lstBWDetails" Grid.Row="2" Width="{Binding ActualWidth,ElementName=MainGrid}"
ItemTemplate="{StaticResource ItemFavoriteWord}"
ItemClick="lstBWDetails_ItemClick" IsItemClickEnabled="True"
Tapped="lstBWDetails_Tapped" >
</ListView>

和数据模板

<DataTemplate x:Key="ItemFavoriteWord">
<Grid Width="400" Margin="10 0 5 2" Height="50" Background="#f0f0f1" >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="100" />
</Grid.ColumnDefinitions>
<StackPanel Margin="0 0 0 0" Orientation="Vertical" HorizontalAlignment="Left" Grid.Column="0" Tapped="StackPanel_Tapped">
<TextBlock HorizontalAlignment="Left" VerticalAlignment="Center" Text="{Binding en}" Tag="{Binding en}" TextWrapping="Wrap" FontSize="18" Foreground="#c8454d" Margin="15 0 0 0" />
<TextBlock HorizontalAlignment="Left" VerticalAlignment="Center" Text="{Binding local}" Tag="{Binding en}" TextWrapping="Wrap" FontSize="18" Foreground="#0577bb" Margin="15 0 0 0" />
</StackPanel>
<StackPanel Margin="0 0 10 0" Orientation="Horizontal" HorizontalAlignment="Right" Grid.Column="1" >
<Image Height="40" Name="imgFav" Width="50" Margin="0 0 10 0" Tapped="imgFav_Tapped" Source="{Binding favo}" Tag="{Binding id}" />
</StackPanel>
<Border Grid.ColumnSpan="2" Grid.Column="0" BorderBrush="#FFC9C9C9" BorderThickness="0,0,0,0.5" >
</Border>
</Grid>
</DataTemplate>

当我在 ListView 项目中单击时,单击 -> 确定但是当我点击 imgFav_tapped -> ListView 项目点击首先被激活,第二个 imgFav_Tapped 被激活

所以我想在点击 imgFav_Tapped 时禁用 ListView Item Click

抱歉我的英语不好

最佳答案

是的,来过这里!我相信,如果您设置一个列表以启用 itemclick,您将始终获得整体点击,绑定(bind)到列表项的上下文,并且它将始终优先于您想对模板内的项目执行的任何其他操作。

您可以尝试处理模板中各个控件内的点击事件,但这可能不是您想要的...

我通常解决这个问题的方法是禁用 itemclick 并改为处理 Tapped 事件,通过 OriginalSource 将任何对象转换到 FrameworkElement,这让我可以提取数据上下文并尝试对实际点击的项目做出适当的 react 。

像这样

    private void List_Tapped(object sender, TappedRoutedEventArgs e)
{
var source = e.OriginalSource as FrameworkElement;
if (source == null) return;

var item = source.DataContext as MyItemClass;
if (item == null) return;

// do stuff with your item
}

这不是一个完全直接的解决方案,但我希望这有助于您更接近您正在寻找的东西!

关于c# - 单击 DataTemplate 中的项目时禁用 ListView 的 ItemClick (WP 8.1),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25859565/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com