it-swarm.com.de

Wie kann ich mit WPF Text in ein Etikett einbinden?

Ich habe ein TextBox und ein Label. Nach einem Klick auf eine Schaltfläche führe ich den folgenden Code aus:

 label1.Content = textbox1.Text; 

Meine Frage ist, wie kann ich das Umbrechen des Etiketts aktivieren? Möglicherweise ist zu viel Text in einer Zeile vorhanden, und ich möchte, dass dieser automatisch in mehrere Zeilen umgebrochen wird, wenn dies der Fall ist.

232
jeremychan

Das Steuerelement Label unterstützt den Textumbruch in WPF nicht direkt. Sie sollten stattdessen ein TextBlock verwenden. (Natürlich können Sie das TextBlock innerhalb eines Label-Steuerelements platzieren, wenn Sie dies wünschen.)

Beispielcode:

<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>
358
Cody Gray

Häufig können Sie ein Label nicht durch ein TextBlock ersetzen, da Sie die Eigenschaft Target verwenden möchten (wodurch der Fokus bei der Verwendung auf das Steuerelement targeted gesetzt wird die Tastatur (z. B. ALT + C im folgenden Beispielcode), da dies alles ist, was ein Label wirklich über ein TextBlock anbietet.

Ein Label verwendet jedoch ein TextBlock, um Text zu rendern (wenn eine Zeichenfolge in der Eigenschaft Content platziert wird, was normalerweise der Fall ist). Daher können Sie in TextBlock einen Stil für Label wie folgt einfügen:

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

Auf diese Weise können Sie die Funktionalität eines Label beibehalten und gleichzeitig den Text umbrechen.

104
PaulJ

Ich habe den folgenden Code verwendet.

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

Sie können einen TextBlock in das Etikett einfügen:

<Label> 
  <TextBlock Text="Long Text . . . ." TextWrapping="Wrap" /> 
</Label> 
32
Adrian Fâciu

Ändern Sie zum Umbrechen von Text im Label-Steuerelement die Label-Vorlage wie folgt:

<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>
13
Rajesh R. Naik

Anstelle einer Label-Klasse würde ich die Verwendung eines TextBlock empfehlen. Auf diese Weise können Sie TextWrapping entsprechend einstellen.

Sie können immer tun:

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

Wenn dieses "Label" nur zum Anzeigen von Text dient, verwenden Sie stattdessen ein TextBlock.

10
Reed Copsey

Wir müssen eine Art Steuerelement setzen, das Text wie Textblock/Textbox umbrechen kann

 <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>
4
Kylo Ren
 <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>
2
Khalid

Ich habe dies verwendet, um Daten aus der MySQL-Datenbank abzurufen:

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

versuche dies zu benutzen

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