我有一个 designer ,VisualStudio WinForms designer到底是怎样的。
我在那里拖放控件(FrameworkElements) (从带有控件的ToolBox中)。控件存储在Grid Panel中。
实际上,我将为(S)实现复制/粘贴功能。

我将选定的控件放到Clipboard中
private readonly DataObject _dataObject = new DataObject();复制方法工作正常,它将元素存储在剪贴板中。
private void CopyUIElementToClipboard(FrameworkElement element) {
_dataObject.SetData(element);
Clipboard.SetDataObject(_dataObject);
}但在粘贴上,我遇到了问题。我无法从剪贴板中检索元素。
public void PasteUIElement() {
var control = _dataObject.GetData(DataFormats.***); //What type should i give it here ?
//I tried all formats from DataFormats via this. But all returns NULL.
TryAll();
//Continue doing other stuff
}//尝试DataFormats中的所有格式,但都返回NULL
private void TryAll() {
var qBitmap = _dataObject.GetData(DataFormats.Bitmap);
var qCommaSeparatedValue = _dataObject.GetData(DataFormats.CommaSeparatedValue);
var qDib = _dataObject.GetData(DataFormats.Dib);
var qEnhancedMetafile = _dataObject.GetData(DataFormats.EnhancedMetafile);
var qFileDrop = _dataObject.GetData(DataFormats.FileDrop);
var qHtml = _dataObject.GetData(DataFormats.Html);
var qLocale = _dataObject.GetData(DataFormats.Locale);
var qMetafilePicture = _dataObject.GetData(DataFormats.MetafilePicture);
var qOemText = _dataObject.GetData(DataFormats.OemText);
var qPalette = _dataObject.GetData(DataFormats.Palette);
var qPenData = _dataObject.GetData(DataFormats.PenData);
var qRiff = _dataObject.GetData(DataFormats.Riff);
var qRtf = _dataObject.GetData(DataFormats.Rtf);
var qSerializable = _dataObject.GetData(DataFormats.Serializable);
var qStringFormat = _dataObject.GetData(DataFormats.StringFormat);
var qSymbolicLink = _dataObject.GetData(DataFormats.SymbolicLink);
var qText = _dataObject.GetData(DataFormats.Text);
var qTiff = _dataObject.GetData(DataFormats.Tiff);
var qUnicodeText = _dataObject.GetData(DataFormats.UnicodeText);
var qWaveAudio = _dataObject.GetData(DataFormats.WaveAudio);
var qXaml = _dataObject.GetData(DataFormats.Xaml);
var qXamlPackage = _dataObject.GetData(DataFormats.XamlPackage);
}如何从FrameworkElement中检索Clipboard元素?
我试图只将元素的名称存储到剪贴板上,并将其粘贴到记事本中。一切都很顺利。
private void CopyUIElementToClipboard(FrameworkElement element) {
var elementName = element.Name;
_dataObject.SetData(DataFormats.Text, elementName, true);
Clipboard.Clear();
Clipboard.SetDataObject(_dataObject);
}但是在我的项目中,如何使用粘贴来完成任务,我遇到了一些小麻烦。
也许我应该用Clipboard以另一种格式存储它(Serializable,或其他什么)
任何建议都将受到欢迎。
发布于 2013-07-05 12:58:43
通过使用XamlWriter
var xaml = XamlWriter.Save(element);我可以在剪贴板上:
var xaml = XamlWriter.Save(firstElementOnly);
_dataObject.SetText(xaml);
Clipboard.SetDataObject(_dataObject);之后,我将以这样的方式从Clipboard检索:
var xamlElement= _dataObject.GetData(DataFormats.Text).ToString();并使用
var xamlString = new StringReader(xamlElement);
var xmlTextReader = new XmlTextReader(xamlString);
var uiElement= (UIElement)XamlReader.Load(xmlTextReader);我要把它转换成UIElement。
这样,您就可以将UIElements存储在Clipboard中。
https://stackoverflow.com/questions/17486201
复制相似问题