ユーザー コントロールを作成するのではなく、「ルックレス」コントロールを作成することをお勧めします。通常、私はルックレス コントロールの接着剤/コンテナーとしてユーザー コントロールを使用します。Lookless コントロールの例は、Button クラスです。デフォルトのスタイルが含まれており、Blend ではスタイルを好きなように変更できます。また、ビジュアル ステート マネージャーもサポートしているため、状態が変化したときにプレゼンテーションがどのように見えるかを変更できます。ルックレス コントロールのコード ビハインドは、ミニ ViewModel と考えることができます。ここでは、いくつかのプレゼンテーションとドメイン クラスを混在させても問題ありません。
これと同じ設計に従うと、Ferry ルックレス コントロールを作成できます。このコントロールには、独自の依存関係プロパティのセットがあります (おそらく、DP の OnChange をリッスンします)。
Ferry コントロールには、「トラック」と呼ばれる ObservableCollection DP がある場合があります。
次に、Themes\generic.xaml で、Ferry コントロールの既定のスタイルを作成します。デフォルトのスタイルには、ItemsSource={TemplateBinding Trucks} の ItemsControl がある場合があります。ItemsControl パネル テンプレートは、トラックを配置するための独自のカスタム パネルにすることも、キャンバスを使用することもできます。ItemsControl 項目テンプレートの場合、次のようになります。
<DataTemplate>
<mynamespace:TruckControl/>
</DataTemplate>
トラック コントロールは、独自のデフォルト スタイルを持つルックレス コントロールでもあり、そのデータ コンテキストは既に設定されているため、{Binding Path=xyz} を直接実行できます。トラック コントロールは、Canvas.Left/Top (前の項目コントロールでキャンバスを使用することを選択した場合..またはカスタム パネルを作成した場合、その位置をまったく設定しない場合) またはレンダリングを設定することもできます。正しい X、Y に配置するように変換します。また、トラックのテンプレートで項目コントロールを使用して、フェリー コントロールでトラックをレンダリングしたのと同じ方法で車をレンダリングすることもできます。また、VisualStateManager の状態を作成して、Blend を完全にサポートできるようにすることもできます。したがって、トラックが「問題のある状態」になった場合、たとえば、その状態をブレンドで簡単にスタイリングして、赤く点滅させることができます。
消化するのは大変なことのように聞こえるかもしれませんが、MVVM モデルをサポートするすべてのスタイル設定可能なコントロールを持つことで、あなたの生活は 1000000 倍楽になります。
Microsoft の Silverlight ツールキットを調べて、ルックレス コントロールなどを行う方法を理解することをお勧めします。DatePicker ( http://silverlight.codeplex.com/SourceControl/changeset/view/25992# )のような単純なコントロールを見てみてください。1 つの注意点は、DatePicker.xaml ファイルを無視することです (これは、ジェネリックに入れられるものの単なるミラーです。 xaml を削除しただけでは何も問題はありません)。
細心の注意を払う必要があるのは、次のとおりです。
1.) クラスの属性。これらは、Blend がコントロールを処理する方法を知るのに役立ちます。
2.) OnApplyTemplate オーバーライド。ここで、テンプレートから特定の要素を引き出すことができます。これらは「パーツ」と呼ばれ、Blend にパーツ タブが表示されます。#1 の属性は、テンプレートに含まれる「パーツ」と、それらが期待されるタイプを定義できます。
3.) コンストラクターの DefaultStyleKey = typeof(...)。これにより、generic.xaml で使用する既定のテンプレートが Silverlight に通知されます。
4.) Themes\generic.xaml を見てください。これは、すべての既定のテンプレートを格納する特別なハードコードされたファイルの場所です。DatePicker スタイルを検索すると、アイデアが得られます:)
幸運を!