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;
}