2014-04-11 48 views
1

我在我的視圖中有一個RichTextBox控件。我使用的代碼隱藏(UI只邏輯)格式化這是從​​實例化一個TextRange一個「格式」按鈕單擊事件的工作我的RichTextBox中RTF:從WPF中的RichTextBox中刪除表定義?

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

你必須爬下Blocks並獲得後代的FlowDocument的 並得到所有的Tables,然後從它的Parent刪除它們。

+0

好的,謝謝,如何處理這個問題的任何指針? – Hardgraf

+0

@Hardgraf我相信有關如何做到這一點的博客/答案有限。基本上你想對子代和子代進行遞歸,然後將它從父代中移除。 –

+0

除了遍歷Rtf並刪除所有'trowd'標籤等之外,還必須有一個更簡單的方法來完成此操作。 – Hardgraf

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'標籤,因此阻止保存。