richtext框的宽度是固定的。而且我不想显示水平滚动。我想通过正确的单词包装来修复richtextbox中的内容。
我有一个包含3行的richtext框。 textwrapping设置为“Wrap” 但文字包含如下:
Amazing grace how sweet the sou
nd
That saved a wretch lik
e me
I once was lost but now found
但我想如何包装它是:
Amazing grace how sweet the
sound
That saved a wretch
like me
I once was lost but now found
我如何实现这一目标?我需要它将文本包装在多行上,而不是试图阻止单词分裂。
已编辑:这是XAML代码:
<RichTextBox FontSize="60" IsReadOnly="True" x:Name="rtbText" BorderThickness="0" Background="Transparent" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="0,0,0,0" />
在运行时(动态)
分配richtextbox的flowdocument添加代码和说明:
主窗口中有许多富文本框。我将所有流文档保存在一个数组中。 (主窗口:数组名称:fdsongs)
现在以另一种形式显示在Fullscreen中,我一次显示一个richtext框并从数组中分配流文档。 (全屏:数组fdsongs1是主窗口中fdsongs的副本)
在全屏richtext框中分配流文档之前,我更改了块的字体大小和文本对齐方式,然后将流文档分配给richtextbox。
Block[] b1 = fdsongs1[0].Blocks.ToArray();
foreach (Block b in b1)
{
b.TextAlignment = TextAlignment.Center;
b.FontSize = myCalcFontSize;
}
rtbText.Document = fdsongs1[0];
答案 0 :(得分:1)
试试这个
<RichTextBox>
<RichTextBox.Document>
<FlowDocument>
<Paragraph>
<TextBlock Foreground="Red" TextWrapping="Wrap" Text="Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."></TextBlock>
</Paragraph>
</FlowDocument>
</RichTextBox.Document>
</RichTextBox>
答案 1 :(得分:0)
您的RichTextBox应包含FlowDocument,文本将根据您的需要进行换行。
看看这个样本:
<Window x:Class="WpfApplication9.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<StackPanel Margin="0,0,331,0">
<RichTextBox AcceptsReturn="True">
<FlowDocument>
<Paragraph>Amazing grace how sweet the sound</Paragraph>
</FlowDocument>
</RichTextBox>
<RichTextBox AcceptsReturn="True">
<FlowDocument>
<Paragraph>That saved a wretch like me</Paragraph>
</FlowDocument>
</RichTextBox>
<RichTextBox AcceptsReturn="True">
<FlowDocument>
<Paragraph>I once was lost but now found</Paragraph>
</FlowDocument>
</RichTextBox>
</StackPanel>
</Grid>
它完全符合你的要求:
编辑: 以下是以编程方式执行此操作的方法。
TextBlock tb = new TextBlock();
tb.TextWrapping = TextWrapping.Wrap;
tb.Text = "This is a very long not so long text with multiple words";
Paragraph p = new Paragraph();
p.Inlines.Add(tb);
FlowDocument fd = new FlowDocument();
fd.Blocks.Add(p);
rtbTest.Document = fd;
答案 2 :(得分:0)
如果您想在 Wpf RichTextBox 中包装文本,您可以使用 RichTextBox 的 Document.PageWidth 属性。将大小设置为 RichTextBox 控件的实际宽度,并且文本行将被换行。我个人不会在设计时设置该值,而是订阅 SizeChanged 事件以确保随时获得正确的宽度。
MyRichTextBox.SizeChanged += (s, e) => MyRichTextBox.Document.PageWidth = MyRichTextBox.ActualWidth;
如果您启用了垂直滚动条,您可能希望减去滚动条的宽度,因此所有文本在 RichTextBox 中始终可见:
MyRichTextBox.SizeChanged += (s, e) => MyRichTextBox.Document.PageWidth = MyRichTextBox.ActualWidth - 30;