我要求在文本框上禁用复制/粘贴/剪切操作 . 为此,我继承了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 回答
UPDATED JUNE 24
在WPF中,您可以在
PreviewKeyDown
事件中捕获CTRL X / C / V键,然后您就可以在文本框中禁止这些功能 .在Silverlight中,预览方法不可用,因此这里不是一个选项 .
TextBox
控件还具有剪贴板操作的内置处理复制和粘贴CTRL+C
和CTRL+V
(请参阅Clipboard class remarks),因此禁止这些操作并不简单 .尝试了一个SL3项目here,其中
OnKeyDown
和OnKeyUp
事件处理程序在派生自TextBox
的类中被覆盖 . 该实现调用base
方法,这些方法在Behavior
实现中显然无法访问,因此在TextBox
via行为中直接实现复制和粘贴抑制似乎是不可能的 .