ListView禁用右击选择样式

时间:2014-08-14 12:46:54

标签: c# xaml listview winrt-xaml windows-applications

我正在尝试在列表视图中禁用项目的右键单击功能。我尝试处理RightTapped事件并将e.handled值设置为true。这已覆盖列表视图的大部分区域,但是如果我右键单击列表视图项的边框,则仍会应用此选择样式。我希望用户仍然能够使用左键单击并应用列表选择的样式。这只是我要禁用的右键单击。

这是我到目前为止所尝试的内容:

<ListView
        ItemsSource="{Binding MyItems}"
        ItemClick="OnItemClicked"
        IsItemClickEnabled="True"
        SelectionMode="Multiple" 
        CanDragItems="True" 
        DragItemsStarting="OnDragItemsStarting"
        RightTapped="OnRightTapped"
        IsRightTapEnabled="False">
        <ListView.ItemContainerStyle>
            <Style TargetType="ListViewItem">
                <Setter Property="Margin" Value="-1,3,-1,0" />
                <Setter Property="IsRightTapEnabled" Value="False"></Setter>
            </Style>
        </ListView.ItemContainerStyle>
        <ListView.ItemTemplate>
            <DataTemplate>
                <Grid Background="Transparent" RightTapped="OnRightTapped" HorizontalAlignment="Left" Height="100" Width="300">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="100"></ColumnDefinition>
                        <ColumnDefinition Width="*"></ColumnDefinition>
                    </Grid.ColumnDefinitions>
                    <Image Grid.Column="0"  Source="{Binding ImagePath}" Width="55" Height="55" Margin="0,0,0,1"/>
                    <Image Margin="20,0,0,22" Grid.Column="0" VerticalAlignment="Bottom" HorizontalAlignment="Left" Width="20" Height="20" Source="smallImage.png"/>

                    <StackPanel VerticalAlignment="Center" Margin="30,0,0,0" Grid.Column="1">
                        <TextBlock VerticalAlignment="Center" Text="{Binding Name}" Foreground="{Binding IsOnline, Converter={StaticResource BooleanToColorConverter}}" Style="{StaticResource BaseTextBlockStyle}" FontSize="20" Height="60"/>
                    </StackPanel>
                </Grid>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

以下是RightTapped处理程序的代码:

    private void OnRightTapped(object sender, RightTappedRoutedEventArgs e)
    {
        e.Handled = true;
    }

编辑:当我在ListView中单击项目的边框时,OnRightTapped事件未被触发。什么可以吞下这个事件?

1 个答案:

答案 0 :(得分:0)

通过使用我ListView.ItemTemplate中的项目的背景颜色,我发现我的TextBlock没有覆盖整个行区域。通过将Column width设置为ListView的确切大小并在此RightTapped上设置Grid事件处理程序,我能够涵盖所有右键点击区域。我仍然不知道为什么RightTapped处理程序没有被ListView本身解雇,但这对我所需要的是一个足够的解决方案。