2

私にはデザイナーがいます。デザイナーとは正確にはどうVisualStudio WinFormsですか。

FrameworkElementsそこにコントロール ( )をドラッグ アンド ドロップします (コントロールのあるツールボックスから)。コントロールは に格納されますGrid Panel

実際には、 (s) のコピー/貼り付け機能を実装します。UIElementここに画像の説明を入力

選択したコントロールをClipboard

private readonly DataObject _dataObject = new DataObject();

Copyメソッドは問題なく動作し、要素をクリップボードに保存します。

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);
}

しかし、私のプロジェクト内では、 Pasteを使用して作業を行う方法について、少し困っています。

たぶん、別の形式で保存する必要がありClipboardます(Serializable、または他のもの)

どんな提案でも大歓迎です。

4

1 に答える 1