【问题标题】:Set formatting in RTF string?在 RTF 字符串中设置格式?
【发布时间】:2014-04-07 13:10:18
【问题描述】:

我在视图模型中使用“粘贴”按钮命令从剪贴板复制 RTF。 PastedText 是我认为 RichTextBox 绑定到的字符串属性:

 private void FormatPastedTextCommandAction()
 {
    PastedText += Clipboard.GetText(TextDataFormat.Rtf);                   
 }

这很有效,并且在按下“粘贴”按钮时会粘贴文本。但是,我想锁定粘贴功能上的格式并从粘贴的 RTF 字符串中删除所有格式(颜色、斜体、设置为黑色 Arial 12)。

我只会使用PastedText += Clipboard.GetText();

获取纯文本,但它以不同的字体大小粘贴,我需要 RTF 格式。我已经研究过迭代 RTF 字符串并对字体大小、颜色等进行查找/替换。但即使对于几个单词,RTF 也非常复杂。

有没有办法解决这个问题?谢谢

【问题讨论】:

  • GetText() 仅返回文本,不包含任何格式。您看到的是您自己的代码(或 XAML)格式应用于PastedText 的内容。
  • 是的,但是 GetText(TextDataFormat.RTF) 返回 RTF 以及粘贴文本的格式。我知道 GetText() 只会返回未格式化的文本,但我需要它作为 RTF...
  • 使用 GetText() 我得到了我输入的文本的 RTF 格式,然后是附加到 RTF 末尾的纯文本。这会导致粘贴的文本在 RichTextBox 中创建一个新行,并且该粘贴文本的 FontSize 默认为 16...

标签: c# wpf mvvm richtextbox rtf


【解决方案1】:

最后,我使用视图中的代码从 RichTextBox 本身使用“格式”按钮去除格式:

 private void _btnFormat_Click(object sender, RoutedEventArgs e)
    {
        TextRange rangeOfText = new TextRange(richTextBoxArticleBody.Document.ContentStart, richTextBoxArticleBody.Document.ContentEnd);
        rangeOfText.ApplyPropertyValue(TextElement.ForegroundProperty, Brushes.Black);
        rangeOfText.ApplyPropertyValue(TextElement.FontSizeProperty, "12");
        rangeOfText.ApplyPropertyValue(TextElement.FontFamilyProperty, "Arial");
        rangeOfText.ApplyPropertyValue(TextElement.FontStyleProperty, "Normal");
        rangeOfText.ApplyPropertyValue(Inline.TextDecorationsProperty, null);
        rangeOfText.ApplyPropertyValue(Paragraph.MarginProperty, new Thickness(0));

    }

这做得很好,并没有真正打破 MVVM 模式,因为代码只是 UI 逻辑。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-15
    • 2021-11-17
    • 2019-06-21
    • 1970-01-01
    • 1970-01-01
    • 2013-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多