我有一个基于带有触发器的样式的 WPF 数据网格:
<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");
}
}
还有一件事 - 这只发生在一些计算机中,而在另一些计算机中,它的行为符合预期,颜色被设置回默认值。
谢谢丹娜。
我已经找到了解决方案,我添加了一个相反的触发器 当 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>