【问题标题】:WPF datagrid - how to stop the cell being selected when a child control is selectedWPF datagrid - 如何在选择子控件时停止选择单元格
【发布时间】:2017-07-14 06:24:26
【问题描述】:

我对 WPF 还很陌生,所以请善待......

我将许多子控件放入 DataGrid 单元格中,但是当我选择(单击)其中一个子控件时,包含的单元格显示蓝色选择突出显示。有没有办法改变这个功能,让它只选择被点击的控件。

我希望我可以通过将选择颜色更改为透明或其他方式来解决这个问题,但是选择确实会更多地改变外观,如果用户然后点击 ArrowDown 键我希望选择从我认为是的控件中移动选择的不是 DataGrid 认为被选中的单元格。

理想情况下,我想管理 DataGrid 中的所有选择和导航。

在示例中,我将选择包含 Neil9232 的控件

【问题讨论】:

  • 如果情况变得更糟,您可以使用ItemsControl 而不是DataGrid 来执行此操作。不过,这里有一个关于 DataGrid 的想法:stackoverflow.com/a/2502523/424129

标签: c# wpf datagrid focus


【解决方案1】:

在您的 CellTemplate 中,将 Focusable 设置为 false。它将停止抢夺您的点击次数。例如,如果您当前没有样式集,这将是最低限度的:

 <DataGrid>
        <DataGrid.Resources>
            <Style x:Key="NotFocusable" TargetType="{x:Type DataGridCell}">
                <Setter Property="Focusable" Value="False"/>
            </Style>
        </DataGrid.Resources>
        <DataGrid.Columns>
            <DataGridTemplateColumn>
                <DataGridTemplateColumn.CellStyle>
                    <Style TargetType="{x:Type DataGridCell}" BasedOn="{StaticResource NotFocusable}"/>
                </DataGridTemplateColumn.CellStyle>                    
            </DataGridTemplateColumn>
        </DataGrid.Columns>
    </DataGrid>

【讨论】:

  • 太好了,这几乎扼杀了所有内置于鼠标和键盘交互中的数据网格。我将尝试使用我自己的处理程序重新构建该功能。我开始认为 dataGrid 并不完全是正确的控制,我需要基本的网格布局和行虚拟化,在我继续之前有什么建议吗?
  • 例如,您可以使用处理程序来关注双击单元格时的内部子控件。或者使用处理程序来处理选定项的更改并关注内部控件。或者您可以使用IEditableObject.BeginEdit,触发视图模型中的属性更改,然后绑定触发器以设置可聚焦。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-01
  • 2015-07-17
  • 2021-03-29
  • 1970-01-01
  • 2015-11-22
  • 2012-10-14
  • 2015-04-12
相关资源
最近更新 更多