カスタムコントロールを開発・ビルドして配布したあとで、外観をカスタマイズしたいとそのカスタムコントロールの利用者から要望を受けることがよくあります。Parts&Statesモデルはカスタムコントロール開発者のベストプラクティスで、カスタムコントロールの利用者が外観をExpression Blendでカスタマイズできるようにするためのものです。このモデルはWPFのカスタムコントロールにもSilverlightのテンプレートコントロールにも使えます。
詳しいコードは「外観をカスタマイズできるコントロールの作成」を参照してください。またTech-Ed 2010 ブレイクアウトセッション「T7-404 Windows Presentation Foundation 4 ~ ControlTemplate と Parts & States モデルによるカスタム コントロールの作り方 ~」のストリーミングが公開されたらご覧ください。
ControlTemplateはControlクラスが提供するコントロールの外観と機能を分離する強力なプロパティです。Expression Blendを使えば、容易に画像や図形のような既存のビジュアルにボタンのようなコントロールの機能を与えることができます。
カスタムコントロールのUIをデザインするとき、コードの部分クラスとなるXAMLはありませんが、Themas\Generic.xamlにあるControlTemplateはBlendでデザインできます。リソースタブのGeneric.xamlに[リソースの編集]を使います。外観とUIのふるまいをコードで記述してはいけません。
こんな感じです。ここではpartsとして2つのボタン要素、statesとしてpositive状態とnegative状態を提供しています。
[TemplatePart(Name = "UpButtonElement", Type = typeof(RepeatButton))] [TemplatePart(Name = "DownButtonElement", Type = typeof(RepeatButton))] [TemplateVisualState(Name = "Positive", GroupName = "ValueStates")] [TemplateVisualState(Name = "Negative", GroupName = "ValueStates")]
するとBlendに以下のように状態とパーツが表示され、利用できます。
例えば、左がコントロールテンプレート(Generic.xaml)で、右が使用者がカスタマイズしたものです。