2015-02-10 126 views
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; } 
     } 
    } 
} 

回答

0

尝试从Clipboard访问数据是这样的:

object data = Clipboard.GetData("AcquisitionParameters"); 
if (data != null) return (AcquisitionParameters)data; 
return new AcquisitionParameters(); 

UPDATE >>>

如果没有帮助,那么请尝试将数据是这样的:

DataObject dataObject = new DataObject(); 
dataObject.SetData("AcquisitionParameters", (AcquisitionParameters)e.Item, false); 
Clipboard.SetDataObject(dataObject); 
+0

正如我所说的,剪贴板中不包含我的自定义格式的任何数据,在DataFormats唯一标准格式...这个代码是不是真的不同我的悲伤。 – GuillaumeA 2015-02-10 17:09:07

+0

*这段代码与我的悲伤不同*不是?我的井工程。 – Sheridan 2015-02-10 17:20:48

+0

毫无疑问,它在你的条件下工作,我建议在某些条件下工作:在将数据复制到剪贴板后,但当我尝试使用Ctrl + V恢复数据时失败... – GuillaumeA 2015-02-10 18:37:51