我的视图中有一个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中删除表吗?感谢
答案 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'因此阻止了保存。