0
我试图添加复制/粘贴功能到我的WPF应用程序。我有一个DataGrid,我可以选择整行。一行是AcquisitionParameters类型的对象。选择是好的,也可以复制到剪贴板。在复制到剪贴板后,我验证数据是否已经很好地序列化并且是这种情况。但是当我尝试从剪贴板中检索对象时,我无法以原始格式反序列化它,而是以CSV格式进行反序列化。从剪贴板序列化和反序列化(复制/粘贴)
private void dataGridAcquisitions_CopyingRowClipboardContent(object sender, DataGridRowClipboardEventArgs e)
{
System.Windows.Clipboard.Clear();
DataFormat format = System.Windows.DataFormats.GetDataFormat(typeof(AcquisitionParameters).FullName);
System.Windows.IDataObject dataObj = new System.Windows.DataObject();
dataObj.SetData(format.Name, (AcquisitionParameters)e.Item, false);
System.Windows.Clipboard.SetDataObject(dataObj, true);
bool ispresent = dataObj.GetDataPresent(format.Name); // ok
AcquisitionParameters parameters = dataObj.GetData(format.Name) as AcquisitionParameters; //ok
if(parameters != null && ispresent)
{
//enter here
}
}
private void dataGridAcquisitions_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
if (e.Key == Key.V && (Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control)
{
System.Windows.IDataObject dataObj = System.Windows.Clipboard.GetDataObject(); //type of AcquisitionParameters not available, only HTML, CSV, etc.
string format = typeof(AcquisitionParameters).FullName;
if(dataObj.GetDataPresent(format)) //false
{
AcquisitionParameters parameters = dataObj.GetData(format) as AcquisitionParameters;
if(parameters != null)
{
}
}
}
}
而且我AcquisitionParameters类的声明
namespace App
{
[Serializable]
public class AcquisitionParameters
{
private double pulse;
public double Pulse
{
get { return pulse; }
set { pulse = value; }
}
private double range;
public double Range
{
get { return range; }
set { range = value; }
}
private double offset;
public double Offset
{
get { return offset; }
set { offset = value; }
}
}
}
正如我所说的,剪贴板中不包含我的自定义格式的任何数据,在DataFormats唯一标准格式...这个代码是不是真的不同我的悲伤。 – GuillaumeA 2015-02-10 17:09:07
*这段代码与我的悲伤不同*不是?我的井工程。 – Sheridan 2015-02-10 17:20:48
毫无疑问,它在你的条件下工作,我建议在某些条件下工作:在将数据复制到剪贴板后,但当我尝试使用Ctrl + V恢复数据时失败... – GuillaumeA 2015-02-10 18:37:51