我目前有一些代码拦截所有剪切,复制和粘贴事件到WPF中的RichTextBox。这些设计是为了除去纯文本以外的所有内容,并且除了纯文本之外不允许粘贴(通过使用检查Clipboard.ContainsText()方法)。这似乎可以成功地阻止在内的所有操作。用户只能复制,剪切和粘贴文字,图像/音频数据/随机垃圾不被允许。但是,如果我使用PrintScreen函数并将其粘贴到其中一个RichTextBoxes中,则图像将被粘贴(而不是想要的行为)。如果您尝试将此图像从一个RichTextBox粘贴到另一个RichTextBox,但它不会让你(期望的行为)。我怎样才能防止系统剪贴板图像数据被粘贴到WPF 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(等)方法完成的,然后基本上检查,只有文字是允许的任何操作之前存在。
似乎有两个剪贴板在这里工作,其中一个我不限制/锁定。有没有人知道这方面的技术问题,以及所有剪贴板活动(表单和系统)可以被锁定和有效定制的方式?
在此先感谢。
可能是一个愚蠢的问题,但这样做只会影响键按压的程序,还是会影响系统其他部分的所有按键组合?我只是不想中断用户对系统其他部分的意外操作! :) – Smallgods 2010-10-20 07:43:03
用这种方法进行实验,它完美的工作!我没有想过从这个角度来看待它,所以谢谢:)留下我的方法,因为它有助于按照我的意愿设置文本的格式,但是您的建议可以修复我遇到的最后一个问题。再次欢呼! – Smallgods 2010-10-20 07:54:35
很高兴帮助!它会影响系统,如果你试图将打印过的图像粘贴到rtf中,它将会丢失,否则,只要你只在rtf上捕捉预览图像,它应该只做这个,只要你的RTF盒子专注。如果你的窗户没有专注,我保证它不会陷入事件。 – Almund 2010-10-20 08:31:04