在WPF DataGrid中禁用选择

12 浏览
0 Comments

在WPF DataGrid中禁用选择

如何禁用WPF Toolkit中的DataGrid的选择功能?

我尝试修改适用于ListView的解决方案(来自WPF ListView turn off selection),但这并不起作用:


    
        
    
    
        
    

0
0 Comments

在WPF DataGrid中禁用选择的原因是垂直滚动条对鼠标的响应以及禁用子控件的鼠标点击。为了解决这个问题,可以在DataGrid的定义中添加IsHitTestVisible="False"属性。这样可以防止垂直滚动条对鼠标的响应,并且禁用子控件的鼠标点击。如果将值绑定到一个实现了INotifyPropertyChanged接口的属性,那么可以选择性地选择可选择哪些行。这个解决方法非常有效。

0
0 Comments

问题出现的原因是希望在WPF DataGrid中完全禁用选择行的功能。解决方法是使用以下代码片段来实现:


    
        
    
    

与设置``相比,这种方法更受欢迎,因为前一种方法会导致行的样式发生变化,并且不会禁用右键单击时出现的上下文菜单。

最后需要注意的是,将`IsHitTestVisible`设置为`False`会禁用与行的所有交互,包括编辑。

但是,如果只想在选择时更改行的样式,请参考此答案。

这个答案真的救了我一命!

旧答案,但我想评论一下。我的解决方案是使用具有单独ViewModel的行。为了完全禁用DataGrid,您可以使用DataGrid.Style和TargetType = "DataGrid"。因为我需要控制何时允许选择项,所以我使用了Value = "{Binding SomeProperty}",然后该属性必须在DataContext上。如果属性位于主DataContext上时使用RowStyle设置,会导致绑定错误。

这样可以实现功能,但会阻止点击任何按钮。

重要的是要注意,将"IsHitTestVisible"设置为"False"会禁用与行的所有交互,包括编辑。这包括点击按钮。

0
0 Comments

问题出现的原因是样式中的设置将选择的背景和边框颜色设置为透明,从而禁用了选择功能。解决方法是将"{x:Null}"替换为"Transparent",并设置选择的前景为黑色。另外,可以使用<Setter Property="Foreground" Value="{Binding RelativeSource={RelativeSource Self}, Path=Foreground}"/>将前景设置为默认值,以保持原有的颜色。如果想要保留默认样式的其他设置,可以添加BasedOn="{StaticResource {x:Type DataGridCell}}"BasedOn="{StaticResource {x:Type DataGridRow}}",这样只会移除边框,而不会移除整个默认样式。对于其他控件变蓝的问题,可以进一步调整样式以符合需求。

0