从数据网格单元格复制文本
本文关键字:复制 文本 单元格 网格 数据 数据网 | 更新日期: 2023-09-27 18:02:52
我希望能够从DataGrid Cell复制文本。
- 第一个可能的解决方案是将
SelectionUnit
设置为Cell
,但这不是我的选择,因为我需要选择FullRow
- 第二种可能的方法是
DataGridTemplateColumn
中有只读TextBox
。但风格有个问题。我之前的问题:DatagridCell样式被文本框样式覆盖。我需要一行文字的颜色非常亮,但是选定行的颜色非常暗。 -
第三是在DataGrid上设置IsReadOnly="False",并为
DataGridTextColumn
提供EditingElementStyle
<Style x:Key="EditingStyle" TargetType="{x:Type TextBox}"> <Setter Property="IsReadOnly" Value="True"/> </Style> ... <DataGridTextColumn ... EditingElementStyle="{DynamicResource EditingStyle}"/>
但是这里有一个非常可怕的错误WPF Datagrid Text Column允许一个字符的文本输入当内部文本框被设置为只读
你知道有什么不同的解决方法吗?或解决方案?谢谢你。
编辑
我注意到DataGrid
从扩展WPF工具包没有这个错误,但它似乎有不同的结构,我将无法应用我的数据网格样式。
我注意到使用ReadOnly TextBox作为EditingElementStyle的DataGridColumn带来了进一步的问题。当您使用单向绑定时,则不可能使单元格进入编辑状态。让用户重写例如ID在DataGrid中显示的某些实体是不可接受的。所以它必须是只读的或者至少是单向的绑定
目前我根本没有解决这个问题的办法。是否有其他方法可以让用户从单元格中复制,而行被选中并突出显示?难道我没有注意到其他解决方案吗?谢谢你的阅读。
您可以做一些肮脏的事情来获得当前单元格。在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
。