我看到很多关于如何在DataGrid中为Selected行设置样式的示例,例如:
How can I set the color of a selected row in DataGrid
我可以禁用选定的行样式吗?我不想要覆盖选择行更改的每一件事 . 只是不希望任何明显的变化 . 要比创建模板更简单 .
要么..
禁用选择行,如果这更容易..但从浏览这个看似hacky的论坛
我看到很多关于如何在DataGrid中为Selected行设置样式的示例,例如:
How can I set the color of a selected row in DataGrid
我可以禁用选定的行样式吗?我不想要覆盖选择行更改的每一件事 . 只是不希望任何明显的变化 . 要比创建模板更简单 .
要么..
禁用选择行,如果这更容易..但从浏览这个看似hacky的论坛
6 回答
想出XAML摆脱选择风格..不理想,但足够接近..
这对我有用:
我找到了另一种适合我情况的方法 . 我为所有单元格设置了这种样式,因为我不希望用户选择任何单元格 .
我将首先回答第二个问题:要禁用行的选择,您可以更改DataGrid的RowStyle .
但是,这会更改文本样式,因为行本身现在已“禁用” . 它也没有否定用户仍然可以右键单击该行来选择它的事实 . 如果您真的想要禁用与datagrid行的任何类型的交互,您可以执行以下操作:
由于行仍处于启用状态,因此文本样式不会更改 .
现在,如果您只想更改所选行的样式但仅保留功能,则可以执行以下操作(这与@Dan Stevens的答案基本相同) . ControlTextBrushKey是系统用于为文本项着色的画笔 . 有关DynamicResource和StaticResource之间的解释,请查看this answer .
重要的是要注意,当选择行时,上述解决方案不会更改DataGridRowHeader的样式,如下所示(选择第一行) .
这相对简单:
这将禁用DataGrid上的所有选择 .
如果您不想完全禁用选择但只是隐藏它,则需要修改模板 .
对于像我这样拥有不同风格的单元格并且不想覆盖所有样式也不想为每种样式添加触发器的人来说,这是一个不错的选择:
HighlightBrushKey
是带有活动选择的突出显示边框,HighlightTextBrushKey
是带有活动选择的文本颜色在我的情况下,我希望非活动选择看起来未被选中:
InactiveSelectionHighlightBrushKey
是选择处于非活动状态时的边框,InactiveSelectionHighlightTextBrushKey
是选择处于非活动状态时的文本仅供参考:SystemColors是一个静态类,是System.Windows.Media命名空间的一部分 . 你可以检查它,无耻地覆盖你不喜欢的任何颜色!