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 选中指定内容的行

在 DataGrid WPF 中获取选定的行项

easyui datagrid checkbox 选中自动选中它所在的行,怎么做,默认你选中行则自动选中checkbox,可是你选

Datagrid 列标题应根据 DataGridView 列的所有 CheckBox 是选中还是未选中来检查/取消选中 CheckBox 的状态

如何在 if 语句中显示/比较 mysql 行的动态值?