gpt4 book ai didi

c# - 从 DataGrid 单元格复制文本

转载 作者:太空狗 更新时间:2023-10-29 23:46:40 26 4
gpt4 key购买 nike

我希望能够从 DataGrid 单元格复制文本。

  1. 第一个可能的解决方案是将 SelectionUnit 设置为 Cell 但这对我来说不是一个选项,因为我需要选择 FullRow
  2. 第二种可能的方法是在 DataGridTemplateColumn 中包含只读 TextBox。但是样式有问题。我之前的问题:DatagridCell style overriden by TextBox style。我需要行中文本的颜色非常亮,但所选行中的文本颜色非常暗。
  3. 第三种是在DataGrid上设置IsReadOnly="False",并为DataGridTextColumn提供EditingElementStyle

    <Style x:Key="EditingStyle" TargetType="{x:Type TextBox}">
    <Setter Property="IsReadOnly" Value="True"/>
    </Style>
    ...
    <DataGridTextColumn ... EditingElementStyle="{DynamicResource EditingStyle}"/>

    但是这里来了一个非常可怕的bug WPF Datagrid Text Column allows one character text enter when the internal text box is set to read only.

你知道一些不同的解决方案吗?或解决方法?谢谢。

编辑

我注意到 Extended WPF ToolkitDataGrid 没有这个bug,但它似乎有不同的结构,我无法应用我的 DataGrid 样式。

我注意到使用 ReadOnly TextBox 作为 DataGridColumn 的 EditingElementStyle 会带来更多问题。当您使用 OneWay 绑定(bind)时,无法让单元格进入Editing 状态。让用户覆盖例如 DataGrid 中显示的某些实体的 ID 是 Not Acceptable 。所以它必须以某种方式是只读的或至少是 OneWay 绑定(bind)。

目前我对此完全没有解决方案。在选择并突出显示该行时,是否还有其他方法可以让用户从单元格中复制?我是否没有注意到其他解决方案?谢谢阅读。

最佳答案

您可以做一些肮脏的事情来获取当前单元格。在你的 xaml 中只需添加

<DataGrid GotFocus="DataGrid_GotFocus" KeyDown="DataGrid_KeyDown">

在代码隐藏中

private void DataGrid_GotFocus(object sender, RoutedEventArgs e)
{
if(e.OriginalSource is DataGridCell)
_currentCell = (DataGridCell) e.OriginalSource;
}

private void DataGrid_KeyDown(object sender, KeyEventArgs e)
{
if(e.Key == Key.C && (e.SystemKey == Key.LeftCtrl || e.SystemKey == Key.RightCtrl))
{
//Transform content here, like
Clipboard.SetText(_currentCell.Content);
}
}

应该这样做,因为每次数据网格本身的选择更改时都会执行 GotFocus

关于c# - 从 DataGrid 单元格复制文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15295968/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com