3

テキストボックスのコピー/貼り付け/切り取り操作を無効にする必要があります。この目的のために、Textboxを継承してMyTextboxを作成し、KeyDownイベントを次のコードでオーバーライドしました。

if (!(e.Key == Key.Back || e.Key == Key.Left || e.Key == Key.Right || e.Key == Key.Delete || e.Key == Key.Tab))
{
    if ((e.Key == Key.C || e.Key == Key.X || e.Key == Key.V) &&
                     (Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control)
    {
        e.Handled = true;
    }
}

次に、このテキストボックスを使用しました。このテキストボックスは、コピー/貼り付け/切り取り操作を防止するようになりました。

ビヘイビアーを使用してこれと同じ目的を達成しようとしています。この目的のために、ビヘイビアーを作成しました。コードは以下の通りです

public class MyTextboxBehavior : Behavior<TextBox>
{
        protected override void OnAttached()
        {
            base.OnAttached();

            this.AssociatedObject.KeyDown += new KeyEventHandler(AssociatedObject_KeyDown);
        }

        private void AssociatedObject_KeyDown(object sender, KeyEventArgs e)
        {
            if (!(e.Key == Key.Back || e.Key == Key.Left || e.Key == Key.Right || e.Key == Key.Delete || e.Key == Key.Tab))
            {
                if ((e.Key == Key.C || e.Key == Key.X || e.Key == Key.V) &&
                     (Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control)
                {
                    e.Handled = true;
                }
            }
        }
}

この動作を以下のようにテキストボックスに追加しました

<TextBox>
     <Interactivity:Interaction.Behaviors>
          <CustomControl:MyTextboxBehavior></CustomControl:MyTextboxBehavior>
     </Interactivity:Interaction.Behaviors>
</TextBox>

なぜこれが機能しないのか誰かが知っていますか?

4

2 に答える 2

2

6月24日更新

WPFでは、イベントでのCTRL + X / C / Vキーの押下をキャプチャしてPreviewKeyDownから、テキストボックスでこれらの機能を非表示にすることができます。

Silverlightプレビューではメソッドを使用できないため、ここではオプションではありません。このTextBoxコントロールには、クリップボードのアクションのコピーと貼り付けCTRL+CおよびCTRL+Vクリップボードクラスの注釈を参照)の処理も組み込まれているため、これらのアクションを抑制するのは簡単ではありません。

ここでSL3プロジェクトの試みがあり、から派生したクラスでOnKeyDownおよびイベントハンドラーがオーバーライドされます。実装は、実装では明らかにアクセスできないメソッドを呼び出すため、via動作でのコピーアンドペースト抑制の直接的な実装は不可能であるように思われます。OnKeyUpTextBoxbaseBehaviorTextBox

于 2012-06-21T12:33:15.453 に答える
0
        if (e.Key == Key.Ctrl)
            Clipboard.SetText(string.Empty);
于 2014-05-06T00:09:59.850 に答える