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

我有一个TextBox和一个标签。 点击一个button后,我执行下面的代码:

  label1.Content = textbox1.Text; 

我的问题是,如何启用标签的文字包装? 在一行中可能会显示太多的文本,如果是这种情况,我想让它自动换行。

Label控件不直接支持WPF中的文本换行。 您应该使用TextBlock 。 (当然,如果您愿意,您可以将TextBlock 放置Label控件中。)

示例代码:

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

通常你不能用TextBlock来代替Label ,因为你想要使用Target属性(在使用键盘时将焦点设置到目标控件上,例如下面的示例代码中的ALT + C),因为这是一个Label真正提供的TextBlock

但是, Label使用TextBlock来呈现文本(如果string放置在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的function,同时也可以包装文本。

我使用了下面的代码。

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

你可以在标签里放一个TextBlock:

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

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

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

我不推荐使用Label类,而是build议使用TextBlock 。 这使您可以适当地设置TextWrapping 。

你总是可以这样做:

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

但是,如果所有“标签”都是为了显示文本,请改用TextBlock

我们需要放置一些可以像文本块/文本框一样的文本控件

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

尝试使用这个

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