Standard Controls - TextBlock

 テキストを表示するためのコントロールです。 Text プロパティにテキストを直接指定したり、 System.Windows.Documents.Run クラスによるインラインレベルフローコンテンツ要素を指定したりすることでテキストを指定できます。

ページ内リンク

Text プロパティ

 もっとも基本的な使い方は次のように Text プロパティにテキストを直接指定する方法です。

<Window x:Class="WpfApplication2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="100" Width="200">
    <Grid>
        <TextBlock Text="サンプルテキスト" />
    </Grid>
</Window>
Code 1 : TextBlock の基本的な使い方
このように Text プロパティに表示させたいテキストを指定するだけで下図のように表示されます。
Fig.1 : シンプルにテキストだけ表示させる

テキストの配置とコントロールの配置

 ここで、一体どの領域が TextBlock コントロールなのでしょうか。わかりやすくするために背景色を付けてみます。

<Window x:Class="WpfApplication2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="100" Width="200">
    <Grid>
        <TextBlock Text="サンプルテキスト" Background="Yellow" />
    </Grid>
</Window>
Code 2 : Background プロパティでコントロールに背景色を付ける
Fig.2 : TextBlock コントロールに背景色が付いた結果
TextBlock コントロールが全体に伸びている様子がわかります。

 ここで、テキストを中央に描画させようとしたとき、2 つの方法が考えられます。 ひとつは TextBlock コントロールの中でテキストの位置をセンタリングする方法で、 もうひとつは TextBlock コントロール自体を Grid コントロールの中央に配置する方法です。

 TextBlock コントロールの中でテキストの位置をセンタリングするには、TextAlignment プロパティを使用します。

<TextBlock Text="サンプルテキスト" Background="Yellow" TextAlignment="Center" />
Code 3 : TextAlignment プロパティ
Fig.3 : TextAlignment プロパティによるセンタリング
TextBlock コントロール自体をセンタリングするには HorizontalAlignment プロパティを使用します。
<TextBlock Text="サンプルテキスト" Background="Yellow" HorizontalAlignment="Center" />
Code 4 : HorizontalAlignment プロパティ
Fig.4 : HorizontalAlignment プロパティによるセンタリング
HorizontalAlignment プロパティはコントロールの配置を変更するプロパティなので、 センタリングされた TextBlock コントロールはその幅が自動調整されていることが背景色でわかります。

 このように、水平方向は TextAlignment プロパティがありますが、 垂直方向の位置を変更する場合は VerticalAlignment プロパティで TextBlock コントロール自体の配置を変更しなければなりません。

複数行テキスト

 項目名などは 1 行でいいかもしれませんが、ちょっとした説明文などを表示する場合、テキストが複数行になる場合があります。 このようなときは、次のように Run および LineBreak というインラインレベルフローコンテンツ要素を使用します。

<Window x:Class="WpfApplication2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="150" Width="250">
    <Grid>
        <TextBlock>
            <Run Text="サンプルテキスト" />
            <LineBreak />
            <Run Text="&lt;LineBreak /&gt; で改行できます。" />
        </TextBlock>
    </Grid>
</Window>
Code 5 : LineBreak による改行
Fig. 5 : LineBreak によって改行されたテキスト
<TextBlock> 〜 </TextBlock> で挟むコンテンツは TextBlock コントロールの Inlines プロパティに指定されるようになっています。 これは、TextBlock の ContentPropertyAttribute に Inlines プロパティが指定されているためです。 Inlines プロパティには InlineCollection を指定する必要がありますが、 Collection の場合、その子要素を並べて記述できるという特徴があります。 したがって、上記のように <Run /> や <LineBreak /> を並べて書くことができます。

 LineBreak は意図した位置で改行させることができますが、 ウィンドウのサイズなどによって相対的に改行させたい場合は、TextWrapping プロパティを使用します。

<Window x:Class="WpfApplication2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="150" Width="250">
    <Grid>
        <TextBlock Text="これはとても長い文章を表現するためのサンプルテキストです。TextWrapping プロパティで自動的に改行させることができます。" TextWrapping="Wrap" />
    </Grid>
</Window>
Code 6 : TextWrapping プロパティ
Fig.6 : はみ出さないように改行される

Designed by CSS.Design Sample