簡體   English   中英

WPF在用戶控件上剪切,復制,粘貼功能

[英]WPF cut, copy, paste functionality on a user control

我有一個畫布,可以在其中添加UserControls(由圖像和文本框組成)

我試圖在這些UserControl上實現剪切,復制,粘貼功能,因此上下文菜單將附加到處理圖像的UserControl上。 用戶在此處單擊鼠標右鍵,然后從上下文菜單中選擇復制,然后我將如何實施,以便他們可以將其粘貼到畫布上。

誰能指出我正確的方向...

這可以通過RoutedCommands完成。 完整的概述位於MSDN: 命令概述

簡短的版本是這樣的:當命令源 (即菜單項)想要執行命令時,將引發一個事件。 該事件由最近的命令綁定處理。 剪切/復制/粘貼命令已經包含在WPF中,並且某些元素(即文本框)已經包含了它們的命令綁定。

您可以定義一個菜單項,如下所示:

<MenuItem Header="Copy" Command="ApplicationCommands.Copy" />

並向用戶控件添加命令綁定,如下所示:

<UserControl.CommandBindings>
    <CommandBinding Command="ApplicationCommands.Copy"
                    Executed="Copy_Executed" />
</UserControl.CommandBindings>

並在后面的UserControl代碼中使用ExecutedRoutedEventHandler簽名定義Copy_Executed方法。

然后,當然要對畫布中的ApplicationCommands.Paste執行相同的操作。

是否要在自己的應用程序中處理數據還是使用剪貼板取決於您。 如果您正在使用圖像,則WPF具有一個Clipboard類,可以與BitmapSource對象一起使用(如果您具有Image元素,則其Source已經是BitmapSource )。

首先,一個設計良好的MVVM應用程序可以使用戶控件的復制/粘貼更加簡單,因為它將轉向將CLR對象序列化/反序列化到剪貼板。 WPF將在反序列化之后自行處理用戶控件的創建。

如果您的應用程序未實現MVVM。 您可以使用XamlWriter / XamlReader將用戶控件保存到XAML並自行重新創建它們。 一個例子:

        StringBuilder outstr = new StringBuilder();

        //this code need for right XML fomating 
        XmlWriterSettings settings = new XmlWriterSettings();
        settings.Indent = true;
        settings.OmitXmlDeclaration = true;
        XamlDesignerSerializationManager dsm =
          new XamlDesignerSerializationManager(XmlWriter.Create(outstr, settings));
        //this string need for turning on expression saving mode 
        dsm.XamlWriterMode = XamlWriterMode.Expression;
        XamlWriter.Save(control, dsm);

        //Read control from XAML
        var frameObject = XamlReader.Parse(outstr.ToString()) as UserControl;
        if (frameObject != null)
            stackPanel.Children.Add(frameObject);

有關如何將XAML字符串或序列化流放入剪貼板的部分,可以參考MSDN。

希望能有所幫助。

如果要綁定代碼中的命令(如@nmclean所述 ),則可以使用:

CommandBindings.Add(new CommandBinding(
    ApplicationCommands.Copy,
    (sender, args) => { /* logic here */ }));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM