如何在WPF中复制粘贴时不保存颜色

本文关键字:保存 颜色 复制 WPF | 更新日期: 2023-09-27 18:12:50

最近我遇到了一个问题,我的应用程序:当我复制粘贴文本从我的FlowDocument,它保存颜色!这是一个问题,因为其他应用程序(如Microsoft Lync和Outlook)在粘贴时接受这种颜色!我的应用程序使用白色字体,在那些应用程序的白色背景上甚至不会显示出来。真正让我惊讶的是,TextBox班的情况并非如此。复制粘贴出的TextBox不保留颜色。

显然我可以改变文本的颜色,但我喜欢这个配色方案,并希望保留它。是否有一种方法,我可以禁用复制的颜色从FlowDocument像在TextBox ?

注:请不要张贴答案告诉我使用TextBox而不是FlowDocument。我在它们各自的位置使用这些类是有原因的,我不能交换它们。

如何在WPF中复制粘贴时不保存颜色

你可以这样做:

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中)。这将删除剪贴板中文本的所有格式