ブロックは、アプリに読み取り専用テキストを表示するための主要なコントロールです。 これを使用すると、単一行または複数行のテキスト、インライン ハイパーリンク、書式 (太字、斜体、下線付きなど) が設定されたテキストを表示できます。
これは適切なコントロールですか?
テキスト ブロックは通常、使いやすく、リッチ テキスト ブロックよりも優れたテキスト レンダリング パフォーマンスを提供するため、ほとんどのアプリ UI テキストに適しています。 プロパティの値を取得することで、アプリ内のテキスト ブロックからテキストを簡単にaccessして使用できます。 また、テキストのレンダリング方法をカスタマイズするための同じ書式設定オプションも多数用意されています。
テキスト内に改行を配置することはできますが、テキスト ブロックは単一の段落を表示するために設計されており、テキストのインデントはサポートされていません。 複数の段落、複数列のテキスト、その他の複雑なテキスト レイアウト、画像などのインライン UI 要素をサポートする必要がある場合は、 RichTextBlock を使用します。
適切なテキスト コントロールの選択の詳細については、 コントロール 記事を参照してください。
テキスト ブロックを作成する
- 重要な API: クラスの、プロパティ 、プロパティ
WinUI 3 ギャラリー アプリを開き、動作中の を確認
WinUI 3 ギャラリー アイコン WinUI 3 ギャラリー アプリには、WinUI コントロールと機能の対話型の例が含まれています。 Microsoft Store からアプリを取得するか、GitHub でソース コードを参照します。
単純な コントロールを定義し、その プロパティを文字列に設定する方法を次に示します。
<TextBlock Text="Hello, world!" />
TextBlock textBlock1 = new TextBlock();
textBlock1.Text = "Hello, world!";
コンテンツ モデル
にコンテンツを追加するには、 と の 2 つのプロパティがあります。
テキストを表示する最も一般的な方法は、前の例に示すように、 プロパティを文字列値に設定することです。
次のように、 プロパティにインライン フロー コンテンツ要素を配置することで、コンテンツを追加することもできます。 ( は の既定のコンテンツ プロパティであるため、XAML で明示的に追加する必要はありません)。
<TextBlock>Text can be <Bold>bold</Bold>, <Underline>underlined</Underline>,
<Italic>italic</Italic>, or a <Bold><Italic>combination</Italic></Bold>.</TextBlock>
、、、、など、 クラスから派生した要素を使用すると、テキストのさまざまな部分に対して異なる書式設定を行えます。 詳細については、「 テキストの書式設定 」セクションを参照してください。 インライン Hyperlink 要素を使用すると、テキストにハイパーリンクを追加できます。 ただし、 を使用すると、高速パステキストレンダリングも無効になります。これについては、次のセクションで説明します。
パフォーマンスに関する考慮事項
可能な限り、XAML ではより効率的なコード パスを使用してテキストをレイアウトします。 この高速パスにより、全体的なメモリ使用量が減少し、テキストの測定と配置にかかるCPU処理時間が大幅に短縮されます。 この高速パスは にのみ適用されるため、RichTextBlock よりも可能な場合優先する必要があります。
一部の条件では、テキスト レンダリングのために、機能が豊富で CPU 負荷の高いコード パスにフォールバックする が必要です。 高速パスでテキストのレンダリングを維持するには、ここに記載されているプロパティを設定するときに、必ず次のガイドラインに従ってください。
- : 最も重要な条件は、XAML またはコード (前の例に示すように) プロパティを明示的に設定してテキストを設定した場合にのみ高速パスを使用することです。 の コレクション (など) を使用してテキストを設定すると、複数の形式が複雑になる可能性があるため、高速パスが無効になります。
- CharacterSpacing: 既定値の 0 のみが高速パスです。
- TextTrimming: 、、 の値のみが高速パスです。 値を指定すると、高速パスが無効になります。
デバッグ中に DebugSettings.IsTextPerformanceVisualizationEnabled プロパティを に設定して、テキストが高速パス レンダリングを使用しているかどうかを判断できます。 このプロパティを に設定すると、高速パスにあるテキストが明るい緑色で表示されます。
通常、デバッグ設定は、次のように、 の分離コード ページの メソッド オーバーライドで設定します。
protected override void OnLaunched(LaunchActivatedEventArgs e)
{
#if DEBUG
if (System.Diagnostics.Debugger.IsAttached)
{
this.DebugSettings.IsTextPerformanceVisualizationEnabled = true;
}
#endif
// ...
}
この例では、最初の は高速パスを使用してレンダリングされますが、2 つ目はレンダリングされません。
<StackPanel>
<TextBlock Text="This text is on the fast path."/>
<TextBlock>This text is NOT on the fast path.</TextBlock>
<StackPanel/>
IsTextPerformanceVisualizationEnabled を に設定してデバッグ モードでこの XAML を実行すると、結果は次のようになります。
デバッグ モードでレンダリング
注意事項
高速パス上にないテキストの色は変更されません。 アプリ内にテキストの色が明るい緑として指定されている場合、低速のレンダリング パスにある場合は明るい緑色で表示されます。 アプリで緑色に設定されているテキストと、デバッグ設定のために高速パス上にあるテキストと緑色を混同しないように注意してください。
テキストの書式設定
プロパティにはプレーン テキストが格納されますが、 コントロールにさまざまな書式設定オプションを適用して、アプリでのテキストのレンダリング方法をカスタマイズできます。 FontFamily、FontSize、FontStyle、Foreground、CharacterSpacing などの標準コントロール プロパティを設定して、テキストの外観を変更できます。 インライン テキスト要素と Typography 添付プロパティを使用して、テキストの書式設定を行うこともできます。 これらのオプションは、 がテキストをローカルに表示する方法にのみ影響するため、テキストをコピーしてリッチ テキスト コントロールに貼り付けると、書式設定は適用されません。
注
前のセクションで説明したように、インライン テキスト要素と既定以外の文字体裁の値は高速パスではレンダリングされないことに注意してください。
要素
Microsoft.UI.Xaml.Documents 名前空間には、、、、、など、テキストの書式設定に使用できるさまざまなインライン テキスト要素が用意されています。
各文字列の書式が異なる一連の文字列を に表示できます。 これを行うには、 要素を使用して各文字列を書式設定で表示し、各 要素を 要素で区切ります。
ここでは、で区切られた オブジェクトを使用して、 で異なる形式のテキスト文字列をいくつか定義する方法を示します。
<TextBlock FontFamily="Segoe UI" Width="400" Text="Sample text formatting runs">
<LineBreak/>
<Run Foreground="Gray" FontFamily="Segoe UI Light" FontSize="24">
Segoe UI Light 24
</Run>
<LineBreak/>
<Run Foreground="Teal" FontFamily="Georgia" FontSize="18" FontStyle="Italic">
Georgia Italic 18
</Run>
<LineBreak/>
<Run Foreground="Black" FontFamily="Arial" FontSize="14" FontWeight="Bold">
Arial Bold 14
</Run>
</TextBlock>
結果を次に示します。
はラン要素 で書式設定されています
Typography
Typography クラスの添付プロパティは、一連の Microsoft OpenType 文字体裁プロパティにaccessを提供します。 これらの添付プロパティは、または個々のインライン テキスト要素で設定できます。 これらの例では、両方を示します。
<TextBlock Text="Hello, world!"
Typography.Capitals="SmallCaps"
Typography.StylisticSet4="True"/>
TextBlock textBlock1 = new TextBlock();
textBlock1.Text = "Hello, world!";
Typography.SetCapitals(textBlock1, FontCapitals.SmallCaps);
Typography.SetStylisticSet4(textBlock1, true);
<TextBlock>12 x <Run Typography.Fraction="Slashed">1/3</Run> = 4.</TextBlock>
関連資料
- コントロール
- TextBox クラス
- PasswordBox クラス
- String.Length プロパティ
Windows developer