我有一个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中的颜色会更改为默认值。
除一例外: 我站在X排上,然后被选中。 我正在用行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");
}
}
还有一件事 - 这只发生在一些计算机上,而在其他计算机中它的行为与预期一致,并且颜色设置回默认值。
谢谢, 达纳。
答案 0 :(得分:0)
我找到了解决方案,当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>