如何防止系统剪贴板图像数据被粘贴到 WPF RichTextBox 中

2024-02-02

我目前有一些代码可以拦截 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(使用前将#替换为@)

如何防止系统剪贴板图像数据被粘贴到 WPF RichTextBox 中 的相关文章

随机推荐

  • IIS 7.0 - IIS 在缓存控制中添加“私有”,它来自哪里

    因为我们保护 PDF 文件免受匿名用户的侵害 所以我们有一个自定义处理程序 因此我们有一个条目 我们还对 http 标头进行了更改 通过 IIS 7 管理添加 cache control no cache no store 该管理在 sys
  • gson 格式错误的 json 异常

    我是 gson 将我的字符串转换为 jsonObject 下面是代码片段 String s orig 2334 342 Gson gson new Gson SamplePojo jsn gson fromJson s SamplePojo
  • 数据库记录锁定

    我有一个服务器应用程序和一个数据库 服务器的多个实例可以同时运行 但所有数据都来自同一个数据库 在某些服务器上是 postgresql 在其他情况下是 ms sql server 在我的应用程序中 执行一个过程可能需要几个小时 我需要确保该
  • 如果文件不存在于给定的本地文件列表中,则从 FTP 下载文件

    我有一个 FTP 服务器 我想从中下载本地目录中不存在的所有文件 我尝试做一个For Next但我就是无法理解它 我尝试枚举这些文件 但由于对两个列表都执行了该操作 所以出现错误 我认为该错误可能是由于交叉检查在线文件与本地列表中的单个枚举
  • 如何在 SQL 脚本中使用新值更新 XML 元素

    我在其中一列中有 XMLXYZ表 我需要更新Amount具有新值而不是 0 00 的元素 并且PolicyReference and AccountReference具有两个不同值而不是空白的元素 例如
  • EditText 具有单个文本行、换行和完成操作吗?

    我想有一个EditText使用软键编辑时具有以下特征 我准备好了文档 在这里搜索 使用参数 但找不到工作配置 The EditView屏幕上的视图具有几行的高度 例如 3 4 内容文本是单行 即没有换行符 如果内容文本比视图的宽度长 它应该
  • Ruby on Rails - 引用同一模型两次?

    是否可以建立双重关系activerecord模型通过generate scaffold命令 例如 如果我有一个User模型和一个PrivateMessage模型中 private messages 表需要跟踪sender and recip
  • 将数据导入 Matlab

    我有一个 csv 文件 其中包含我想要导入到 Matlab 中的数据 因为它是日期和数字的混合 所以我使用 data textscan fid s s n n n n n 819500 headerlines 1 delimiter 不幸的
  • 交换字符串中出现频率最高的两个字母

    我不知道我的代码有什么问题 但是当我编译时我得到 warning passing arg 2 of strcspn makes pointer from integer without a cast 这是代码 include
  • 在 Java 中读取 CSV 文件时跳过第一行

    我正在编写一个解析器代码来读取 csv 文件并将其解析为 XML 这是我拥有的代码并且它可以工作 但我希望它跳过文件中的第一行 所以我决定设置一个HashMap 但它似乎不起作用 for int i 0 i lt listOfFiles l
  • heightForRowAtIndexPath iOS 中的 EXC_BAD_ACCESS

    我正在开发一个应用程序 其中有 UITableViewCell 的自定义子类 我想根据单元格内部的文本使单元格的高度动态化 我尝试在 heightForRowAtIndexPath 方法中执行此操作 但我遇到了一些问题 以下代码导致 EXC
  • 设置 Facebook SDK 进行后处理会导致控制台中出现错误消息

    我对此没有明显的影响 但我正处于项目的最后阶段 并且正在努力注意任何警告 每次在 Xcode 控制台中启动时 将以下行添加到 App Delegate 下时 我都会收到来自 FB 的 3 条警告日志application didFinish
  • EntityType“DbGeography”没有定义键

    长期听众 第一次来电 终于在这里注册了帐户 我在用视觉工作室2013 with NET 4 5 1 and 实体框架6 最终版本 不是 RC 或测试版 当尝试将 DbGeography 属性添加到我的实体时 我在执行时收到此错误 One o
  • 如何让 *ant* 不打印 javac 警告?

    我现在只想打印出错误 而不是其他任何内容 谢谢 你有没有尝试过
  • 如何在首次加载时获取 htaccess 文件设置的 cookie

    我需要在第一次加载页面时获取 cookie 值 我知道可以在第二次加载时检索 cookie 我需要这个 因为我想根据服务器 htaccess 文件设置的 cookie 值进行重定向 我在 htaccess 文件中以这种方式设置 cookie
  • 将 wpf 用户控件绑定到父属性

    我有一个简单的用户控件 其中包含一个图像 我想根据父级 可能是另一个 UC 或窗口 中的属性更改其源 UC 的简化版本如下所示
  • 如何检查给定远程存储库上是否存在远程分支?

    如果特定分支存在于给定的远程存储库上 我需要对其进行子树合并 问题是远程存储库没有在本地签出 所以我无法使用git branch r 我所拥有的只是一个远程地址 类似这样https github com project name proje
  • Javascript - 如何使用哈希获取文档引用者

    我想知道这是否可能 我试图访问 iframe 内文档的引用站点 但它总是忽略 hash 值 根页面 index html http example com test hashvalue 在根页面内部 有一个 iframe 可以获取引荐来源网
  • ColdFusion、CFDirectory 和法语

    我们有一个 ColdFusion 文件库管理系统 该系统正在从旧的 ColdFusion 4 服务器上拆除并转移到基于 ColdFusion 8 的新系统上 我们所有的文件和文件夹均采用英语 法语和西班牙语 在 CF8 中使用 CFDire
  • 如何防止系统剪贴板图像数据被粘贴到 WPF RichTextBox 中

    我目前有一些代码可以拦截 WPF 中 RichTextBox 中的所有剪切 复制和粘贴事件 这些旨在剥离除纯文本之外的所有内容 并且不允许粘贴除纯文本之外的内容 通过使用检查 Clipboard ContainsText 方法 这似乎成功地