Я пытаюсь добавить функцию копирования/вставки в приложение 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
* Этот код на самом деле не похож на мою печально * ... нет? Хорошо работает шахта. – Sheridan
Несомненно, что он работает в ваших условиях, версия, которую я предлагаю, работает при определенных условиях: сразу же после копирования данных в буфер обмена, но она терпит неудачу, когда я пытаюсь восстановить ее после Ctrl + V ... – GuillaumeA