如何在WPF中复制粘贴时不保存颜色
本文关键字:保存 颜色 复制 WPF | 更新日期: 2023-09-27 18:12:50
最近我遇到了一个问题,我的应用程序:当我复制粘贴文本从我的FlowDocument
,它保存颜色!这是一个问题,因为其他应用程序(如Microsoft Lync和Outlook)在粘贴时接受这种颜色!我的应用程序使用白色字体,在那些应用程序的白色背景上甚至不会显示出来。真正让我惊讶的是,TextBox
班的情况并非如此。复制粘贴出的TextBox
不保留颜色。
显然我可以改变文本的颜色,但我喜欢这个配色方案,并希望保留它。是否有一种方法,我可以禁用复制的颜色从FlowDocument
像在TextBox
?
注:请不要张贴答案告诉我使用TextBox
而不是FlowDocument
。我在它们各自的位置使用这些类是有原因的,我不能交换它们。
你可以这样做:
public MainWindow()
{
InitializeComponent();
DataObject.AddCopyingHandler(flowDocumentViewer, OnCopy);
}
private void OnCopy(object sender, DataObjectEventArgs e)
{
e.CancelCommand();
Clipboard.SetText(flowDocumentViewer.Selection.Text);
}
假设你的FlowDocument是托管在FlowDocumentScrollViewer这样:
<FlowDocumentScrollViewer Name="flowDocumentViewer">
<FlowDocument>
最好的方法是创建一个自定义副本Command
,其中您可以实现仅获取您在FlowDocument
中选择的文本部分的代码,然后将其复制到剪贴板。所以当你把它粘贴到任何地方你只会得到剪贴板上的文本部分,而不是格式。为这个命令提供一个不同的KeyInputBinding
,例如Ctrl+Shift+c,这样它就不会与默认的复制功能冲突。
如果用户想要复制带格式或不带格式的文本,您甚至可以为用户提供这两个选项。如当用户选择复制纯文本调用自定义的Command
,如果用户选择复制格式化文本调用系统复制Command
(默认情况下,当用户按Ctrl+c时调用)。
从FlowDocument
中获取选定文本,以及如何将该文本设置为剪贴板
为什么不右键单击并选择"粘贴未格式化"(在Lync中)或过去仅保留文本(在Word中)。这将删除剪贴板中文本的所有格式