ContentPresenterというクラスがあります。
軽くWPFをいじってる範囲では、目に見えてこないとは思うけど、実はすんごいお世話になってる縁の下の力持ち。
MSDNから言葉をお借りすると「ContentControlのコンテンツを表示します」と説明されてる。
つまり
var b = new Button();
b.Content = "Hello world";
のようなContentプロパティに値を設定してHello worldを画面に表示する際に仕事を請け負ってくれてるということになります。
下のようにContentPresenterを直接使って画面にデータを表示することも出来ます。
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
var cp = new ContentPresenter();
cp.Content = "こんにちは世界";
this.Content = cp;
}
}
さて、ContentPresenterが画面にデータを表示するときにどういった手順を踏んでいるかというと、以下のような感じになってるみたい。
でも、下のは個人的にあんまりお世話になることがないと感じてるものは消してあるので正確なものではないです。
- UIElementならそのまま表示
- ContentTemplateがあれば、それを使ってUIElementを作って表示
- ContentTemplateSelectorが設定されてれば、それを使ってContentTemplateを取得してUIElementを作って表示
- Contentのデータ型にDataTemplateがある場合は、それを使ってUIElementを作って表示
- ToStringの結果をTextBlockのTextプロパティに入れて表示
というわけで、Contentプロパティで何かを表示する際にお世話になるContentPresenterでした。