しっぽを追いかけて

ぐるぐるしながら考えています

Unity と猫の話題が中心   掲載内容は個人の私見であり、所属組織の見解ではありません

ユーザーコントロールとテンプレートコントロールの使い分け

ユーザーコントロールとテンプレートコントロール(WPF だとカスタムコントロール)の使い分けについて、すでにどこかの偉い人が解説しているだろうと思ったら意外と情報がありませんでした

大雑把に表現するとユーザーコントロールは既存のコントロールを組み合わせて作るコントロールで、テンプレートコントロールはその名の通りテンプレートによって見た目や動作を変更できるコントロールになるかと思います

自分の場合、アプリの中で複数箇所で同じようなコントロールの組み合わせで配置するようなものにユーザーコントロールを使います

例えば、下記のようなダイアログやフライアウト、アプリバーなどのポップアップ系に使うことが多いです

f:id:matatabi_ux:20140701222946p:plain

f:id:matatabi_ux:20140125140522p:plain

こういったポップアップ系の UI は、繰り返し複数の画面やタイミングで同じような内容のものが表示されることが多いのと、外部から見た目や動作を切り替えたくなることが少ないからです

逆に Button や TextBox のようななど外部から見た目や動作を入れ替えて再利用したり、派生コントロールでバリエーションを増やして使うようなものには DataTemplate や ControlTemplate が利用できるテンプレートコントロールを使うことが多いです

ユーザーコントロールでも(無理やり?)継承させて見た目を変えたりすることはできると思いますが、あんまり拡張性があるとは思えないのでそういう場合はテンプレートコントロール化してしまいます

とはいえ Windows ストアアプリの場合、あまりコンテンツ領域にコントロールを置かないことが多いので、標準コントロールのスタイルやテンプレートを変更するだけで済んでしまうことの方が多いような気がしますが;