我有一个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中是否有可以实现此目的的方法? 感谢
答案 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'因此阻止了保存。