我希望能够从DataGrid Cell复制文本。
SelectionUnit
设置为Cell
,但这不是我的选择,因为我需要选择FullRow
DataGridTemplateColumn
包含只读TextBox
。但是样式存在问题。我之前的问题:DatagridCell style overriden by TextBox style。我需要非常明亮的颜色用于行中的文本,但在所选行中确实很暗。第三是在DataGrid上设置IsReadOnly =“False”并为EditingElementStyle
提供DataGridTextColumn
<Style x:Key="EditingStyle" TargetType="{x:Type TextBox}">
<Setter Property="IsReadOnly" Value="True"/>
</Style>
...
<DataGridTextColumn ... EditingElementStyle="{DynamicResource EditingStyle}"/>
但是这里出现了一个非常可怕的错误WPF Datagrid Text Column allows one character text enter when the internal text box is set to read only.
你知道一些不同的解决方案吗?或解决方法?谢谢。
修改
我注意到来自Extended WPF Toolkit的DataGrid
没有此错误,但似乎它有不同的结构,我无法应用我的DataGrid样式。
我注意到使用ReadOnly TextBox作为DataGridColumn的EditingElementStyle会带来更多问题。当您使用 OneWay 绑定时,无法将单元格设置为编辑状态。让用户覆盖DataGrid中显示的某个实体的 ID 是不可接受的。所以它必须以某种方式只读或至少 OneWay 绑定。
此刻我完全无法解决这个问题。在选择并突出显示行时,是否有其他方法让用户从单元格复制?我没有注意到其他一些解决方案吗?谢谢阅读。
答案 0 :(得分:1)
你可以做一些脏事来获得当前的细胞。在您的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
就会被执行。