C# 从WPF DataGrid将文本框中的整个选定行数据复制到剪贴板

C# 从WPF DataGrid将文本框中的整个选定行数据复制到剪贴板,c#,wpf,xaml,datagrid,clipboard,C#,Wpf,Xaml,Datagrid,Clipboard,我使用WPF数据网格,并在所有单元格模板中放置了一个文本框。这意味着我的整行由所有绑定了数据的文本框组成。现在,当我从数据网格中选择任意一行并按ctrl+c时,我想将整行数据复制到剪贴板 <DataGridTemplateColumn Header="Text" > <DataGridTemplateColumn.CellTemplate> <DataTemplate> <TextBox Text="{Binding

我使用WPF数据网格,并在所有单元格模板中放置了一个文本框。这意味着我的整行由所有绑定了数据的文本框组成。现在,当我从数据网格中选择任意一行并按ctrl+c时,我想将整行数据复制到剪贴板

<DataGridTemplateColumn Header="Text" >
<DataGridTemplateColumn.CellTemplate>
      <DataTemplate>
             <TextBox Text="{Binding Path=SAMPLETEXT}" />
       </DataTemplate>
</DataGridTemplateColumn.CellTemplate>
请向我推荐更好的方法。 谢谢你的阅读

更新 在DataGridTemplateColumn中添加下面的代码行对我很有用

ClipboardContentBinding="{Binding SampleText}"

您必须按语法将值设置为使用剪贴板类:


从所选行提取数据,将其合并为字符串变量并将该变量分配到剪贴板。

我知道这是一篇较旧的文章,但此解决方案是为了完整性而发布的,并且缺少与DataGridRowClipboardEventArgs关联的合适DataGrid事件方法签名的使用

Clipboard.SetText可能是片状的,而不是一直抓取/设置剪贴板

在名为myDataGrid的dataGrid的SelectionUnit模式下设置FullRow

<DataGrid x:Name="myDataGrid" SelectionUnit="FullRow"></DataGrid>

}

您是否尝试过跟踪代码以查找if语句中的值?是的,我选择的行值即将出现,但不会复制到剪贴板
Clipboard.SetText("your data");
<DataGrid x:Name="myDataGrid" SelectionUnit="FullRow"></DataGrid>
public int clipboardcalledcnt { get; set; } //CopyingRowClipboardContent invoked count
private void myDataGrid_CopyingRowClipboardContent(object sender, DataGridRowClipboardEventArgs e)
{
    PathInfo cellpath = new PathInfo(); //a custom class to hold path info
    string path = string.Empty;

DataGrid dgdataPaths = (DataGrid)sender;
int rowcnt = dgdataPaths.SelectedItems.Count;

cellpath = (PathInfo)e.Item;

path = "Row #"+ clipboardcalledcnt +" Len="+ cellpath.Length.ToString() + ", path=" + cellpath.Path;

e.ClipboardRowContent.Clear();

if (clipboardcalledcnt == 0) //add header to clipboard paste
    e.ClipboardRowContent.Add(new DataGridClipboardCellContent("", null, "--- Clipboard Paste ---\t\t\n")); // \t cell divider, repeat (number of cells - 1)

clipboardcalledcnt++;
e.ClipboardRowContent.Add(new DataGridClipboardCellContent(path, null, path));

if (clipboardcalledcnt == rowcnt)
    clipboardcalledcnt = 0;