首页 文章

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

提问于
浏览
213

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

label1.Content = textbox1.Text;

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

10 回答

  • 29

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

    通常你不能用 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 的功能,同时还可以包装文本 .

  • 2

    我使用了以下代码 .

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

    您可以在标签内放置一个TextBlock:

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

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

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

    我建议使用TextBlock,而不是使用Label类 . 这允许您适当地设置TextWrapping .

    你可以随时做:

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

    但是,如果所有这些"label"用于显示文本,请改用 TextBlock .

  • 98

    我们需要设置一些可以包装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>
    
  • 77

    试试这个

    lblresult.Content = lblresult.Content + "prime are :" + j + "\n";
    
  • 10
    <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>
    
  • 1

    我使用它从MySql数据库中检索数据:

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

相关问题