2013-01-16 86 views
0

說我有這種情況發生有這個文本在它-----------------(自有線路)得到一個WPF RichTextBox的文本上畫一個臥式線

給定的TextRange range我想,每當我畫一個真正的線看到該文本(而不是隻有15破折號)。

但是,當我保存它時(以及其他純文本查看器加載它時),我需要在那裏保留破折號。

我發現我怎麼能在RichTextBox中畫一條線:

var line = new Line {X1 = 10, X2 = 200, Y1 = 5, Y2 = 5, 
var paragraph = (Paragraph) MyRichTextBox.Document.Blocks.FirstBlock; 
paragraph.Inlines.Add(line); 

但最後內嵌在後段這只是平局。

所以,我的問題是:

怎樣繪製,使我的UIElement不會對文本換行(這樣我就可以覆蓋破折號)?

這可能與WPF RichTextBox?

回答

0

你可以使用「TextDecorations.Strikethrough」來做到這一點。

TextRange range = new TextRange(RichTextBox.Selection.Start, RichTextBox.Selection.End); 

TextDecorationCollection tdc = (TextDecorationCollection)RichTextBox.Selection.GetPropertyValue(Inline.TextDecorationsProperty); 
if (!tdc.Equals(TextDecorations.Strikethrough)) 
{ 
    tdc = TextDecorations.Strikethrough; 
} 
range.ApplyPropertyValue(Inline.TextDecorationsProperty, tdc); 
+0

不幸的是刪除線看起來不像一條線。 (只是有人玩過的虛線連接點。 – Vaccano

0

我認爲你必須從段落中刪除Inline,並用Line元素替換它。在這種情況下,您必須在保存時用「-----」替換Line元素。

private void FindHRules() 
    { 
     foreach (Paragraph block in rtf.Document.Blocks.OfType<Paragraph>()) 
     { 
      var inlines = block.Inlines.ToList(); 
      for(int i = 0; i<inlines.Count; i++) 
      { 
       var inline = inlines[i]; 
       TextRange r = new TextRange(inline.ContentStart, inline.ContentEnd); 
       if (r.Text.StartsWith("--")) 
       { 
        Line l = new Line { Stretch = Stretch.Fill, Stroke = Brushes.DarkBlue, X2 = 1 }; 
        block.Inlines.InsertAfter(inline, new InlineUIContainer(l)); 
        block.Inlines.Remove(inline); 
       } 
      } 
     } 
    } 

我一個RTF文件,讓曾在獨立的段落(<進入>)和換行符(<移進>)其他段落中的「-----」行測試這一點。

相關問題