読者です 読者をやめる 読者になる 読者になる

どこかのだれかへ

職業ゲームプログラマ。気になったニュースのピックアップや開発日記などを書いています。

Adornerを利用して、プレースホルダを表示する

プレースホルダって検索すると「(UIデザイン的に)プレースホルダは止めておけ」という記事があるけれど、それは気にせず実装してGithubにアップしたので紹介しておく。

GitHub - Tepp91/WPFSampleCollection
にPlaceholderサンプルを追加した。

プレースホルダはAdorner(MSDN:装飾の概要)を使用して実装している。 Adornerを利用することで、対象のコントロールにオーバーレイする形で描画することが可能だ。 MSDNのサンプルではOnRenderを利用しているが、今回はTextBlockを利用してプレースホルダを表示している。

実装して厄介だったのは、AdornerLayerの取得タイミングだ。

Adornerは直接対象コントロールに設定できず、対象コントロールのAdornerLayerに設定する仕組みとなっている。 今回はBehaivorで実装したので、最初はOnAttachメソッドのタイミングで生成しようとAdornerLayerを取得しようとしたが、このタイミングではnullが返ってきてしまった。

色々試して、最終的に対象コントロールのOnLoadメソッドのタイミングならうまく出来ることが分かったが、思わぬところで躓いてしまった。