Как я могу обернуть текст на ярлыке с помощью WPF?
У меня есть TextBox
и ярлык. После нажатия кнопки, я выполняю следующий код:
label1.Content = textbox1.Text;
Мой вопрос в том, как включить текстовую упаковку метки? В одной строке может отображаться слишком много текста, и я хочу, чтобы он автоматически переносился на несколько строк, если это так.
Ответы
Ответ 1
Элемент 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>
Ответ 2
Часто вы не можете заменить Label
на TextBlock
так, как вы хотите использовать свойство Target
(которое фокусирует внимание на целевом элементе управления при использовании клавиатуры, например, ALT + C в примере кода ниже), так как все a 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
, а также возможность обертывания текста.
Ответ 3
Я использовал следующий код.
<Label>
<Label.Content>
<AccessText TextWrapping="Wrap" Text="xxxxx"/>
</Label.Content>
</Label>
Ответ 4
Вы можете поместить TextBlock внутри метки:
<Label>
<TextBlock Text="Long Text . . . ." TextWrapping="Wrap" />
</Label>
Ответ 5
Чтобы обернуть текст в элементе управления меткой, измените шаблон метки следующим образом:
<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>
Ответ 6
Вместо использования класса Label я бы рекомендовал использовать TextBlock. Это позволяет вам соответствующим образом установить TextWrapping.
Вы всегда можете сделать:
label1.Content = new TextBlock() { Text = textBox1.Text, TextWrapping = TextWrapping.Wrap };
Однако, если все эти "метки" предназначены для отображения текста, используйте вместо него TextBlock
.
Ответ 7
Нам нужно поставить какой-то элемент управления, который может обертывать текст, например 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>
Ответ 8
<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>
Ответ 9
попробуйте использовать
lblresult.Content = lblresult.Content + "prime are :" + j + "\n";