如何检查文本框中的最后一行是否只有一个单词?

Mat*_*nda 5 c# string wpf

在下面的代码中,我将字符串分配给文本框.文本框文本被包装,因此如果单词不能放在同一行中,则单词将移动到下一行.

C#:

textbox.Text = "Norma went to bed. It was eleven o'clock. She turned out the light. She lay in bed. It was dark. It was quiet. She couldn't sleep. She closed her eyes.";
Run Code Online (Sandbox Code Playgroud)

XAML:

<TextBox
    SelectionBrush="#FF54FF50"
    x:Name="textbox" 
    Margin="10,53,0,0" 
    FontSize="24" 
    HorizontalAlignment="Left"
    Width="341" 
    Height="285" 
    VerticalAlignment="Top" 
    TextChanged="Textbox_TextChanged"
    IsReadOnly="True" 
    CaretBrush="Black" 
    BorderBrush="Black" 
    Foreground="Black" 
    FontWeight="Bold" 
    Grid.ColumnSpan="2" 
    Padding="0,5,0,0" 
    HorizontalContentAlignment="Center"  
    VerticalContentAlignment="Center" 
    VerticalScrollBarVisibility="Auto" 
    TextWrapping="Wrap" />
Run Code Online (Sandbox Code Playgroud)

现在,通过上面的例子,可能会发生在文本框的最后一行,单词"Eyes"是由于包装而唯一的单词.如果最后一行只有一个单词,我想减小字体大小,以便最后一行至少有两个单词.

所以,简而言之,最后一行不应该只有一个单词.它可能有两个或更多的单词.

示例:(错误)

Norma went to bed. It was
eleven o'clock. She turned 
out the light. She lay in 
bed. It was dark. It was 
quiet. She couldn't 
sleep. She closed her 
eyes.
Run Code Online (Sandbox Code Playgroud)

示例:(右)

Norma went to bed. It was
eleven o'clock. She turned 
out the light. She lay in 
bed. It was dark. It was 
quiet. She couldn't 
sleep. She closed her eyes.
Run Code Online (Sandbox Code Playgroud)

我不是问如何增加/减少字体以及在什么基础上应该计算新的字体大小.这是我需要弄清楚的另一个问题.但问题的第一步是找出最后一行中是否有一个单词.

如何检查文本框中的最后一行是否只有一个单词?

Raz*_*col 9

您可以使用LineCount属性和GetLineText方法查找文本的最后一行,然后检查其中是否包含空格(或任何其他所需的分隔符).


C.E*_*uis 6

也许一个简单的解决方案是在最后一个单词之间添加一个不间断的空格,即:

"...She closed her\u00a0eyes."
Run Code Online (Sandbox Code Playgroud)