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

时间:2014-07-15 02:48:01

标签: c# wpf colors copy-paste

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

显然我可以改变文字的颜色,但我喜欢颜色方案,并希望保留它。有没有办法可以禁止像FlowDocument中的TextBox那样复制颜色?

P.S。请不要发布答案,告诉我使用TextBox代替FlowDocument。我在各自的地方使用这些课程是有原因的,我不能互相交换。

3 个答案:

答案 0 :(得分:3)

你可以这样做:

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>

答案 1 :(得分:1)

最好的方法是创建自定义副本Command,您可以在其中实现代码,只获取FlowDocument中所选内容的文本部分,然后将其复制到剪贴板。因此,当您将其粘贴到任何位置时,您将只获得剪贴板上的文本部分,而不是格式。为此命令提供不同的KeyInputBinding,例如Ctrl + Shift + c,这样它就不会与默认的复制功能发生冲突。

如果用户希望使用格式化或不格式化复制文本,即使您可以为用户提供这两个选项。就像用户选择复制纯文本时一样,调用自定义Command,如果用户选择复制格式化文本,则调用系统副本Command(默认情况下,当用户执行Ctrl + c时调用它)。

有关从FlowDocument获取所选文字的信息,请参阅this,并参阅this了解如何将该文字设置为剪贴板。

答案 2 :(得分:0)

为什么不右键单击并选择&#34;粘贴未格式化&#34; (在Lync中)或过去仅保留文本(在Word中)。这将从剪贴板中的文本中删除所有格式

相关问题