禁用 WPF DataGrid 中的选择功能

58

我该如何禁用 WPF Toolkit 的 DataGrid 中的选择功能? 我尝试修改适用于 ListView 的解决方案(来自 WPF ListView turn off selection),但那并不起作用:

<tk:DataGrid>
    <tk:DataGrid.ItemContainerStyle>
        <Style TargetType="{x:Type tk:DataGridRow}">
            <Setter Property="Focusable" Value="false"/>
        </Style>
    </tk:DataGrid.ItemContainerStyle>
    <tk:DataGrid.CellStyle>
        <Style TargetType="{x:Type tk:DataGridCell}">
            <Setter Property="Focusable" Value="false"/>
        </Style>
    </tk:DataGrid.CellStyle>
</tk:DataGrid>
13个回答

0
<DataGrid isEnabled="False">
</DataGrid>

这是直接回答你的问题最简单的方法:在 WPF Datagrid 中禁用选择。


在Stack Overflow上不鼓励只给出代码的答案,因为它们没有解释它如何解决问题。另外,请编辑您的答案来解释它是如何运作和改进这个问题已经有的许多其他得到投票支持的答案,以便其他有类似问题的用户可以受益。 - FluffyKitten
我认为删除问题中仅有的两个清晰、简洁且正确的答案之一并不是一个好主意。你不需要触及代码后台,也不需要样式,也不需要提到备选颜色。你所需要的只是一个放置得当的属性。 - Piano Telope
如果这就是你认为这是一个好答案的原因,那么请将这些信息添加到你的答案中!用户可能不知道即使其他答案更全面,这个答案是否有效,所以你需要告诉他们它是如何工作的,以及为什么他们不需要其他的。这就是为什么只有代码的答案是不被鼓励的,正如我所解释的...如果用户不理解你的答案将如何或为什么工作(特别是当有很多其他赞同的答案时),那么对他们来说并没有太大的帮助,甚至更糟糕的是-他们甚至可能认为它是错误的。 - FluffyKitten
1
这不是 Stack Overflow 的工作方式。它的目的是充当编程问题的“百科全书”,而这个答案由社区标记为缺乏细节的低质量答案。 - FluffyKitten
1
这将使整个数据网格变灰,很可能不是人们想要的。 - Jonathan
显示剩余3条评论

0

根据这个帖子中的一些答案,我得出了解决方案。

<DataGrid.RowStyle>
    <Style TargetType="DataGridRow">
        <Setter Property="IsHitTestVisible" Value="False"/>
    </Style>
</DataGrid.RowStyle>

这个方法不会使数据网格变灰,也不会使行、单元格或表头变灰。它允许滚动,并且不需要编写代码。


-11

针对这个问题有一个小技巧。 你可以处理DataGrid(比如说dgGrid)的SelectionChanged事件,在处理程序中写入以下代码:

dgGrid.UnselectAll();

这将取消选择所有已选行,并显示“未选择任何行”的结果。


12
不行的:这个可以使用:https://dev59.com/jXA75IYBdhLWcg3w49YR - Mikhail Poda
1
+1 这是正确的 :) ... 无论如何,在我的情况下,我的工作正常 :) - viky
1
Nikhil的版本完美地为我工作。我可以直接在DataGrid中编辑单元格,整行保持未选中状态。谢谢Nikhil。 - Norman Skinner
你应该避免在代码后台/视图模型中与视图逻辑进行交互。 - JoshuaTheMiller

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接