web-dev-qa-db-ja.com

WPFを使用してテキストをラベルに折り返すにはどうすればよいですか。

TextBoxとラベルがあります。ボタンをクリックした後、次のコードを実行します。

 label1.Content = textbox1.Text; 

私の質問は、ラベルのテキスト折り返しを有効にするにはどうすればよいですか? 1行に表示するにはテキストが多すぎる可能性があります。その場合は、自動的に複数行に折り返します。

225
jeremychan

Labelコントロールは、WPFでのテキストの折り返しを直接サポートしていません。代わりに TextBlock を使用してください。 (もちろん、必要に応じて、TextBlockLabelコントロールの内側に配置することもできます。)

サンプルコード

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

Labelプロパティを使用したいので、TextBlockTargetに置き換えることはできません(キーボードを使用する場合はターゲットコントロールにフォーカスが設定されます)。すべてのLabelは実際にはTextBlockよりも優れています。

ただし、LabelはテキストをレンダリングするためにTextBlockを使用します(通常、文字列がContentプロパティに配置されている場合)。したがって、次のようにTextBlock内にLabelのスタイルを追加できます。

<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の機能性を保ちながらテキストをラップすることができるようになります。

101
PaulJ

私は以下のコードを使いました。

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

ラベルの内側にTextBlockを入れることができます。

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

ラベルコントロールでテキストを折り返すには、次のように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>
13
Rajesh R. Naik

Labelクラスを使う代わりに、 TextBlock を使うことをお勧めします。これにより、 TextWrapping を適切に設定できます。

あなたはいつでもできる:

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

ただし、この「ラベル」がすべてテキストを表示するためのものである場合は、代わりにTextBlockを使用してください。

10
Reed Copsey

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

MySqlデータベースからデータを取得するためにこれを使用しました:

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

これを使ってみる

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