3

我需要禁用文本框上的复制/粘贴/剪切操作。为此,我继承了文本框并创建了 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;
    }
}

然后使用这个文本框。此文本框现在可以防止复制/粘贴/剪切操作。

我正在尝试使用 Behaviors 来实现同样的目的。为此,我创建了一个行为。代码如下

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 项目的尝试,其中OnKeyDownOnKeyUp事件处理程序在派生自TextBox. 该实现调用了在实现base中显然不可访问的方法Behavior,因此在通过行为中直接实现复制粘贴抑制TextBox似乎是不可能的。

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