【问题标题】:Remove table definition from RichTextBox in WPF?从 WPF 中的 RichTextBox 中删除表定义?
【发布时间】:2014-05-25 14:49:01
【问题描述】:

我的视图中有一个 RichTextBox 控件。我正在使用代码隐藏(仅 UI 逻辑)来格式化我的 RichTextBox 中的 RTF,它是通过实例化 TextRange 的“格式”按钮单击事件工作的:

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);
 }

我还想删除 RTF 中的所有表。我可以使用 Table 类中的相同方法从我的 RichTextBox 中删除表格吗?谢谢

【问题讨论】:

    标签: c# wpf mvvm richtextbox rtf


    【解决方案1】:

    你必须爬下Blocks 并得到后代 的FlowDocument 并获取所有Tables,然后将它们从其Parent 中删除。

    【讨论】:

    • @Hardgraf 我相信关于如何做到这一点的博客/答案有限。基本上,您想对子代和后代进行递归,然后将其从其父代中删除。
    • 除了遍历 Rtf 并删除所有“trowd”标签等之外,必须有一种更简单的方法......
    • 您的方案是否粘贴到RichTextBox 并删除Tables?或者你想要相反的?
    • 是的,所以我希望在用户粘贴时删除表格,只留下剩余的文本。
    • 是否需要保留粘贴数据的格式?或者只是纯文本
    【解决方案2】:

    好的,如果有人试图实现这一点,我认为这是不可能的。也许您可以遍历 Rtf 字符串中的简单表并删除标签,但如果您无法确定用户输入,则 Rtf 太复杂了。因此,这是我的解决方案(各种......)

        private void _btnFormat_Click(object sender, RoutedEventArgs e)
        {              
           TextRange rangeOfText = new TextRange(richTextBoxArticleBody.Document.ContentStart, richTextBoxArticleBody.Document.ContentEnd);
    
          rangeOfText.ApplyPropertyValue(Table.BorderThicknessProperty, "3");
          rangeOfText.ApplyPropertyValue(Table.BorderBrushProperty, Brushes.Red);
         }
    

    在“格式”按钮单击事件中,我已将表格边框设置为红色。在我保存回数据库的方法中,我使用了这个简单的 if 语句:

    private void SaveToDbCommandAction()
    {
        if(PastedText.Contains("trowd"))
        {
            Xceed.Wpf.Toolkit.MessageBox.Show("Cannot save Article. Please remove pasted tables");          
        }
        else
        {
            SaveToDb(RTBText);
        }            
    }
    

    因此,当用户在表格中粘贴时,他们会通过红色单元格边框得到警告。如果他们粘贴带有不可见边框的表格并且实际上看不到表格,这将特别有用。 If 语句然后确定 Rtf 字符串是否包含“trowd”标签,从而阻止保存。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-26
      • 2023-04-05
      • 2013-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多