最近我的应用程序遇到了问题:当我从我的FlowDocument
复制粘贴文本时,它会保存颜色!这是一个问题,因为其他应用程序(如Microsoft Lync和Outlook)在粘贴时会接受此颜色!我的应用程序使用白色字体,甚至不会出现在这些应用程序的白色背景上。让我感到惊讶的是,TextBox
类的情况并非如此。从TextBox
复制粘贴不会保留颜色。
显然我可以改变文字的颜色,但我喜欢颜色方案,并希望保留它。有没有办法可以禁止像FlowDocument
中的TextBox
那样复制颜色?
P.S。请不要发布答案,告诉我使用TextBox
代替FlowDocument
。我在各自的地方使用这些课程是有原因的,我不能互相交换。
答案 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时调用它)。
答案 2 :(得分:0)
为什么不右键单击并选择&#34;粘贴未格式化&#34; (在Lync中)或过去仅保留文本(在Word中)。这将从剪贴板中的文本中删除所有格式