DataGrid未选中的行显示为已选中

时间:2014-12-01 18:14:57

标签: c# wpf datagrid styles selection

我有一个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");
        }
    }

还有一件事 - 这只发生在一些计算机上,而在其他计算机中它的行为与预期一致,并且颜色设置回默认值。

谢谢, 达纳。

1 个答案:

答案 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>