如何在RichTextBox中包装文本?

问题描述 投票:0回答:2

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的副本)

在全屏富文本框中分配流文档之前,我更改了块的字体大小和文本对齐方式,然后将流文档分配给richtextbox。

Block[] b1 = fdsongs1[0].Blocks.ToArray();

 foreach (Block b in b1)
 {
       b.TextAlignment = TextAlignment.Center;
b.FontSize = myCalcFontSize;

 }

 rtbText.Document = fdsongs1[0];
wpf richtextbox
2个回答
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>

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;
© www.soinside.com 2019 - 2024. All rights reserved.