如何使用WPF在标签中包装文本?

我有一个TextBox和一个标签。点击按钮后,执行以下代码:

 label1.Content = textbox1.Text;

我的问题是,我如何启用标签的文本包装?可能有太多的文本显示在一行上,如果是这种情况,我希望它自动换行到多行。

259561 次浏览

与其使用Label类,我建议使用TextBlock。这允许你适当地设置TextWrapping

你可以做:

 label1.Content = new TextBlock() { Text = textBox1.Text, TextWrapping = TextWrapping.Wrap };

但是,如果这个“标签”的目的是显示文本,则使用TextBlock

你可以把一个TextBlock内的标签:

<Label>
<TextBlock Text="Long Text . . . ." TextWrapping="Wrap" />
</Label>

Label控件在WPF中不直接支持文本换行。你应该使用TextBlock来代替。(当然,如果你愿意,你也可以将Label控件的TextBlock 内部放置。)

示例代码:

<TextBlock TextWrapping="WrapWithOverflow">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec adipiscing
nulla quis libero egestas lobortis. Duis blandit imperdiet ornare. Nulla
ac arcu ut purus placerat congue. Integer pretium fermentum gravida.
</TextBlock>

要在标签控件中包装文本,更改标签模板如下所示:

<Style x:Key="ErrorBoxStyle" TargetType="{x:Type Label}">
<Setter Property="BorderBrush" Value="#FFF08A73"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="Foreground" Value="Red"/>
<Setter Property="Background" Value="#FFFFE3DF"/>
<Setter Property="FontWeight" Value="Bold"/>
<Setter Property="Padding" Value="5"/>
<Setter Property="HorizontalContentAlignment" Value="Left"/>
<Setter Property="VerticalContentAlignment" Value="Top"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Label}">
<Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="true" CornerRadius="5" HorizontalAlignment="Stretch">
                     

<TextBlock TextWrapping="Wrap" Text="{TemplateBinding Content}"/>
</Border>
                    

</ControlTemplate>
</Setter.Value>
</Setter>
</Style>

通常你不能用TextBlock替换Label,因为你想要使用Target属性(当使用键盘时,例如下面示例代码中的ALT+C,它将焦点设置为有针对性的控件),因为这是Label相对于TextBlock真正提供的所有内容。

然而,Label使用TextBlock来呈现文本(如果字符串被放置在Content属性中,通常是这样);因此,你可以在Label中添加TextBlock的样式,如下所示:

<Label
Content="_Content Text:"
Target="{Binding ElementName=MyTargetControl}">
<Label.Resources>
<Style TargetType="TextBlock">
<Setter Property="TextWrapping" Value="Wrap" />
</Style>
</Label.Resources>
</Label>
<CheckBox x:Name = "MyTargetControl" />

通过这种方式,你可以保持Label的功能,同时也能够对文本进行换行。

我使用了以下代码。

    <Label>
<Label.Content>
<AccessText TextWrapping="Wrap" Text="xxxxx"/>
</Label.Content>
</Label>

试试这个

lblresult.Content = lblresult.Content + "prime are :" + j + "\n";

我们需要放一些控件,可以包装文本,如textblock/textbox

 <Label Width="120" Height="100" >
<TextBlock TextWrapping="Wrap">
this is a very long text inside a textblock and this needs to be on multiline.
</TextBlock>
</Label>
 <Label x:Name="datetimeofmsg"
HorizontalAlignment="Left" Margin="4.286,55,0,0"
VerticalAlignment="Top" Background="{x:Null}"
FontWeight="Bold" Width="61.714" Height="20" Foreground="White">
<Label.Content>
<AccessText TextWrapping="Wrap"/>
</Label.Content>
</Label>

我用这个从MySql数据库中检索数据:

AccessText a = new AccessText();
a.Text=reader[1].ToString();       // MySql reader
a.Width = 70;
a.TextWrapping = TextWrapping.WrapWithOverflow;
labels[i].Content = a;