C# 是否从WPF中的RichTextBox中删除表定义?

C# 是否从WPF中的RichTextBox中删除表定义?,c#,wpf,mvvm,richtextbox,rtf,C#,Wpf,Mvvm,Richtextbox,Rtf,我的视图中有一个RichTextBox控件。我正在使用代码隐藏(仅限UI逻辑)格式化我的RichTextBox中的RTF,该RTF通过“格式化”按钮单击事件工作,该事件实例化了一个TextRange: private void _btnFormat_Click(object sender, RoutedEventArgs e) { TextRange rangeOfText = new TextRange(richTextBoxArticleBody.Document.ContentSt

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

你必须爬下
并获得后代
获取所有的
表格
,然后将它们从其
父级
中删除。好的,如果有人试图实现这一点,我认为这是不可能的。也许您可以在Rtf字符串中迭代一个简单的表并删除标记,但是如果您不能确定用户输入,Rtf就太复杂了。因此,这里是我的解决方案(某种程度上…)

在“格式”按钮中,单击事件,我已将表格边框设置为红色。在“保存回数据库”方法中,我使用了以下简单的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”标记,从而阻止保存。

@Hardgraf我相信关于如何执行此操作的博客/答案有限。基本上,您希望在子代和子代上执行递归,然后将其从父代中删除。除了迭代Rtf和删除所有“trowd”标记等之外,必须有更简单的方法来执行此操作。您的场景是否正在粘贴到
RichTextBox
并删除
?或者你想要相反的结果?没错,所以我希望在用户粘贴时删除表,只保留剩余的文本。是否需要保留粘贴数据的格式?还是纯文本
private void SaveToDbCommandAction()
{
    if(PastedText.Contains("trowd"))
    {
        Xceed.Wpf.Toolkit.MessageBox.Show("Cannot save Article. Please remove pasted tables");          
    }
    else
    {
        SaveToDb(RTBText);
    }            
}