WPF - TextBlock.Inlines
TextBlockに表示する文字列は、Text属性以外にInlinesに置くこともできます。Inlinesを使うと、文字列をいくつかの部分に分解して指定することができ、それぞれに色や装飾を付けられます。 もっとも簡単な例は、以下のようなものです。
<!-- Inlinesに置く書き方 --> <TextBlock> String to Show </TextBlock>
一見Text属性に文字列を指定したように見えますが、そうではありません。文字列の部分は、Xamlパーサーにより以下のように解釈されます。
<!-- 省略なしのInlines --> <TextBlock> <TextBlock.Inlines> <Run Text="String to Show"/> </TextBlock.Inlines> </TextBlock>
Run要素が部分的な文字列を指定します。後で説明するように、色や装飾をRun要素単位で指定できます。
文字列をRunに収めるか否かは割と自由に決められます。以下のように混ぜて書いても正しく解釈されます。
<!-- Runがあったりなかったり --> <TextBlock> <Run Text="String"/> to <Run Text="Show"/> </TextBlock>
このいい加減な書き方では、ソースコード上の改行は、空白1文字と解釈されます。ですから、このコードは、改行や行頭のタブ文字が無視されて、やはり「String to Show」を指定していることになります。
Inlinesに置ける要素
Inlines要素の中には、以下の要素を置くことができます。
要素名 | 働き |
---|---|
Run | 文字列とその装飾を指定する。 |
LineBreak | 改行する。 |
Span | いくつかの要素の装飾をまとめて指定する。 |
InlineUIContainer | 任意のコントロールを配置する。 |
Run
Runは、表示する文字列と装飾を指定します。
指定できる装飾と指定方法は、TextBlockとほぼ同じです。
装飾の種類 | 属性 |
---|---|
フォント | FontFamily, FontSize, FontStyle, FontWeight |
色 | Foreground, Background |
その他 | TextDecorations, TextEffects |
フォントと色の指定については、TextBlockの説明を見てください。TextDecorationsとTextEffectsは、別の記事で紹介する予定です。
<TextBlock> <Run Text="String" Foreground="Red"/> <LineBreak/> to show </TextBlock>
LineBreak
改行します。上図に例が出ています。
InlineUIContainer
任意のコントロールをTextBlock内に表示します。本当に何でも置けますが、TextBlockの役割を考えると、やむを得ない時にボタンなどを1個配置するなどに留めるべきでしょう。
<TextBlock Background="LightGray"> <Run Text="String to Show"/> <InlineUIContainer> <StackPanel Orientation="Vertical"> <Button Content="This is button"/> <Button Content="This is second button"/> </StackPanel> </InlineUIContainer> </TextBlock>
上記の例では、InlineUIContainer内にStackPanelを使って二つのボタンを配置しています。このような使い方をするには、相当な理由が必要と感じます。