Bezeichnung
Die .NET Multiplatform App UI (.NET MAUI) Label zeigt ein- und mehrzeiligen Text an. Text, der mit Label angezeigt wird, kann eingefärbt, mit Abständen versehen und mit Textdekorationen versehen werden.
Label definiert die folgenden Eigenschaften:
CharacterSpacing
, vom Typdouble
, legt den Abstand zwischen den Zeichen im angezeigten Text fest.FontAttributes
, vom TypFontAttributes
, bestimmt die Textformatvorlage.FontAutoScalingEnabled
, vom Typbool
, definiert, ob der Text Skalierungspräferenzen im Betriebssystem entspricht. Der Standardwert dieser Eigenschaft isttrue
.FontFamily
, vom Typstring
, definiert die Schriftartfamilie.FontSize
, vom Typdouble
, definiert den Schriftgrad.FormattedText
, vom TypFormattedString
, gibt die Darstellung von Text mit mehreren Darstellungsoptionen wie Schriftarten und Farben an.HorizontalTextAlignment
, vom Typ TextAlignment, definiert die horizontale Ausrichtung des angezeigten Textes.LineBreakMode
, vom TypLineBreakMode
, bestimmt, wie Text behandelt werden soll, wenn er nicht in eine Zeile passt.LineHeight
vom Typdouble
, gibt den Multiplikator an, der bei der Anzeige von Text auf die Standardzeilenhöhe anzuwenden ist.MaxLines
, vom Typint
, gibt die maximale Anzahl der Zeilen an, die im Label zulässig sind.Padding
, vom TypThickness
, bestimmt die Füllung des Etiketts.Text
, vom Typstring
, definiert den Text, der als Inhalt des Etiketts angezeigt wird.TextColor
, vom Typ Color, definiert die Farbe des angezeigten Texts.TextDecorations
vom TypTextDecorations
, definiert welche Textdekorationen (unterstrichen und durchgestrichen) angewendet werden können.TextTransform
, vom TypTextTransform
, gibt die Schreibweise des angezeigten Textes an.TextType
, vom TypTextType
, bestimmt, ob Label reinen Text oder HTML-Text anzeigen soll.VerticalTextAlignment
, vom Typ TextAlignment, legt die vertikale Ausrichtung des angezeigten Textes fest.
Diese Eigenschaften werden von BindableProperty-Objekten unterstützt, was bedeutet, dass sie Ziele von Datenbindungen sein können und formatiert werden können.
Für Informationen über die Angabe von Schriftarten auf einem Label, siehe Schriftarten.
Erstellen einer Bezeichnung
Im folgenden Beispiel wird gezeigt, wie ein Label erstellt wird.
<Label Text="Hello world" />
Der entsprechende C#-Code lautet:
Label label = new Label { Text = "Hello world" };
Festlegen von Farben
Beschriftungen können für die Verwendung einer bestimmten Textfarbe über die TextColor
Eigenschaft festgelegt werden.
Im folgenden Beispiel wird der Inhalt eines Label-Steuerelements festgelegt:
<Label TextColor="#77d065"
Text="This is a green label." />
Für weitere Informationen über Farben, siehe Farben.
Zeichenabstand
Zeichenabstände können auf Label-Objekte angewendet werden, indem die Eigenschaft CharacterSpacing
auf einen double
-Wert gesetzt wird:
<Label Text="Character spaced text"
CharacterSpacing="10" />
Dies hat zur Folge, dass die Zeichen im Text, der von der Label angezeigt wird, einen Abstand von CharacterSpacing
geräteunabhängigen Einheiten aufweisen.
Eine neue Position hinzufügen.
Es gibt zwei Haupttechniken, um Text in einem Label in eine neue Zeile zu zwingen, und zwar von XAML aus:
- Verwenden Sie das Unicode-Zeilenvorschubzeichen, das „ “ lautet.
- Geben Sie Ihren Text mit der Syntax Eigenschaftselement an.
Im folgenden Code wird ein Beispiel hierfür dargestellt:
<!-- Unicode line feed character -->
<Label Text="First line Second line" />
<!-- Property element syntax -->
<Label>
<Label.Text>
First line
Second line
</Label.Text>
</Label>
In C# kann Text in eine neue Zeile mit dem Zeichen „\n“ erzwungen werden:
Label label = new Label { Text = "First line\nSecond line" };
Steuern des Abschneidens und Umbruchs von Text
Textumbruch und -abschneidung können durch die Einstellung der Eigenschaft LineBreakMode
auf einen Wert der Enumeration LineBreakMode
gesteuert werden:
NoWrap
– bricht den Text nicht um und zeigt nur so viel Text an, wie in eine Zeile passt. Dies ist der Standardwert der EigenschaftLineBreakMode
.WordWrap
– bricht Text an der Wortgrenze um.CharacterWrap
– bricht Text an einer Zeichengrenze in eine neue Zeile um.HeadTruncation
– schneidet den Kopf des Textes ab und zeigt das Ende an.MiddleTruncation
– zeigt den Anfang und das Ende des Texts an, wobei die Mitte durch eine Auslassungspunkte ersetzt wird.TailTruncation
– zeigt den Anfang des Texts an, wobei das Ende abgeschnitten wird.
Anzeigen einer bestimmten Anzahl von Zeilen
Die Anzahl der Zeilen, die von einer Label angezeigt werden, kann durch Festlegen der MaxLines
-Eigenschaft auf einen int
-Wert angegeben werden:
- Wenn
MaxLines
den Standardwert -1 hat, berücksichtigt Label den Wert der EigenschaftLineBreakMode
, um entweder nur eine Zeile, möglicherweise abgeschnitten, oder alle Zeilen mit dem gesamten Text anzuzeigen. - Wenn
MaxLines
gleich 0 ist, wird Label nicht angezeigt. - Wenn
MaxLines
gleich 1 ist, ist das Ergebnis identisch mit der Einstellung der EigenschaftLineBreakMode
aufNoWrap
,HeadTruncation
,MiddleTruncation
oderTailTruncation
. Die Label berücksichtigt jedoch den Wert derLineBreakMode
-Eigenschaft im Hinblick auf die Platzierung einer Ellipse, falls zutreffend. - Wenn
MaxLines
größer als 1 ist, wird Label bis zur angegebenen Zeilenzahl angezeigt, wobei der Wert der EigenschaftLineBreakMode
in Bezug auf die Platzierung einer Ellipse, falls zutreffend, beachtet wird. Die Einstellung der EigenschaftMaxLines
auf einen Wert größer als 1 hat jedoch keine Auswirkungen, wenn die EigenschaftLineBreakMode
aufNoWrap
eingestellt ist.
Das folgende XAML-Beispiel veranschaulicht das Festlegen der Eigenschaft MaxLines
auf einem Label:
<Label Text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. In facilisis nulla eu felis fringilla vulputate. Nullam porta eleifend lacinia. Donec at iaculis tellus."
LineBreakMode="WordWrap"
MaxLines="2" />
Zeilenhöhe festlegen
Die vertikale Höhe eines Label kann angepasst werden, indem die Eigenschaft Label.LineHeight
auf einen double
-Wert gesetzt wird.
Hinweis
- Unter iOS ändert die
Label.LineHeight
-Eigenschaft die Zeilenhöhe von Text, der in eine einzelne Zeile passt, und Text, der in mehrere Zeilen umgebrochen wird. - Unter Android ändert die
Label.LineHeight
-Eigenschaft nur die Zeilenhöhe von Text, der in mehrere Zeilen umgebrochen wird. - Unter Windows ändert die
Label.LineHeight
-Eigenschaft die Zeilenhöhe von Text, der in mehrere Zeilen umgebrochen wird.
Das folgende Beispiel zeigt, wie die Eigenschaft LineHeight
auf ein Label gesetzt wird:
<Label Text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. In facilisis nulla eu felis fringilla vulputate. Nullam porta eleifend lacinia. Donec at iaculis tellus."
LineBreakMode="WordWrap"
LineHeight="1.8" />
Der folgende Screenshot zeigt das Ergebnis der Einstellung der Eigenschaft Label.LineHeight
auf 1,8:
Anzeigen von HTML
Wichtig
Die Anzeige von HTML in einem Label ist auf die HTML-Tags beschränkt, die von der zugrunde liegenden Plattform unterstützt werden. Android unterstützt z. B. nur eine Teilmenge der HTML-Tags, die sich auf grundlegende Stile und Formatierungen für Elemente auf Blockebene wie <span>
und <p>
konzentrieren. Für komplexeres HTML-Rendering sollten Sie WebView oder FormattedText
verwenden.
Die Label-Klasse hat eine TextType
-Eigenschaft, die bestimmt, ob das Label-Objekt reinen Text oder HTML-Text anzeigen soll. Diese Eigenschaft sollte auf eines der Members der Enumeration TextType
gesetzt werden:
Text
gibt an, dass Label reinen Text anzeigt, und ist der Standardwert der EigenschaftTextType
.Html
gibt an, dass der Label HTML-Text anzeigt.
Daher können Label-Objekte HTML anzeigen, indem die TextType
-Eigenschaft auf Html
und die Text
-Eigenschaft auf einen HTML-String gesetzt wird:
Label label = new Label
{
Text = "This is <span style=\"color:red;\"><strong>HTML</strong></span> text.",
TextType = TextType.Html
};
Im obigen Beispiel müssen die doppelten Anführungszeichen in der HTML-Datei mit dem Symbol \
maskiert werden.
In XAML können HTML-Zeichenfolgen unlesbar werden, weil die Symbole <
und >
zusätzlich escaped werden:
<Label Text="This is <span style="color:red"><strong>HTML</strong></span> text."
TextType="Html" />
Alternativ kann der HTML-Code zur besseren Lesbarkeit in einen CDATA
-Abschnitt eingefügt werden:
<Label TextType="Html">
<![CDATA[
<Label Text="This is <span style="color:red"><strong>HTML</strong></span> text."
]]>
</Label>
In diesem Beispiel wird die Eigenschaft Text
auf die HTML-Zeichenkette gesetzt, die im Abschnitt CDATA
eingefügt ist. Dies funktioniert, da die Text
-Eigenschaft für ContentProperty
die Label-Klasse ist.
Schmücken von Text
Unterstrichene und durchgestrichene Textdekorationen können auf Label-Objekte angewendet werden, indem die TextDecorations
-Eigenschaft auf ein oder mehrere TextDecorations
-Enumerationselemente gesetzt wird:
None
Underline
Strikethrough
Das folgende Beispiel zeigt die Einstellung der Eigenschaft TextDecorations
:
<Label Text="This is underlined text." TextDecorations="Underline" />
<Label Text="This is text with strikethrough." TextDecorations="Strikethrough" />
<Label Text="This is underlined text with strikethrough." TextDecorations="Underline, Strikethrough" />
Der entsprechende C#-Code lautet:
Label underlineLabel = new Label { Text = "This is underlined text.", TextDecorations = TextDecorations.Underline };
Label strikethroughLabel = new Label { Text = "This is text with strikethrough.", TextDecorations = TextDecorations.Strikethrough };
Label bothLabel = new Label { Text = "This is underlined text with strikethrough.", TextDecorations = TextDecorations.Underline | TextDecorations.Strikethrough };
Der folgende Screenshot zeigt die TextDecorations
Enumerationselemente, die auf Label Instanzen angewendet werden:
Hinweis
Text-Dekorationen können auch auf Span-Instanzen angewendet werden. Weitere Informationen über die Klasse Span finden Sie unter Formatierten Text verwenden.
Transformieren von Text
Ein Label kann die Umhüllung seines in der Eigenschaft Text
gespeicherten Textes ändern, indem es die Eigenschaft TextTransform
auf einen Wert der Enumeration TextTransform
setzt. Diese Enumeration weist 4 Werte auf:
None
gibt an, dass der Text nicht transformiert wird.Default
gibt an, dass das plattformspezifische Standardverhalten verwendet wird. Dies ist der Standardwert der EigenschaftTextTransform
.Lowercase
gibt an, dass der Text in Kleinbuchstaben umgewandelt wird.Uppercase
gibt an, dass der Text in Großbuchstaben umgewandelt wird.
Das folgende Beispiel zeigt das Transformieren von Text in Großbuchstaben:
<Label Text="This text will be displayed in uppercase."
TextTransform="Uppercase" />
Formatierten Text verwenden
Label stellt eine FormattedText
-Eigenschaft zur Verfügung, die die Darstellung von Text mit mehreren Schriftarten und Farben in derselben Ansicht ermöglicht. Die FormattedText
-Eigenschaft ist vom Typ FormattedString
, der eine oder mehrere Span-Instanzen umfasst, die über die Spans
-Eigenschaft eingestellt werden.
Hinweis
Es ist nicht möglich, HTML in einem Span anzuzeigen.
Span definiert die folgenden Eigenschaften:
BackgroundColor
, vom Typ Color, der die Farbe des Hintergrunds der Spanne darstellt.CharacterSpacing
, vom Typdouble
, legt den Abstand zwischen den Zeichen im angezeigten Text fest.FontAttributes
, vom TypFontAttributes
, bestimmt die Textformatvorlage.FontAutoScalingEnabled
, vom Typbool
, definiert, ob der Text Skalierungspräferenzen im Betriebssystem entspricht. Der Standardwert dieser Eigenschaft isttrue
.FontFamily
, vom Typstring
, definiert die Schriftartfamilie.FontSize
, vom Typdouble
, definiert den Schriftgrad.LineHeight
vom Typdouble
, gibt den Multiplikator an, der bei der Anzeige von Text auf die Standardzeilenhöhe anzuwenden ist.Style
, vom Typ Style, das die Formatvorlage ist, die auf die Spanne angewendet werden soll.Text
, vom Typstring
, definiert den Text, der als Inhalt von Span angezeigt wird.TextColor
, vom Typ Color, definiert die Farbe des angezeigten Texts.TextDecorations
vom TypTextDecorations
, definiert welche Textdekorationen (unterstrichen und durchgestrichen) angewendet werden können.TextTransform
, vom TypTextTransform
, gibt die Schreibweise des angezeigten Textes an.
Diese Eigenschaften werden von BindableProperty-Objekten unterstützt, was bedeutet, dass sie Ziele von Datenbindungen sein können und formatiert werden können.
Hinweis
Die Eigenschaft Span.LineHeight
hat unter Windows keine Wirkung.
Darüber hinaus kann die Eigenschaft GestureRecognizers
verwendet werden, um eine Sammlung von Gestenerkennungen zu definieren, die auf Gesten auf dem Span reagieren.
Im folgenden XAML-Beispiel wird eine FormattedText
-Eigenschaft veranschaulicht, die aus drei Span-Instanzen besteht:
<Label LineBreakMode="WordWrap">
<Label.FormattedText>
<FormattedString>
<Span Text="Red Bold, " TextColor="Red" FontAttributes="Bold" />
<Span Text="default, " FontSize="14">
<Span.GestureRecognizers>
<TapGestureRecognizer Command="{Binding TapCommand}" />
</Span.GestureRecognizers>
</Span>
<Span Text="italic small." FontAttributes="Italic" FontSize="12" />
</FormattedString>
</Label.FormattedText>
</Label>
Der entsprechende C#-Code lautet:
FormattedString formattedString = new FormattedString ();
formattedString.Spans.Add (new Span { Text = "Red bold, ", TextColor = Colors.Red, FontAttributes = FontAttributes.Bold });
Span span = new Span { Text = "default, " };
span.GestureRecognizers.Add(new TapGestureRecognizer { Command = new Command(async () => await DisplayAlert("Tapped", "This is a tapped Span.", "OK")) });
formattedString.Spans.Add(span);
formattedString.Spans.Add (new Span { Text = "italic small.", FontAttributes = FontAttributes.Italic, FontSize = 14 });
Label label = new Label { FormattedText = formattedString };
Der folgende Screenshot zeigt die resultierende Label, die 3 Span-Objekte enthält:
Ein Span kann auch auf alle Gesten reagieren, die der GestureRecognizers
-Sammlung des Bereichs hinzugefügt werden. Beispielsweise wurde der zweiten Span in den obigen Beispielen eine TapGestureRecognizer hinzugefügt. Wenn dieses Span angetippt wird, reagiert das TapGestureRecognizer mit der Ausführung des ICommand, das durch die Eigenschaft Command
definiert ist. Weitere Informationen zur Erkennung von Tippgesten finden Sie unter Erkennen einer Tippgeste.
Erstellen eines Links
Der von den Instanzen Label und Span angezeigte Text kann mit der folgenden Methode in Hyperlinks umgewandelt werden:
- Stellen Sie die Eigenschaften
TextColor
undTextDecoration
des Label oder Span ein. - Fügen Sie der
GestureRecognizers
-Sammlung von Label oder Span ein TapGestureRecognizer hinzu, dessenCommand
-Eigenschaft an ein ICommand gebunden ist und dessenCommandParameter
-Eigenschaft die zu öffnende URL enthält. - Definieren Sie die ICommand, die von der TapGestureRecognizer ausgeführt wird.
- Schreiben Sie den Code, der von der ICommand ausgeführt werden soll.
Das folgende Beispiel zeigt ein Label, dessen Inhalt aus mehreren Span-Objekten zusammengesetzt ist:
<Label>
<Label.FormattedText>
<FormattedString>
<Span Text="Alternatively, click " />
<Span Text="here"
TextColor="Blue"
TextDecorations="Underline">
<Span.GestureRecognizers>
<TapGestureRecognizer Command="{Binding TapCommand}"
CommandParameter="https://learn.microsoft.com/dotnet/maui/" />
</Span.GestureRecognizers>
</Span>
<Span Text=" to view .NET MAUI documentation." />
</FormattedString>
</Label.FormattedText>
</Label>
In diesem Beispiel enthalten die erste und dritte Span-Instanz Text, während die zweite Span-Instanz einen antippbaren Hyperlink darstellt. Es hat seine Textfarbe auf Blau festgelegt und hat eine Unterstreichungstext-Dekoration. Dadurch wird die Darstellung eines Links erstellt, wie im folgenden Screenshot gezeigt:
Wenn der Hyperlink angetippt wird, reagiert das TapGestureRecognizer mit der Ausführung des ICommand, das durch seine Command
-Eigenschaft definiert ist. Darüber hinaus wird die durch die Eigenschaft CommandParameter
angegebene URL als Parameter an ICommand übergeben.
Der Code-Behind für die XAML-Seite enthält die TapCommand
-Implementierung:
using System.Windows.Input;
public partial class MainPage : ContentPage
{
// Launcher.OpenAsync is provided by Essentials.
public ICommand TapCommand => new Command<string>(async (url) => await Launcher.OpenAsync(url));
public MainPage()
{
InitializeComponent();
BindingContext = this;
}
}
Die TapCommand
führt die Launcher.OpenAsync
-Methode aus und übergibt den TapGestureRecognizer.CommandParameter
-Eigenschaftswert als Parameter. Die Launcher.OpenAsync
-Methode öffnet die URL in einem Webbrowser. Der Gesamteffekt besteht daher darin, dass beim Tippen auf den Link auf der Seite ein Webbrowser angezeigt wird und zu der dem Link zugeordneten URL navigiert wird.
Erstellen einer wiederverwendbaren Hyperlinkklasse
Der vorherige Ansatz zum Erstellen eines Links erfordert jedes Mal, wenn Sie einen Link in Ihrer App benötigen, wiederholten Code zu schreiben. Die Klassen Label und Span können jedoch in Unterklassen unterteilt werden, um die Klassen HyperlinkLabel
und HyperlinkSpan
zu erstellen, zu denen der Code für die Gestenerkennung und die Textformatierung hinzugefügt wird.
Im folgenden Beispiel wird die HyperlinkSpan
-Klasse gezeigt.
public class HyperlinkSpan : Span
{
public static readonly BindableProperty UrlProperty =
BindableProperty.Create(nameof(Url), typeof(string), typeof(HyperlinkSpan), null);
public string Url
{
get { return (string)GetValue(UrlProperty); }
set { SetValue(UrlProperty, value); }
}
public HyperlinkSpan()
{
TextDecorations = TextDecorations.Underline;
TextColor = Colors.Blue;
GestureRecognizers.Add(new TapGestureRecognizer
{
// Launcher.OpenAsync is provided by Essentials.
Command = new Command(async () => await Launcher.OpenAsync(Url))
});
}
}
Die HyperlinkSpan
-Klasse definiert eine Url
-Eigenschaft und ein zugehöriges BindableProperty, und der Konstruktor legt das Aussehen des Hyperlinks und das TapGestureRecognizer fest, das reagiert, wenn der Hyperlink angetippt wird. Wenn ein HyperlinkSpan
angetippt wird, reagiert das TapGestureRecognizer, indem es die Launcher.OpenAsync
-Methode ausführt, um die durch die Url
-Eigenschaft angegebene URL in einem Webbrowser zu öffnen.
Die Klasse HyperlinkSpan
kann verwendet werden, indem eine Instanz der Klasse zur XAML hinzugefügt wird:
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:HyperlinkDemo"
x:Class="HyperlinkDemo.MainPage">
<StackLayout>
...
<Label>
<Label.FormattedText>
<FormattedString>
<Span Text="Alternatively, click " />
<local:HyperlinkSpan Text="here"
Url="https://learn.microsoft.com/dotnet/" />
<Span Text=" to view .NET documentation." />
</FormattedString>
</Label.FormattedText>
</Label>
</StackLayout>
</ContentPage>