首页 > 解决方案 > Listview 的选定项目与项目的选定状态不同步,除非在选择后释放我的鼠标指针

问题描述

我有一个包含几个项目的列表视图。每当我选择我的列表视图项时,它对应的选定状态都会滞后,直到我的键盘或鼠标指针被释放。应该做什么才能在我单击项目时立即反映项目的选择,而不管键/鼠标指针是否被释放。我尝试使用带有项目的基本列表视图,这似乎是一种默认行为......只是想知道这是否可以被覆盖

附在相同的示例图像下方,其中粉红色表示已选择的项目,灰色表示将要选择的项目,而我的鼠标/键仍未释放,给人的印象是尚未选择它落后。无论我的鼠标/键释放如何,如何确保灰色选择自动变为粉红色。

在此处输入图像描述

<ListView x:Name="TestingList" 
                              ItemsSource="{x:Bind TestListing.Details}"                               
                              SelectedItem="{x:Bind TestListing.DefaultSelected,Mode=TwoWay}"    
                              SelectionChanged="TestList_SelectionChanged"                              
                               SelectionMode="Single">
                        <ListView.ItemContainerTransitions>
                            <TransitionCollection/>
                        </ListView.ItemContainerTransitions>
                        <ListView.ItemTemplate>
                            <DataTemplate x:DataType="test:TestingName">
                                <TextBlock Margin="42,5,0,0" Style="{StaticResource TextStyle}"  
                                           Text="{x:Bind Name}" TextWrapping="Wrap"/>
                            </DataTemplate>
                        </ListView.ItemTemplate>
                    </ListView>

有什么想法吗?

在此处输入图像描述

标签: c#listviewuwp

解决方案


每当我选择我的列表视图项时,它对应的选定状态都会滞后,直到我的键盘或鼠标指针被释放。

我终于明白你的问题了。您描述的行为是默认行为。请按照我的步骤了解基本原理。

单击“Visual Studio 中的文档大纲”-> 右键单击​​您的 ListView 控件-> 编辑其他模板-> 编辑生成的项目容器(ItemContainerStyle)-> 编辑副本

您将获得 ListViewItem 的样式。ListViewItemPresenter在 ControlTemplate 中找到。你会看到PressedBackground="{ThemeResource ListViewItemBackgroundPressed}"SelectedBackground="{ThemeResource ListViewItemBackgroundSelected}"。如果您将其更改PressedBackground为“ThemeResource ListViewItemBackgroundSelected”,它将是您想要的。

<Style x:Key="ListViewItemRevealStyle" TargetType="ListViewItem">
......
<Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="ListViewItem">
                    <ListViewItemPresenter x:Name="Root"  CheckBrush="{ThemeResource ListViewItemCheckBrush}" ContentMargin="{TemplateBinding Padding}" CheckBoxBrush="{ThemeResource ListViewItemCheckBoxBrush}" ContentTransitions="{TemplateBinding ContentTransitions}" CheckMode="{ThemeResource ListViewItemCheckMode}" DragOpacity="{ThemeResource ListViewItemDragThemeOpacity}" DisabledOpacity="{ThemeResource ListViewItemDisabledThemeOpacity}" DragBackground="{ThemeResource ListViewItemDragBackground}" DragForeground="{ThemeResource ListViewItemDragForeground}" FocusBorderBrush="{ThemeResource ListViewItemFocusBorderBrush}" FocusVisualMargin="{TemplateBinding FocusVisualMargin}" FocusSecondaryBorderBrush="{ThemeResource ListViewItemFocusSecondaryBorderBrush}" HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" Control.IsTemplateFocusTarget="True" 
                                           PressedBackground="{ThemeResource ListViewItemBackgroundPressed}" PlaceholderBackground="{ThemeResource ListViewItemPlaceholderBackground}" PointerOverForeground="{ThemeResource ListViewItemForegroundPointerOver}" PointerOverBackground="{ThemeResource ListViewItemBackgroundPointerOver}" RevealBorderThickness="{ThemeResource ListViewItemRevealBorderThemeThickness}" ReorderHintOffset="{ThemeResource ListViewItemReorderHintThemeOffset}" RevealBorderBrush="{ThemeResource ListViewItemRevealBorderBrush}" RevealBackground="{ThemeResource ListViewItemRevealBackground}" SelectedForeground="{ThemeResource ListViewItemForegroundSelected}" SelectionCheckMarkVisualEnabled="{ThemeResource ListViewItemSelectionCheckMarkVisualEnabled}" 
                                           SelectedBackground="{ThemeResource ListViewItemBackgroundSelected}" SelectedPressedBackground="{ThemeResource ListViewItemBackgroundSelectedPressed}" SelectedPointerOverBackground="{ThemeResource ListViewItemBackgroundSelectedPointerOver}" VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}">

推荐阅读