C#/WPF:禁用RichTextBox的文本换行

C#/WPF:禁用RichTextBox的文本换行,c#,wpf,richtextbox,word-wrap,C#,Wpf,Richtextbox,Word Wrap,有人知道如何禁用RichTextBox的文本包装吗? 例如,如果我有一个不适合窗口的大字符串,则RichTextBox会将字符串中无法显示的部分放置在新行中。我想禁用它(并且仅通过使用滚动条使其可见) 非常感谢 干杯WPF中的A只是A的编辑。 根据: 文本始终包装在RichTextBox中。如果 您不希望文本先换行,然后再设置 这辆车正在行驶中 要大于宽度 RichTextBox。然而,一旦页面 达到宽度时,文本仍换行 因此,虽然无法明确禁用RichTextBox的换行,但可以执行以下操作: r

有人知道如何禁用
RichTextBox
的文本包装吗? 例如,如果我有一个不适合窗口的大字符串,则
RichTextBox
会将字符串中无法显示的部分放置在新行中。我想禁用它(并且仅通过使用
滚动条
使其可见)

非常感谢

干杯

WPF中的A只是A的编辑。
根据:

文本始终包装在RichTextBox中。如果 您不希望文本先换行,然后再设置 这辆车正在行驶中 要大于宽度 RichTextBox。然而,一旦页面 达到宽度时,文本仍换行

因此,虽然无法明确禁用
RichTextBox
的换行,但可以执行以下操作:

richTextBox1.HorizontalScrollBarVisibility = ScrollBarVisibility.Visible;
richTextBox1.Document.PageWidth = 1000;
这将具有基本相同的预期效果,直到您的行超过
页面宽度


注意(截至2015年7月):VS2015 RC允许
wordwrap=false
完全按照OP的要求工作。我相信早期版本的Visual Studio也会这样做。

我还需要显示一个大字符串,并尝试了RichTextBox,但我不喜欢将文档的PageWidth设置为固定大小的解决方案。滚动条将一直可见,滚动区域非常大

如果文本块足够,您可以使用它,并将其放置在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>

非常长的文本非常长的文本非常长的文本

如果不想显示水平滚动条,请在ScrollViewer上强制执行MinWidth:

<RichTextBox ScrollViewer.HorizontalScrollBarVisibility="Hidden">

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

</RichTextBox>

由于没有让我满意的答案,以下是我的解决方案:

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;
}
private void RichTxt\u TextChanged(对象发送者,textchangedventargs e)
{
string text=新的文本范围(richTxt.Document.ContentStart,richTxt.Document.ContentEnd);
FormattedText ft=新的FormattedText(文本,System.Globalization.CultureInfo.CurrentCulture,FlowDirection.LeftToRight,新字体(richTxt.FontFamily,richTxt.FontStyle,richTxt.FontWeight,richTxt.FontStretch),richTxt.FontSize,Bruss.Black);
richTxt.Document.PageWidth=英尺宽度+12;
richTxt.HorizontalScrollBarVisibility=(richTxt.Width

问题在于性能取决于文本长度和刷新频率。

垂直滚动条:

VerticalScrollBarVisibility=“Auto”MaxHeight=“200”

水平滚动条:


HorizontalScrollBarVisibility=“Auto”MaxWidth=“400”

适合我的解决方案。这个想法是从 我用XAML定义

            <RichTextBox x:Name="PART_rtb" VerticalAlignment="Stretch" ScrollViewer.HorizontalScrollBarVisibility="Auto" TextChanged="MyRichTextBox_OnTextChanged">
                <RichTextBox.Document>
                    <FlowDocument x:Name="PART_fd"  >
                        <FlowDocument.Resources>
                            <!--This style is used to set the margins for all paragraphs in the FlowDocument to 0.-->
                            <Style TargetType="{x:Type Paragraph}">
                                <Setter Property="Margin" Value="3"/>

                            </Style>
                        </FlowDocument.Resources>
                    </FlowDocument>
                </RichTextBox.Document>
            </RichTextBox>

我不喜欢这个解决方案,因为这样水平的Scroolbar就会一直可见……如果您能够在检测到(不知何故)需要包装时设置它(例如,检查每个“运行”[段落]宽度或其他内容),并在不需要时将其关闭(监控文本更改以每次检查,尽管速度可能很慢),那就太好了您可以设置
richTextBox1.HorizontalScrollBarVisibility=ScrollBarVisibility.Auto
richTextBox1.HorizontalScrollBarVisibility=ScrollBarVisibility.Auto
不工作文本块不可编辑,而且我不认为它支持富人formatting@GeorgeBirbilisTextBlock不可编辑,但它支持使用嵌套格式标记的丰富格式。粗体、超链接等。
   private void MyRichTextBox_OnTextChanged(object sender, TextChangedEventArgs e)
    {
        double i  = PART_rtb.Document.GetFormattedText().WidthIncludingTrailingWhitespace + 20;
        (sender as RichTextBox).Document.PageWidth = i;
    }