Label

サンプルを参照します。 サンプルを参照する

.NET Multi-platform App UI (.NET MAUI) Label には、単一行および複数行のテキストが表示されます。 Label で表示されるテキストには、色、間隔、およびテキスト装飾を含めることができます。

Label には、次のプロパティが定義されています。

  • double 型の CharacterSpacing は、表示されるテキストの文字間の間隔を設定します。
  • FontAttributes 型の FontAttributes は、テキスト スタイルを決定します。
  • bool 型の FontAutoScalingEnabled は、テキストがオペレーティング システムで設定されたスケーリング設定を反映するかどうかを定義します。 このプロパティの既定値は true です。
  • string 型の FontFamily は、フォント ファミリを定義します。
  • double 型の FontSize は、フォント サイズを定義します。
  • FormattedString 型の FormattedText は、フォントや色などの複数のプレゼンテーション オプションを含むテキストのプレゼンテーションを指定します。
  • TextAlignment 型の HorizontalTextAlignment は、表示されるテキストの水平方向の配置を定義します。
  • LineBreakMode 型の LineBreakMode は、1 行に収まらない場合のテキストの処理方法を決定します。
  • double 型の LineHeight は、テキストを表示する際に既定の行の高さに適用する乗数を指定します。
  • int 型の MaxLines は、Label で許可される行の最大数を示します。
  • Thickness 型の Padding は、ラベルのパディングを決定します。
  • string 型の Text は、ラベルの内容として表示されるテキストを定義します。
  • Color 型の TextColor は、表示されるテキストの色を定義します。
  • TextDecorations 型の TextDecorations は、適用できるテキスト装飾 (下線や取り消し線) を指定します。
  • TextTransform 型の TextTransform は、表示されるテキストの大文字と小文字の区別を指定します。
  • TextType 型の TextType は、Label にプレーンテキストと HTML テキストのどちらを表示するかを決定します。
  • TextAlignment 型の VerticalTextAlignment は、表示されるテキストの垂直方向の配置を定義します。

これらのプロパティは、BindableProperty オブジェクトが基になっています。つまり、これらは、データ バインディングの対象にすることができ、スタイルを設定できます。

Label でのフォントの指定の詳細については、「フォント」を参照してください。

ラベルを作成する

次の例は、Label を作成する方法を示しています。

<Label Text="Hello world" />

同等の C# コードを次に示します。

Label label = new Label { Text = "Hello world" };

色を設定する

TextColor プロパティを使用して、テキストの特定の色を使用するようにラベルを設定できます。

次の例では、Label のテキストの色を設定しています。

<Label TextColor="#77d065"
       Text="This is a green label." />

色の詳細については、「」を参照してください。

文字間隔を設定する

CharacterSpacing プロパティの値を double に設定することで、Label オブジェクトに文字間隔を適用できます。

<Label Text="Character spaced text"
       CharacterSpacing="10" />

結果として、Label により表示されるテキスト内の文字は、デバイスに依存しない単位で CharacterSpacing の間隔が設定されます。

新しい行を追加する

XAML で Label のテキストを強制的に新しい行に配置するには、主に次の 2 つの手法があります。

  1. Unicode 改行文字 (" ") を使用します。
  2. プロパティ要素の構文を使用してテキストを指定します。

両方の手法の例を次のコードに示します。

<!-- Unicode line feed character -->
<Label Text="First line &#10; Second line" />

<!-- Property element syntax -->
<Label>
    <Label.Text>
        First line
        Second line
    </Label.Text>
</Label>

C# では、"\n" 文字を使用して、テキストを強制的に新しい行に配置できます。

Label label = new Label { Text = "First line\nSecond line" };

テキストの切り捨てと折り返しを制御する

テキストの折り返しと切り捨ては、LineBreakMode プロパティを LineBreakMode 列挙型の値に設定することで制御できます。

  • NoWrap: テキストは折り返されず、1 行に収まる量のテキストのみが表示されます。 これは、LineBreakMode プロパティの既定値です。
  • WordWrap: 単語の境界でテキストを折り返します。
  • CharacterWrap: 文字の境界で新しい行にテキストを折り返します。
  • HeadTruncation: テキストの先頭が切り捨てられ、末尾が表示されます。
  • MiddleTruncation: テキストの先頭と末尾を表示し、中央を省略記号で置き換えます。
  • TailTruncation: テキストの先頭を表示し、末尾を切り捨てます。

特定の行数を表示する

Label で表示される行数は、MaxLines プロパティを int 値に設定すれば指定できます。

  • MaxLines が既定値である -1 の場合は、Label は、LineBreakMode プロパティの値を考慮して、1 行のみ (おそらく切り捨てられたもの)表示するか、すべてのテキストを含むすべての行を表示します。
  • MaxLines が 0 の場合、Label は表示されません。
  • MaxLines が 1 の場合、結果は LineBreakMode プロパティを NoWrapHeadTruncationMiddleTruncation、または TailTruncation に設定した場合と同じになります。 ただし、Label では、該当する場合、省略記号の配置に関して LineBreakMode プロパティの値を考慮します。
  • MaxLines が 1 より大きい場合、Label では、該当する場合、省略記号の配置に関して LineBreakMode プロパティの値を考慮しながら、指定された行数まで表示します。 ただし、MaxLines プロパティを 1 より大きい値に設定しても、LineBreakMode プロパティが NoWrap に設定されている場合は効果がありません。

次の XAML の例では、LabelMaxLines プロパティを設定する方法を示しています。

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

行の高さを設定する

Label.LineHeight プロパティを double 値に設定すると、Label の垂直方向の高さをカスタマイズできます。

Note

  • iOS では、Label.LineHeight プロパティは、1 行に収まるテキストと、複数行に折り返されるテキストの行の高さを変更します。
  • Android では、Label.LineHeight プロパティは、複数行に折り返されるテキストの行の高さのみを変更します。
  • Windows では、Label.LineHeight プロパティは、複数行に折り返されるテキストの行の高さを変更します。

次の例は、LabelLineHeight プロパティを設定する方法を示しています。

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

次のスクリーンショットは、Label.LineHeight プロパティを 1.8 に設定した結果を示しています。

Label の行の高さの例を示すスクリーンショット。

HTML の表示

重要

Label で HTML を表示するのは、基盤となるプラットフォームでサポートされている HTML タグに限られます。 たとえば、Android では HTML タグのサブセットのみがサポートされており、<span><p> などのブロック レベル要素の基本的なスタイル設定と書式設定に重点が置かれています。 より複雑な HTML レンダリングを行うには、WebViewFormattedText の使用を検討してください。

Label クラスには TextType プロパティがあり、Label オブジェクトにプレーン テキストと HTML テキストのどちらを表示するかを決定します。 このプロパティは、TextType 列挙型メンバーのいずれかに設定する必要があります。

  • Text は、TextType プロパティの既定値であり、Label にプレーンテキストが表示されることを示します。
  • Html は、Label に HTML テキストが表示されることを示します。

そのため、Label オブジェクトは、TextType プロパティを HtmlText プロパティを HTML 文字列に設定することで HTML を表示できます。

Label label = new Label
{
    Text = "This is <span style=\"color:red;\"><strong>HTML</strong></span> text.",
    TextType = TextType.Html
};

上記の例では、\ 記号を使用して HTML 内の二重引用符文字をエスケープする必要があります。

XAML では、<> の記号がエスケープされるため、HTML 文字列が読み取れなくなる可能性があります。

<Label Text="This is &lt;span style=&quot;color:red&quot;&gt;&lt;strong&gt;HTML&lt;/strong&gt;&lt;/span&gt; text."
       TextType="Html"  />

あるいは、読みやすくするために、HTML を CDATA セクションにインライン化することもできます。

<Label TextType="Html">
    <![CDATA[
    <Label Text="This is &lt;span style=&quot;color:red&quot;&gt;&lt;strong&gt;HTML&lt;/strong&gt;&lt;/span&gt; text."
    ]]>
</Label>

この例では、Text プロパティは、CDATA セクションにインライン化された HTML 文字列に設定されています。 これは、Text プロパティが Label クラスの ContentProperty であるため機能します。

テキストを装飾する

TextDecorations プロパティを 1 つまたは複数の TextDecorations 列挙型要素に設定すると、下線と取り消し線のテキスト装飾を Label オブジェクトに適用できます。

  • None
  • Underline
  • Strikethrough

次の例は、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" />

同等の C# コードを次に示します。

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

次のスクリーンショットは、Label インスタンスに適用された TextDecorations 列挙型要素を示しています。

文字の装飾を含む Label のスクリーンショット。

Note

テキスト装飾も、Span インスタンスに適用できます。 Span クラスの詳細については、「書式設定されたテキストを使用する」を参照してください。

テキストの変換

Label では、TextTransform プロパティを TextTransform 列挙型の値に設定すると、Text プロパティに格納されているテキストの大文字と小文字を変換できます。 この列挙型には、次の 4 つの値があります。

  • None は、テキストが変換されないことを示します。
  • Default は、プラットフォームの既定の動作を使います。 これは、TextTransform プロパティの既定値です。
  • Lowercase は、テキストが小文字に変換されることを示します。
  • Uppercase は、テキストが大文字に変換されることを示します。

次の例は、テキストを大文字に変換する方法を示しています。

<Label Text="This text will be displayed in uppercase."
       TextTransform="Uppercase" />

書式設定されたテキストを使用する

Label は、同じビューで複数のフォントと色を持つテキストを表示できる FormattedText プロパティを公開します。 FormattedString 型の FormattedText プロパティは,,1 つまたは複数の Span インスタンスで構成され、Spans プロパティを介して設定されます。

Note

Span で HTML を表示することはできません。

Span には、次のプロパティが定義されています。

  • Color 型の BackgroundColor は、スパンの背景の色を表します。
  • double 型の CharacterSpacing は、表示されるテキストの文字間の間隔を設定します。
  • FontAttributes 型の FontAttributes は、テキスト スタイルを決定します。
  • bool 型の FontAutoScalingEnabled は、テキストがオペレーティング システムで設定されたスケーリング設定を反映するかどうかを定義します。 このプロパティの既定値は true です。
  • string 型の FontFamily は、フォント ファミリを定義します。
  • double 型の FontSize は、フォント サイズを定義します。
  • double 型の LineHeight は、テキストを表示する際に既定の行の高さに適用する乗数を指定します。
  • Style 型の Style は、スパンに適用するスタイルです。
  • string 型の Text は、Span のコンテンツとして表示されるテキストを定義します。
  • Color 型の TextColor は、表示されるテキストの色を定義します。
  • TextDecorations 型の TextDecorations は、適用できるテキスト装飾 (下線や取り消し線) を指定します。
  • TextTransform 型の TextTransform は、表示されるテキストの大文字と小文字の区別を指定します。

これらのプロパティは、BindableProperty オブジェクトが基になっています。つまり、これらは、データ バインディングの対象にすることができ、スタイルを設定できます。

Note

Windows の場合、Span.LineHeight プロパティには効果がありません。

さらに、GestureRecognizers プロパティを使用して、ジェスチャ認識エンジンのコレクションを定義できます。ジェスチャ認識エンジンは、Span でのジェスチャに反応します。

次の XAML の例は、FormattedText プロパティが 3 つの Span インスタンスで構成されていることを示しています。

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

同等の C# コードを次に示します。

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

次のスクリーンショットは、結果の Label に 3 つの Span オブジェクトが含まれていることを示しています。

3 つの Span で構成される Label のスクリーンショット。

Span は、スパンの GestureRecognizers コレクションに追加される、すべてのジェスチャに反応することもできます。 たとえば、上記の例では、2 番目の SpanTapGestureRecognizer が追加されています。 そのため、この Span をタップすると、TapGestureRecognizer は反応し、Command プロパティによって定義された ICommand を実行します。 タップ ジェスチャ認識の詳細については、「Recognize a tap gesture」を参照してください。

Label インスタンスと Span インスタンスで表示されるテキストは、次の方法でハイパーリンクに変換できます。

  1. Label または SpanTextColor プロパティと TextDecoration プロパティを設定します。
  2. Label または SpanGestureRecognizers コレクションに TapGestureRecognizer を追加します。ここでは、Command プロパティが ICommand にバインドされ、開こうとしている URL が CommandParameter プロパティに追加されます。
  3. TapGestureRecognizer によって実行される ICommand を定義します。
  4. ICommand によって実行されるコードを記述します。

次の例は、コンテンツが複数の Span オブジェクトで設定されている Label を示しています。

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

この例では、1 番目と 3 番目の Span インスタンスにはテキストが含まれているのに対して、2 番目の Span インスタンスはタップ可能なハイパーリンクを表しています。 テキストの色が青に設定され、下線テキスト装飾が施されています。 これにより、次のスクリーンショットに示すように、ハイパーリンクの外観が作成されます。

ハイパーリンクのスクリーンショット。

このハイパーリンクがタップされると、TapGestureRecognizer が応答して、Command プロパティで定義された ICommand を実行します。 さらに、CommandParameter プロパティで指定された URL がパラメーターとして ICommand に渡されます。

XAML ページの分離コードには、TapCommand 実装が含まれています。

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

TapCommandLauncher.OpenAsync メソッドを実行して、TapGestureRecognizer.CommandParameter プロパティの値をパラメーターとして渡します。 Launcher.OpenAsync メソッドは URL を Web ブラウザーで開きます。 したがって、全体的な結果としては、ページ上でハイパーリンクがタップされると、Web ブラウザーが表示され、ハイパーリンクに関連付けられている URL に移動します。

ハイパーリンクを作成するこれまでのアプローチでは、アプリにハイパーリンクが必要になるたびに、繰り返しコードを記述する必要があります。 一方、Label クラスと Span クラスの両方をサブクラス化して HyperlinkLabel クラスと HyperlinkSpan クラスを作成し、そこにジェスチャ認識エンジンとテキスト書式設定のコードを追加することができます。

次の例は HyperlinkSpan クラスを示しています。

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))
        });
    }
}

HyperlinkSpan クラスには Url プロパティのほか、関連する BindableProperty が定義されており、ハイパーリンクの外観と、ハイパーリンクがタップされたときに応答する TapGestureRecognizer をコンストラクターが設定します。 HyperlinkSpan がタップされると、TapGestureRecognizerLauncher.OpenAsync メソッドを実行して応答し、Url プロパティで指定された URL を Web ブラウザーで開きます。

HyperlinkSpan クラスを使用するには、クラスのインスタンスを XAML に追加します。

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