ユーザーコントロールを作成するのではなく、「ルックレス」コントロールを作成することをおすすめします。私は一般的に私の見た目のコントロールのための接着剤/コンテナとしてユーザーコントロールを使用します。無意味なコントロールの例はButtonクラスです。これにはデフォルトのスタイルが含まれており、ブレンドでは好みのスタイルを変更できます。ビジュアルステートマネージャーもサポートされているため、ステートの変化時にプレゼンテーションの表示方法を変更できます。ルックレスコントロールのコードビハインドは、ミニViewModelと考えることができます。ここではokでプレゼンテーション用のものとドメインクラスを混在させています。
この同じデザインに従うと、フェリーレスレスコントロールを作成できます。このコントロールには、独自の依存プロパティー(DPのOnChangeをリッスンする可能性があります)があります。
フェリーコントロールにObservableCollection DP( "Trucks")がある可能性があります。
次に、Themes \ generic.xamlに、フェリーコントロールのデフォルトスタイルを作成します。あなたのデフォルトスタイルは、ItemsSource = {TemplateBinding Trucks}を持つItemsControlを持つことができます。 ItemsControlパネルのテンプレートは、トラックを整理するための独自のカスタムパネルでも、キャンバスを使用することもできます。 ItemsControlに項目テンプレートでは、このような何かを持っているでしょう:
<DataTemplate>
<mynamespace:TruckControl/>
</DataTemplate>
あなたトラックコントロール、またそれ自身のデフォルトのスタイルを持つlookless制御すること、そしてそれはあなたが直接行うことができますので、すでに設定されたデータコンテキストのでしょう{バインディングパス= xyz}。トラックコントロールでCanvas.Left/Topを設定することもできます(過去のアイテムコントロールでキャンバスを使用するように選択した場合)。カスタムパネルを作成した場合はその位置を設定しないか、またはレンダリングトランスフォームを使用して正しいX、Yに配置します)。また、トラックのテンプレートのアイテムコントロールを使用して、フェリーコントロールでトラックをレンダリングしたのと同じ方法で車をレンダリングすることもできます。 VisualStateManagerの状態を作成して、完全にブレンドできるようにすることも可能です。したがって、トラックが「問題の状態」に入ると、ブレンドしてその状態を簡単にスタイルして、たとえば赤く点滅させることができます。
私は消化するのがとても好きだと知っていますが、最終的には、MVVMモデルをサポートしているすべてのスタイルコントロールがあなたの人生を1000000x容易にします。
私はマイクロソフトのシルバーライトのツールキットを調べて、無意味なコントロールなどを行う方法を理解することをお勧めします。 DatePicker(http://silverlight.codeplex.com/SourceControl/changeset/view/25992#)のような単純なコントロールを見てみましょう.1つの注意点は、DatePicker.xamlファイルを無視していることです(これはgeneric.xamlに置かれたもののミラーに過ぎず、削除しただけでは何も起こりません)。
あなたに細心の注意を払う必要があるものは、次のとおりです。
1)クラスの属性。これらはブレンドがあなたのコントロールに対処する方法を知っています。
2.)OnApplyTemplateオーバーライド。これは、テンプレートから特定の要素を引き出すことができる場所です。これらは「パーツ」と呼ばれ、ブレンドにパーツタブが表示されます。 #1の属性は、テンプレート内の「部品」の種類と、そのテンプレートの種類を定義できます。
3.)DefaultStyleKey = typeof(...)コンストラクタ内。これは、Silverlightにgeneric.xamlで使用する既定のテンプレートを指定します。
4. Themes \ generic.xamlを参照してください。これは、すべての既定のテンプレートを格納する特殊なハードコードされたファイルの場所です。 DatePickerスタイルを検索すると、あなたはそのアイデアを得るでしょう:)
幸運を祈る!
車、トラック、フェリー、セントアイブスには何人いるのですか? –
:)正直言って、私は嘘をついた。これは車のトラックやフェリーではありません。実際に視覚化しなければならないのは、あまりにも理解できないからです。 – bitbonk