gpt4 book ai didi

c# - WPF 剪贴板操作期间的数据丢失

转载 作者:行者123 更新时间:2023-11-30 18:44:09 26 4
gpt4 key购买 nike

我正在 WPF RichTextBox 中使用 FlowDocument。一些流文档元素是使用 System.Windows.Documents 框架类的子类创建的,所有元素都使用 Tag 属性来存储附加数据。

如果我使用 XamlWriter 序列化文档树,所有内容都会正确反射(reflect)在生成的 Xaml 输出中。

但是,如果我只是在 RichTextBox 中复制和粘贴,虽然粘贴的元素在视觉上与复制它们的元素相同,但剪贴板操作会丢弃我所有的附加数据。具体来说,所有子类元素都作为其基本框架类型的实例粘贴,并且它们的 Tag 属性中都没有数据。

这表明 RichTextBox 上的 WPF 剪贴板操作不使用 XamlWriter 进行序列化,尽管序列化的剪贴板数据将其格式标识为“Xaml”。

我想这种行为的原因是为了确保在粘贴到其他不一定了解我的自定义类型的 Xaml 感知应用程序时有一个共同点。但是我需要在我的应用程序中实现更丰富的复制/粘贴机制。

我想我可能可以拦截复制事件并以自定义格式添加剪贴板数据,随后将其应用于粘贴事件。然而,这会带来其自身的复杂性,因为元素可能需要在粘贴之前进行包装(例如,粘贴到 block 元素上下文中的内联元素)。

因此,我希望避免重新发明轮子,并希望就如何使用现有的框架基础架构让它发挥作用提出任何建议。

最佳答案

我对你的问题没有确切的答案,但我可以想到两种方法来继续 -

  1. CommandBinding 关联复制/粘贴操作,与您控制和执行自定义ExecuteCanExecute 中的操作方法。如此处所述:

    http://msdn.microsoft.com/en-us/library/system.windows.input.commandbinding.aspx

  2. 使用DataObject类进行拦截复制/粘贴事件并执行你的自定义操作在那里。 IE。 DataObject.AddCopyingHandlerDataObject.AddPastingHandler .

一些有用的链接-

http://msdn.microsoft.com/en-us/library/system.windows.dataobject_members.aspx

Link

希望对您有所帮助。

关于c# - WPF 剪贴板操作期间的数据丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3293547/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com