我有一个 Designer ,VisualStudio
WinForms
设计师到底是怎样的。
我拖着&放下控件(FrameworkElements
)(来自带控件的工具箱)。
控件存储在Grid
Panel
。
实际上我将为UIElement
实施复制/粘贴功能。
我将Selected控件放到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);
}
但在我的项目中,如何使用粘贴完成工作,我有点麻烦。
也许我应该以{{1}}以其他格式(Clipboard
或其他格式)将其存储在<{p}}
欢迎任何建议。
答案 0 :(得分:3)
使用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
这样,您就可以将UIElement
存储在Clipboard
。