表转换为Text方法C#WPF?

时间:2014-04-14 10:30:38

标签: c# wpf mvvm richtextbox rtf

我有一个Rtf格式的RichTextBox。用户当前可以粘贴表格。我想取消这个功能,即从粘贴上的Rtf剥离表

我需要将RichTextBox保留在Rtf中,因为我需要保留项目符号,编号列表等。所以不能简单地粘贴在纯文本中。

我目前正在锁定像这样的粘贴文本的格式,但效果不错,但找不到任何删除表格的方法......

     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&删除标签看起来非常复杂,因为每个粘贴都会有所不同。我在Word中注意到Table ConvertToText功能正是我所需要的。

有谁知道.NET中是否有可以实现此目的的方法? 感谢

1 个答案:

答案 0 :(得分:0)

好的,如果有人想要实现这一目标,我认为这是不可能的。也许您可以在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'因此阻止了保存。