web-dev-qa-db-ja.com

WPFテキストボックスを切り取り、コピー、貼り付けを制限する

WPFテキストボックスの切り取り、コピー、貼り付けを制限するにはどうすればよいですか?

26
Sauron

切り取り、コピー、貼り付けは、あらゆるアプリケーションで使用される一般的なコマンドです。

<TextBox CommandManager.PreviewExecuted="textBox_PreviewExecuted"
         ContextMenu="{x:Null}" />

上記のテキストボックスコードでは、CommandManagerクラスのPrviewExecutedイベントでこれらのコマンドを制限できます。

そして後ろのコードで以下のコードを追加すればあなたの仕事は終わりです

private void textBox_PreviewExecuted(object sender, ExecutedRoutedEventArgs e)
{
     if (e.Command == ApplicationCommands.Copy ||
         e.Command == ApplicationCommands.Cut  || 
         e.Command == ApplicationCommands.Paste)
     {
          e.Handled = true;
     }
}

CommandName == "Paste"の比較が失敗するため、commandNameメソッドは日本語OSを搭載したシステムでは機能しません。私は次のアプローチを試しましたが、うまくいきました。また、コンテキストメニューを手動で無効にする必要はありません。

XaMLファイルの場合:

<PasswordBox.CommandBindings>
    <CommandBinding Command="ApplicationCommands.Paste"
    CanExecute="CommandBinding_CanExecutePaste"></CommandBinding>
</PasswordBox.CommandBindings>

背後にあるコード:

private void CommandBinding_CanExecutePaste(object sender, CanExecuteRoutedEventArgs e)
{
    e.CanExecute = false;
    e.Handled = true;
}
16
Debashis Panda