c# - 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>
有什么想法吗?
解决方案
每当我选择我的列表视图项时,它对应的选定状态都会滞后,直到我的键盘或鼠标指针被释放。
我终于明白你的问题了。您描述的行为是默认行为。请按照我的步骤了解基本原理。
单击“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}">
推荐阅读
- ecmascript-6 - 为什么输入参数有一个“对象等于另一个对象”传入
- java - Android Studio gradle 安装后不会立即生成错误 AAPT2
- php - 将数组元素作为函数参数内的变量输出
- xcode - 在位于 XCTestCase 的单独文件中的函数中捕获屏幕截图
- python - 回归预测上限为特定值
- typescript - 在项目的某些区域中,从 .ts 生成了不需要的 *.js 和 *.js.map 文件
- .net - 我可以使用 IEnlistmentNotification 将 Active Directory 操作置于事务下吗
- android - 处理滚动状态以在 Fragment 中隐藏 FAB
- javascript - HTML 按钮在 $compile 后显示为文本
- python - 在 Python 中:如何在 dict 更改后自动保存到文件?