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

时间:2012-06-21 10:37:32

标签: silverlight-5.0

我要求在文本框上禁用复制/粘贴/剪切操作。为此,我继承了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 :(得分:2)

6月24日更新

在WPF中,您可以在PreviewKeyDown事件中捕获 CTRL + X / C / V 键,然后您将成为能够在文本框中禁止这些功能。

在Silverlight 预览方法不可用,所以这里不是一个选项。 TextBox控件还具有剪贴板操作的内置处理功能,可以复制并粘贴CTRL+CCTRL+V(请参阅Clipboard class remarks),因此抑制这些操作并非直截了当。

尝试了一个SL3项目here,其中OnKeyDownOnKeyUp事件处理程序在派生自TextBox的类中被覆盖。该实现调用了base实现中明显无法访问的Behavior方法,因此可以直接实现 copy paste 抑制TextBox通过行为似乎不可能。

答案 1 :(得分:0)

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