我目前有一些代码可以拦截 WPF 中 RichTextBox 中的所有剪切、复制和粘贴事件。这些旨在剥离除纯文本之外的所有内容,并且不允许粘贴除纯文本之外的内容(通过使用检查 Clipboard.ContainsText() 方法。)这似乎成功地防止了所有此类操作inside表格。用户只能复制、剪切和粘贴文本,不允许使用图像/音频数据/随机垃圾。
但是,如果我使用 PrintScreen 函数,并将其粘贴到其中一个 RichTextBox 中,则图像将被粘贴(不是想要的行为。)如果您随后尝试将此图像从一个 RichTextBox 粘贴到另一个 RichTextBox,则它不会让你(期望的行为)。
我当前覆盖的命令是使用完成的
// Command handlers for Cut, Copy and Paste commands.
// To enforce that data can be copied or pasted from the clipboard in text format only.
CommandManager.RegisterClassCommandBinding(typeof(MyRichTextBox),
new CommandBinding(ApplicationCommands.Copy, new ExecutedRoutedEventHandler(OnCopy),
new CanExecuteRoutedEventHandler(OnCanExecuteCopy)));
CommandManager.RegisterClassCommandBinding(typeof(MyRichTextBox),
new CommandBinding(ApplicationCommands.Paste, new ExecutedRoutedEventHandler(OnPaste),
new CanExecuteRoutedEventHandler(OnCanExecutePaste)));
CommandManager.RegisterClassCommandBinding(typeof(MyRichTextBox),
new CommandBinding(ApplicationCommands.Cut, new ExecutedRoutedEventHandler(OnCut),
new CanExecuteRoutedEventHandler(OnCanExecuteCut)));
然后,OnCopy(等)方法在允许任何操作之前本质上检查是否仅存在文本。
这里似乎有两个剪贴板在工作,其中之一我没有限制/锁定。有谁知道这方面的技术细节,以及可以有效锁定和定制所有剪贴板活动(表单和系统)的任何方式?
提前致谢。
这对于用户来说可能有点无情,但您可以像在粘贴之前劫持并清除剪贴板一样简单。只需挂钩 PreviewKeyDown(因为在 KeyUp 上它已经被插入)并清除剪贴板(如果我们有图像并按 Ctrl+V):
public Window1()
{
InitializeComponent();
_rtf.PreviewKeyDown += OnClearClipboard;
}
private void OnClearClipboard(object sender, KeyEventArgs keyEventArgs)
{
if (Clipboard.ContainsImage() && keyEventArgs.Key == Key.V && (Keyboard.Modifiers & ModifierKeys.Control) != 0)
Clipboard.Clear();
}
这不是最巧妙的解决方案,但它可以解决问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)