web-dev-qa-db-ja.com

C#/ WPF:RichTextBoxのテキストラップを無効にする

RichTextBoxのテキスト折り返しを無効にする方法を知っている人はいますか?例えば。ウィンドウに収まらない大きな文字列がある場合、RichTextBoxは、新しい行の表示できない文字列の部分を配置します。それを無効にしたい(そしてScrollbarを使用することによってのみ表示できるようにしたい)。

どうもありがとう。

乾杯

WPFの RichTextBox は、単に FlowDocument のエディターです。
によると [〜#〜] msdn [〜#〜]

テキストは常にRichTextBoxで折り返されます。テキストを折り返したくない場合は、 FlowDocumentPageWidthRichTextBoxの幅よりも大きく設定します。 。ただし、ページ幅に達すると、テキストは折り返されます。

したがって、RichTextBoxのワードラップを明示的に無効にする方法はありませんが、次のようなことができます。

richTextBox1.HorizontalScrollBarVisibility = ScrollBarVisibility.Visible;
richTextBox1.Document.PageWidth = 1000;

PageWidthを超える行ができるまで、これは基本的に同じ望ましい効果をもたらします。

(2015年7月現在):VS2015RCではwordwrap = falseOPが望むように正確に機能する。以前のバージョンのVisualStudioもそうだったと思います。

32
Donut

水平スクロールバーを表示したくない場合は、ScrollViewerにMinWidthを適用します。

<RichTextBox ScrollViewer.HorizontalScrollBarVisibility="Hidden">

    <RichTextBox.Resources>
        <Style TargetType="ScrollViewer">
            <Setter Property="MinWidth" Value="2000" />
        </Style>
    </RichTextBox.Resources>

</RichTextBox>
1

私にとって満足のいく答えはなかったので、ここに私の解決策があります:

private void RichTxt_TextChanged(object sender, TextChangedEventArgs e)
{
    string text = new TextRange(richTxt.Document.ContentStart, richTxt.Document.ContentEnd).Text;
    FormattedText ft = new FormattedText(text, System.Globalization.CultureInfo.CurrentCulture, FlowDirection.LeftToRight, new Typeface(richTxt.FontFamily, richTxt.FontStyle, richTxt.FontWeight, richTxt.FontStretch), richTxt.FontSize, Brushes.Black);
    richTxt.Document.PageWidth = ft.Width + 12;
    richTxt.HorizontalScrollBarVisibility = (richTxt.Width < ft.Width + 12) ? ScrollBarVisibility.Visible : ScrollBarVisibility.Hidden;
}

質問は、テキストの長さと更新される頻度に応じたパフォーマンスについてです。

0
Martin

また、大きな文字列を表示してRichTextBoxを試しましたが、ドキュメントのPageWidthを固定サイズに設定するという解決策が気に入らなかった。スクロールバーは常に表示され、スクロール領域は非常に大きくなりました。

TextBlockで十分な場合は、代わりにそれを使用してScrollViewer内に配置できます。 RichTextBoxのすべての追加機能を必要としなかったので、それは私にとって完璧に機能しました。

<ScrollViewer Width="200"
              Height="100"
              HorizontalScrollBarVisibility="Auto"
              VerticalScrollBarVisibility="Auto">
                  <TextBlock TextWrapping="NoWrap">
                      <TextBlock.Text>
                          Very long text Very long text Very long text 
                      </TextBlock.Text>
                  </TextBlock>
</ScrollViewer>
0
TGasdf