动态设置所有DataGrid的CopyingRowClipboardContent事件

时间:2019-02-21 08:47:27

标签: wpf vb.net visual-studio-2010

当我在DataGrid中按Ctrl + C时,我希望能够复制一个单元格而不是一行,并且发现可以使用事件CopyingRowClipboardContent和该处理程序来做到这一点:

Private Sub DataGrid_CopyingRowClipboardContent(ByVal sender As Object, ByVal e As DataGridRowClipboardEventArgs)
    Dim currentCell = e.ClipboardRowContent(dataGrid.CurrentCell.Column.DisplayIndex)
    e.ClipboardRowContent.Clear()
    e.ClipboardRowContent.Add(currentCell)
End Sub

我想将此行为全局分配给在运行时创建的任何DataGrid(而不是回到我的代码并将处理程序一个接一个地添加到所有DataGrid)。

我尝试将以下行添加到我的<Window.Resources>代码中:

<Style x:Key="DataGridCustomStyle" TargetType="{x:Type DataGrid}">
    <EventSetter Event="CopyingRowClipboardContent" Handler="Datagrid_CopyingRowClipboardContent" />
</Style>

但是我收到一条错误消息,说CopyingRowClipboardContent必须是RoutedEvent事件。

1 个答案:

答案 0 :(得分:0)

评论后,我再次阅读了您的问题,我认为我们找的不是相同的问题...

如果您只想选择一个单元格而不是整个行,那么我认为您可以选择

<Style x:Key="DataGridCustomStyle" TargetType="{x:Type DataGrid}">
    <!--Copy only selected content without header-->
    <Setter Property="ClipboardCopyMode" Value="ExcludeHeader" />
    <!--Able to select many cells-->
    <Setter Property="SelectionMode" Value="Extended" />
    <!--Able to select cells or entire row/column-->
    <Setter Property="SelectionUnit" Value="CellOrRowHeader" />
</Style>

因此,如果用户仅选择了一个单元格并按Ctrl + C,则只有所选单元格内容将粘贴到剪贴板。