1

rangeたまたまこのテキストが含まれている特定の TextRangeがあるとします-----------------(独自の行にあります)。

そのテキストを見るたびに(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);

しかし、これは段落の最後の Inline の後に描画するだけです。

だから、私の質問は:

UIElement でテキストの折り返しがオンにならないように(ダッシュをカバーできるように) 描画するにはどうすればよいですか?

これは WPF RichTextBox で可能ですか?

4

2 に答える 2

0

段落内の from を削除して、要素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);
                }
            }
        }
    }

これを、独立した段落 (<enter>) に「-----」行があり、他の段落内に改行 (<shift-enter>) がある RTF ドキュメントでテストしました。

于 2013-01-21T20:12:07.203 に答える
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);
于 2013-01-16T03:07:52.597 に答える