从WPF中的RichTextBox中删除表定义?

时间:2014-04-11 12:35:43

标签: c# wpf mvvm richtextbox rtf

我的视图中有一个RichTextBox控件。我使用代码隐藏(仅限UI逻辑)来格式化我的RichTextBox中的RTF,该格式正在使用' Format'按钮单击事件,实例化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中删除表吗?感谢

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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'因此阻止了保存。