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

时间:2009-09-02 14:30:41

标签: c# wpf richtextbox word-wrap

有谁知道如何禁用RichTextBox的文本换行? 例如。如果我有一个不适合窗口的大字符串,RichTextBox会放置一个无法显示新行的字符串部分。我想禁用它(并且仅使用Scrollbar使其可见。)

非常感谢。

干杯

6 个答案:

答案 0 :(得分:30)

WPF中的RichTextBox只是FlowDocument的编辑器 根据{{​​3}}:

  

文字始终包含在 RichTextBox 中。如果   你不希望文本换行然后设置   MSDN上的PageWidth   大于宽度   的 RichTextBox的即可。但是,一旦页面   宽度到达文本仍然包装。

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

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

除非您的行超过PageWidth,否则其效果基本相同。

注意(截至2015年7月):VS2015 RC允许wordwrap = false正如OP所希望的那样精确地工作。我相信早期版本的Visual Studio也可以。

答案 1 :(得分:1)

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

<RichTextBox ScrollViewer.HorizontalScrollBarVisibility="Hidden">

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

</RichTextBox>

答案 2 :(得分:0)

我还需要显示一个大字符串并尝试使用RichTextBox,但我不喜欢将Document的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>

答案 3 :(得分:0)

因为没有答案让我满意,所以这是我的解决方案:

SELECT a.Group_ID,min(Date) as Date
FROM
(SELECT *,
       lead(date,2) over(partition by group_id order by date) as lag_date2 
FROM #EVENT_COUNT) a
WHERE DATEDIFF(day,date,ISNULL(lag_date2,'01Jan2100'))<=180
GROUP BY a.Group_ID

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

答案 4 :(得分:0)

VerticalScrollBar:

VerticalScrollBarVisibility =“ Auto” MaxHeight =“ 200”

Horizo​​ntalScrollBar:

Horizo​​ntalScrollBarVisibility =“ Auto” MaxWidth =“ 400”

答案 5 :(得分:0)

对我来说合适的解决方案。这个想法来自 here. 我在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>

代码内

   private void MyRichTextBox_OnTextChanged(object sender, TextChangedEventArgs e)
    {
        double i  = PART_rtb.Document.GetFormattedText().WidthIncludingTrailingWhitespace + 20;
        (sender as RichTextBox).Document.PageWidth = i;
    }