- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 WPF Datagrid,并且正在尝试增强/更改复制和粘贴机制。
当用户选择某些单元格然后按 CTRL + C 时,底层控件能够捕获 CopyingRowClipboardContent 事件。
this.mainDataGrid.CopyingRowClipboardContent
+= this.DatagridOnCopyingRowClipboardContent;
在此方法中,一些单元格会添加到标题和行中,从而产生“更宽”的网格。
private void DatagridOnCopyingRowClipboardContent(
object sender,
DataGridRowClipboardEventArgs dataGridRowClipboardEventArgs)
{
// this is fired every time a row is copied
var allContent = dataGridRowClipboardEventArgs.ClipboardRowContent;
allContent.Insert(0, new DataGridClipboardCellContent(
null,
this.mainDataGrid.Columns[0],
"new cell"));
}
此时我陷入困境,因为我试图在标题之前添加一行,并在最后一行之后添加一行(见下图)。
有什么想法吗?有建议吗?
请注意,我对此处的 MVVM 方式不感兴趣。
最佳答案
这是一个可能对您有帮助的代码片段。此代码段主要用于检索所有选定的数据,包括标题(我删除了 RowHeaders
部分,因为您显然不需要它)。如果您有任何疑问,请告诉我。我留下了一些用大写字母写的注释:这是您应该添加自己的数据的地方这种方法的优点在于它可以直接与 DataGrid
的 ItemsSource
配合使用,而不是与 DataGridCell
配合使用。主要原因是:例如,如果您在格式化数字上使用 DataGridCell
,您将不会获得实际值,而只会获得格式化值(假设您的源是 14.49,而您的 StringFormat
是 N0,如果使用“常规”方式,则只需复制 14)
/// <summary>
/// Handles DataGrid copying with headers
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void OnCopyingDataGrid(object sender, ExecutedRoutedEventArgs e)
{
// First step: getting the coordinates list of all cells selected
IList<Tuple<int, int>> cellsCoordinatesList = new List<Tuple<int, int>>();
HashSet<int> rowList = new HashSet<int>();
HashSet<int> columnList = new HashSet<int>();
foreach (System.Windows.Controls.DataGridCellInfo cell in this.SelectedCells)
{
int column = cell.Column.DisplayIndex;
int row = this.Items.IndexOf(cell.Item);
cellsCoordinatesList.Add(new Tuple<int, int>(row, column));
if (!rowList.Contains(row))
{
rowList.Add(row);
}
if (!columnList.Contains(column))
{
columnList.Add(column);
}
}
// Second step: Create the table to copy/paste
object[,] arrayToBeCopied = new object[rowList.Count, columnList.Count + 1];
IList<string> colHead = this.ColumnHeaders.Cast<object>().Select(h => h.ToString()).ToList();
for (int row = 0; row < arrayToBeCopied.GetLength(0); row++)
{
for (int column = 0; column < arrayToBeCopied.GetLength(1); column++)
{
if (row == 0)
{
arrayToBeCopied[row, column] = colHead[columnList.ElementAt(column - 1)];
}
else
{
arrayToBeCopied[row, column] = // WHATEVER YOU WANT TO PUT IN THE CLIPBOARD SHOULD BE HERE. THIS SHOULD GET SOME PROPERTY IN YOUR ITEMSSOURCE
}
}
}
// Third step: Converting it into a string
StringBuilder sb = new StringBuilder();
// HERE, ADD YOUR FIRST ROW BEFORE STARTING TO PARSE THE COPIED DATA
for (int row = 0; row < arrayToBeCopied.GetLength(0); row++)
{
for (int column = 0; column < arrayToBeCopied.GetLength(1); column++)
{
sb.Append(arrayToBeCopied[row, column]);
if (column < arrayToBeCopied.GetLength(1) - 1)
{
sb.Append("\t");
}
}
sb.Append("\r\n");
}
// AND HERE, ADD YOUR LAST ROWS BEFORE SETTING THE DATA TO CLIPBOARD
DataObject data = new DataObject();
data.SetData(DataFormats.Text, sb.ToString());
Clipboard.SetDataObject(data);
}
关于WPF 数据网格 : copy additional rows to clipboard,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13178363/
我尝试使用 Clipboard 类粘贴一些复制的对象。 Public Class DogsZoo Public Property Dogs As List(Of Dog) Pub
每当我按下 Ctrl-Shift-C 时,我已经尝试了多种方法强制 xterm(版本 285 和 292)将选择复制到 CLIPBOARD 剪贴板。到目前为止,最有前途的方法是在 ~/.Xresour
我路过一篇关于 Microsoft 的 Clipboard.SetText() 方法的文章: Clipboard.SetText Method (String) 而且我意识到如果字符串为空 (""),
在我的项目中有一个用例:用户单击一个按钮,然后将一些数据复制到剪贴板以进行下一步。 复制的数据与单击的按钮相关,并存储在组件状态中。 我做了一些搜索,并找到了如下潜在的解决方案: function c
我正在使用我的应用程序在我的应用程序中添加“复制到剪贴板”功能。 我使用以下命令: methods: { copyToClipboard () { if (process.env.
我想将 Keith Hill 的 Get-Clipboard 和 Set-Clipboard 的 C# 实现转换为纯 PowerShell 作为 .PSM1 文件。 有没有办法像他在使用剪贴板时在 C
是否有任何工具可以在 Windows 中拥有更强大的剪贴板类型功能? 我正在使用 vs.net 2008(如果它内置了但我不知道?) 我曾经有这个工具,我在剪贴板中创建了许多可以使用快捷方式访问的项目
我正在通过 MSTSC 从笔记本电脑访问桌面。在 RDC session 中,我选择了允许访问打印机和剪贴板本地资源的选项。 我可以从本地笔记本电脑复制并粘贴到我的远程桌面,但无法从远程复制并粘贴到本
我马上就承认,至少可以说,我缺乏 Pascal 经验。因此,我能得到的任何帮助将不胜感激。 :) 作为较大程序的一部分,我需要将字符串变量写入剪贴板。我在 Lazarus(版本 1.0.12)中创建了
使用Windows的Linux子系统(LSW),可以使用clip.exe将数据复制到Windows剪贴板: $ clip.exe /? CLIP Description: Redirects
当用户单击 elm 0.18 中的按钮时,有没有办法将文本从 div 复制到剪贴板? 我看过Clipboard.elm但我不能让它在 elm 0.18 中编译和工作。那么在 elm 0.18 中是否有
有没有办法通过剪贴板将透明图像粘贴到 photoshop? 我尝试使用已注册的“PNG”格式,但似乎 photoshop 不支持它(与 MSOffice 2007 和 GIMP 相反)。使用 CF_D
我从 Vim 外部复制文本。 ⌘V 在其他应用程序中粘贴文本没有问题。在 MacVim 中,它不起作用。 在插入模式下,什么都不显示。在普通模式下,我得到 E353: Nothing in regis
我使用的是 Visio Professional 2003。它运行良好。但是现在当我复制和粘贴任何形状时,它会显示错误“打开剪贴板失败”。之后,我无法更改任何属性或名称。 当我尝试关闭窗口时,它显示警
我正在建立一个UWP定位: 最低版本:14393 目标版本:18362 我的Windows版本是:10.0.19041内部版本19041 我有下面的代码: using Windows.Applicat
我正在用 C# 制作图像查看器。该功能是在 C# 上使用 Clipboard 类的复制和粘贴功能。 并且我成功获取了 BitmapSource 的图像。但它无法检查图像格式(jpeg、png、bmp)
我想在双击标签时复制 Label: self.text 的内容,但以下内容不起作用: 主文件 #!/usr/bin/kivy # -*- coding: utf-8 -*- from kivy.app
我正在使用 CLPB_IMPORT 功能模块将剪贴板获取到内部表。没关系。我正在复制两列 Excel 数据。所以它用分隔符'#'填充表格,比如; 4448#3000 4449#4000 4441#50
我无法复制到 +或 *登记。 :echo has('clipboard')从 Vim 内部返回 0这意味着我没有那个功能标志,我不想重新编译。 我正在运行 Wayland 所以我不能使用 X11 ba
示例:%y+拖到外部+剪贴板。现在,我希望将诸如^\S\+之类的正则表达式的结果发送到外部+ clipboard。如何? 试用1. [失败] :g@^\S\+@y+ 试用2。[失败] :^\S\+y+
我是一名优秀的程序员,十分优秀!