WPF:使用CommandManager.RegisterClassCommandBinding和RegisterClassInputBinding方法

來源:互聯網
上載者:User

這兩個方法可以在自訂控制項中建立內建WPF命令,比如WPF中TextBox內建複製,剪下,粘貼命令。其中RegisterClassInputBinding將一個命令和輸入筆勢(Input Gesture)聯絡在一起。這樣響應輸入筆勢發生後,命令邏輯會運行。而RegisterClassCommandBinding則將命令和具體命令執行邏輯和命令判斷邏輯聯絡起來。這樣一個命令就有具體邏輯執行代碼了。

 

下面自訂一個控制項,繼承與Button類型,使得按鈕中的文字支援剪下和粘貼。在自訂類型的靜態建構函式中用RegisterClassCommandBinding把剪下和粘貼的命令(對應ApplicationCommands類型的Cut和Paste屬性)執行實現。用RegisterClassInputBinding則定義命令執行的快速鍵。

代碼:

class MyButton : Button

{

    static MyButton()

    {

        //使用CommandManager.RegisterClassCommandBinding和RegisterClassInputBinding方法

        //註冊我們需要的剪下和粘貼命令。

        CommandManager.RegisterClassCommandBinding(typeof(MyButton),

            new CommandBinding(ApplicationCommands.Cut, OnCutCommand));

        CommandManager.RegisterClassInputBinding(typeof(MyButton),

            new InputBinding(ApplicationCommands.Cut, new KeyGesture(Key.X, ModifierKeys.Control)));

 

        CommandManager.RegisterClassCommandBinding(typeof(MyButton),

            new CommandBinding(ApplicationCommands.Paste, OnPasteCommand));

        CommandManager.RegisterClassInputBinding(typeof(MyButton),

            new InputBinding(ApplicationCommands.Paste, new KeyGesture(Key.V, ModifierKeys.Control)));

    }

    public MyButton()

    {

        Focusable = true;

        Loaded += (ss, ee) => this.Focus();

    }

    //控制項內命令執行

    protected virtual void OnCut()

    {

        Clipboard.SetText(Content.ToString());

        Content = null;

    }

    protected virtual void OnPaste()

    {

        Content = Clipboard.GetText();

    }

    //CommandBinding命令綁定事件方法

    private static void OnCutCommand(object sender, ExecutedRoutedEventArgs e)

    {

        var control = sender as MyButton;

        if (control != null)

        {

            control.OnCut();

        }

    }

    private static void OnPasteCommand(object sender, ExecutedRoutedEventArgs e)

    {

        var control = sender as MyButton;

        if (control != null)

        {

            control.OnPaste();

        }

    }

}

 

然後在介面上,可以直接用Ctrl+X和Ctrl+V對按鈕內容進行剪下粘貼(當然前提是按鈕得有焦點),也可以用其他控制項(ICommandSource執行者)來觸發針對自訂按鈕的命令(通過設定ICommandSource.CommandTarget)。

 

XAML:

<StackPanel>

    <loc:MyButton x:Name="mybtn" Height="50">Mgen!</loc:MyButton>

    <Button Command="Cut" CommandTarget="{Binding ElementName=mybtn}">剪下</Button>

    <Button Command="Paste" CommandTarget="{Binding ElementName=mybtn}">粘貼</Button>

</StackPanel>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.