如何防止系统剪贴板图像数据被粘贴到 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 中 的相关文章

  • BASIC 中的 C 语言中的 PeekInt、PokeInt、Peek、Poke 等效项

    我想知道该命令的等效项是什么Peek and Poke 基本和其他变体 用 C 语言 类似PeekInt PokeInt 整数 涉及内存条的东西 我知道在 C 语言中有很多方法可以做到这一点 我正在尝试将基本程序移植到 C 语言 这只是使用
  • 在模板类中声明模板友元类时出现编译器错误

    我一直在尝试实现我自己的链表类以用于教学目的 我在迭代器声明中指定了 List 类作为友元 但它似乎无法编译 这些是我使用过的 3 个类的接口 Node h define null Node
  • STL 迭代器:前缀增量更快? [复制]

    这个问题在这里已经有答案了 可能的重复 C 中的预增量比后增量快 正确吗 如果是 为什么呢 https stackoverflow com questions 2020184 preincrement faster than postinc
  • 在 xaml 中编写嵌套类型时出现设计时错误

    我创建了一个用户控件 它接受枚举类型并将该枚举的值分配给该用户控件中的 ComboBox 控件 很简单 我在数据模板中使用此用户控件 当出现嵌套类型时 问题就来了 我使用这个符号来指定 EnumType x Type myNamespace
  • C# 异步等待澄清?

    我读了here http blog stephencleary com 2012 02 async and await html that 等待检查等待的看看它是否有already完全的 如果 可等待已经完成 那么该方法将继续 运行 同步
  • 如何在 Cassandra 中存储无符号整数?

    我通过 Datastax 驱动程序在 Cassandra 中存储一些数据 并且需要存储无符号 16 位和 32 位整数 对于无符号 16 位整数 我可以轻松地将它们存储为有符号 32 位整数 并根据需要进行转换 然而 对于无符号 64 位整
  • -webkit-box-shadow 与 QtWebKit 模糊?

    当时有什么方法可以实现 webkit box shadow 的工作模糊吗 看完这篇评论错误报告 https bugs webkit org show bug cgi id 23291 我认识到这仍然是一个问题 尽管错误报告被标记为RESOL
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 无限循环与无限递归。两者都是未定义的吗?

    无副作用的无限循环是未定义的行为 看here https coliru stacked crooked com view id 24e0a58778f67cd4举个例子参考参数 https en cppreference com w cpp
  • 需要帮助优化算法 - 两百万以下所有素数的总和

    我正在尝试做一个欧拉计划 http projecteuler net问题 我正在寻找 2 000 000 以下所有素数的总和 这就是我所拥有的 int main int argc char argv unsigned long int su
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • 为什么 C# 2.0 之后没有 ISO 或 ECMA 标准化?

    我已经开始学习 C 并正在寻找标准规范 但发现大于 2 0 的 C 版本并未由 ISO 或 ECMA 标准化 或者是我从 Wikipedia 收集到的 这有什么原因吗 因为编写 审查 验证 发布 处理反馈 修订 重新发布等复杂的规范文档需要
  • 两个类可以使用 C++ 互相查看吗?

    所以我有一个 A 类 我想在其中调用一些 B 类函数 所以我包括 b h 但是 在 B 类中 我想调用 A 类函数 如果我包含 a h 它最终会陷入无限循环 对吗 我能做什么呢 仅将成员函数声明放在头文件 h 中 并将成员函数定义放在实现文
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li
  • DotNetZip:如何提取文件,但忽略zip文件中的路径?

    尝试将文件提取到给定文件夹 忽略 zip 文件中的路径 但似乎没有办法 考虑到其中实现的所有其他好东西 这似乎是一个相当基本的要求 我缺少什么 代码是 using Ionic Zip ZipFile zf Ionic Zip ZipFile
  • MySQL Connector C/C API - 使用特殊字符进行查询

    我是一个 C 程序 我有一个接受域名参数的函数 void db domains query char name 使用 mysql query 我测试数据库中是否存在域名 如果不是这种情况 我插入新域名 char query 400 spri
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么

随机推荐

  • 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 方法 这似乎成功地