C# 在DataTemplate中单击项目时禁用ListView的ItemClick(WP 8.1)
我有ListViewC# 在DataTemplate中单击项目时禁用ListView的ItemClick(WP 8.1),c#,windows,xaml,winrt-xaml,windows-phone-8.1,C#,Windows,Xaml,Winrt Xaml,Windows Phone 8.1,我有ListView <ListView x:Name="lstBWDetails" Grid.Row="2" Width="{Binding ActualWidth,ElementName=MainGrid}" ItemTemplate="{StaticResource ItemFavoriteWord}" ItemClick="lstBWDetails_ItemClick" IsItemClickEnabled="True" Tapped="lstBWDetai
<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_点击->ListView项目时,首先点击被激活,然后点击第二个imgFav_点击被激活
所以当我点击imgFav_时,我想禁用ListView项目点击
对不起,我的英语不好是的,来过这里!我相信,如果您将列表设置为启用itemclick,您将始终获得作为一个整体的单击,并绑定到列表项的上下文,并且它将始终优先于您希望对模板中的项执行的任何其他操作 您可以尝试在模板中的单个控件内处理单击事件,但这可能不是您想要的 我通常解决这个问题的方法是禁用itemclick,而是处理点击事件,通过OriginalSource将任何对象强制转换为FrameworkElement,这样我就可以提取datacontext并尝试对实际点击的项目做出适当的反应 像这样的
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
}
这不是一个完全直接的解决方案,但我希望这有助于你更接近你所寻找的 你试过互动触发器吗?这篇文章可能会帮助你->