DataGrid 未选中的行显示为选中
Posted
技术标签:
【中文标题】DataGrid 未选中的行显示为选中【英文标题】:DataGrid Unselected row appear as selected 【发布时间】:2015-01-29 19:48:29 【问题描述】:我有一个基于触发器样式的 WPF DataGrid:
<Style TargetType="DataGridCell" x:Key="DataGridCellStyle">
<Style.Triggers>
<Trigger Property="IsSelected"
Value="True">
<Setter Property="Background" Value="Blue" />
<Setter Property="BorderBrush" Value="Blue" />
</Trigger>
</Style.Triggers>
</Style>
问题的简短描述:在一种情况下,更改选择后,未选择的预览行仍标记为蓝色并显示为选中状态。
更详细: 当我选择行 X 时,行 X 用蓝色着色。 当我选择不同的行时,X 行的颜色会变回默认值。
除了一种情况: 1. 我站在 X 行,它被选中。 2. 我用 Y 行(来自代码)交换它的位置。 3. 交换后 X 行现在仍处于选中状态。 4. 我要去不同的行,新行被选中,第X行不再被选中但它的背景仍然是蓝色的。
我不确定它是否可以添加任何额外信息,但我正在添加交换代码的相关部分: *_commands 绑定到 dataGrid 的 ItemsSource
Command tmp = _commands[indx1];
_commands[indx1] = _commands[indx2];
_commands[indx2] = tmp;
Commands[indx + 1].IsSelected = true;
Commands[indx].IsSelected = false;
private ObservableCollection<CustomCommand> _commands = new ObservableCollection<CustomCommand>();
public ObservableCollection<CustomCommand> Commands
get
return _commands;
set
_commands = value;
NotifyPropertyChanged("Commands");
还有一件事 - 这只发生在某些计算机中,而在其他计算机中,它的行为与预期相同,并且颜色被设置回默认值。
谢谢, 达纳。
【问题讨论】:
【参考方案1】:我找到了解决方案,我添加了一个相反的触发器 When IsSelected=false:
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="Blue" />
<Setter Property="BorderBrush" Value="Blue" />
</Trigger>
<Trigger Property="IsSelected" Value="False">
<Setter Property="Background" Value="Transparent" />
<Setter Property="BorderBrush" Value="Transparent" />
</Trigger>
【讨论】:
以上是关于DataGrid 未选中的行显示为选中的主要内容,如果未能解决你的问题,请参考以下文章
datagrid 选中某行,翻页再翻回来,发现选中的行没有选中
jQuery easyUI easyui-datagrid 选中指定内容的行
easyui datagrid checkbox 选中自动选中它所在的行,怎么做,默认你选中行则自动选中checkbox,可是你选
Datagrid 列标题应根据 DataGridView 列的所有 CheckBox 是选中还是未选中来检查/取消选中 CheckBox 的状态