首页 文章

Silverlight:禁用文本框上的复制/粘贴/剪切操作

提问于
浏览
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;
    }
}

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

我试图使用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>

有谁知道为什么这不起作用?

2 回答

  • 0

    UPDATED JUNE 24

    在WPF中,您可以在 PreviewKeyDown 事件中捕获CTRL X / C / V键,然后您就可以在文本框中禁止这些功能 .

    在Silverlight中,预览方法不可用,因此这里不是一个选项 . TextBox 控件还具有剪贴板操作的内置处理复制和粘贴 CTRL+CCTRL+V (请参阅Clipboard class remarks),因此禁止这些操作并不简单 .

    尝试了一个SL3项目here,其中 OnKeyDownOnKeyUp 事件处理程序在派生自 TextBox 的类中被覆盖 . 该实现调用 base 方法,这些方法在 Behavior 实现中显然无法访问,因此在 TextBox via行为中直接实现复制和粘贴抑制似乎是不可能的 .

  • 2
    if (e.Key == Key.Ctrl)
                Clipboard.SetText(string.Empty);
    

相关问题