Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在WPF中复制粘贴时如何不保存颜色?_C#_Wpf_Colors_Copy Paste - Fatal编程技术网

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

C# 在WPF中复制粘贴时如何不保存颜色?,c#,wpf,colors,copy-paste,C#,Wpf,Colors,Copy Paste,最近,我的应用程序遇到了一个问题:当我从流程文档中复制粘贴文本时,它会保存颜色!这是一个问题,因为其他应用程序(如Microsoft Lync和Outlook)在粘贴时接受此颜色!我的应用程序使用白色字体,在那些应用程序中甚至不会在白色背景上显示。真正让我吃惊的是TextBox类的情况并非如此。从文本框中复制粘贴不会保留颜色 显然,我可以改变我的文字颜色,但我喜欢颜色方案,并希望保留它。是否有一种方法可以禁用从流程文档中复制颜色,就像在文本框中一样 另外,请不要发布答案,告诉我使用文本框而不是流

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

显然,我可以改变我的文字颜色,但我喜欢颜色方案,并希望保留它。是否有一种方法可以禁用从
流程文档中复制颜色,就像在
文本框中一样


另外,请不要发布答案,告诉我使用
文本框而不是
流程文档
。我在各自的地方使用这些类是有原因的,我不能交换它们

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

如果用户希望复制带格式或不带格式的文本,您甚至可以为用户提供这两个选项。例如,当用户选择复制纯文本时,调用您的自定义
命令
,如果用户选择复制格式化文本,则调用系统复制
命令
(默认情况下,当用户执行Ctrl+c操作时会调用该命令)


有关如何从
流程文档中获取所选文本的信息,请参阅,以及有关如何将该文本设置为剪贴板的信息,请参阅。

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

如果用户希望复制带格式或不带格式的文本,您甚至可以为用户提供这两个选项。例如,当用户选择复制纯文本时,调用您的自定义
命令
,如果用户选择复制格式化文本,则调用系统复制
命令
(默认情况下,当用户执行Ctrl+c操作时会调用该命令)

有关从
流程文档中获取所选文本的信息,请参阅;有关如何将该文本设置为剪贴板的信息,请参阅。

您可以执行以下操作:

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>

您可以执行以下操作:

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>


为什么不右键单击并选择“粘贴未格式化”(在Lync中)或“仅保留文本”(在Word中)。这将删除剪贴板中文本的所有格式设置

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

是否要在流文档或其他地方进行复制粘贴?如果要在richtextbox中粘贴流文档,则可以获取richtextbox的粘贴事件。是否要在流文档或其他地方进行复制粘贴?如果要在richtextbox中粘贴流文档,则您可以获取RichTextbox的OnPaste事件。我希望覆盖默认副本,以便用户在我的应用程序中与所有其他windows应用程序具有相同的体验。我绝对不希望需要新的键盘序列。感谢您的回答。我想覆盖默认副本,以便用户在我的应用程序中与所有其他windows应用程序具有相同的体验。我绝对不希望需要新的键盘序列。不过谢谢你的回答。这是开箱即用的。感谢您提供的代码示例!开箱即用。感谢您提供的代码示例!