2011-10-23 10 views
2

Expression Blendを使用してSilverlightでComboBoxのスタイルを設定しようとしています。"ポップアップはコントロール部分です" - Silverlightのコントロール部分は何ですか?

  • ContentPresenterBorder
  • DisabledVisualElement
  • FocusVisualElement
  • Popup
  • 両方 ContentPresenterBorder

Popupは、子要素が含まれており、また、SMAを持っている:

ComboBoxのテンプレートは、4つの項目が含まれていますジグソーパズルのような緑色のダニのアイコンが表示されます。このアイコンにマウスオーバーすると、ツールチップが表示されます。

ポップアップはコントロール部分です。

これはどういう意味ですか?

答えて

5

このblog postはパーツを説明しますが、実際にはタイプと名前が事前定義された要素です。 FancyControlという新しいコントロールを作りたいとしましょう。私のコントロールの中には2つのスライダが必要ですが、何らかの理由で私のコントロールを可能にする最良の方法は、自分のコントロールのためにコードビハインドで作成されたSliderオブジェクトに直接アクセスすることです。

私はそれらに古い名前(つまり「左」と「右」)を付けてからを使用してFancyControl.OnApplyTemplateのインスタンスを見つけることができます。任意の名前を使用する際の問題は、誰かが私のコントロールを再調整したい場合です。Slidersが必要ですは、コントロールが動作するための名前が「左」と「右」である必要があります。

マイクロソフトでは、これらの要素の先頭にPART_の名前を付けるという規則を使用していました。だから、誰かが私のコントロールを変えると、Sliderは同じ名前(つまり、「PART_Left」と「PART_Right」)を持っている必要があります。

TemplatePartAttributeは、有効な部品名とその関連タイプを示すために使用できます。これは、Blendなどの設計者が名前付きパーツを適切に検出するために使用できます。

名前付き部分が欠落していても、機能が低下しないように(つまり、例外が発生しないように)コントロールを設計する必要があることにも言及する価値があります。

+0

素晴らしい答え - これは、なぜ、私がプレースで 'PART_'を付けているのかがわかる理由を説明しています。 –

+0

ComboBoxが正しく動作するためには、何らかの理由でComboBox内の 'parts'に 'Popup'と' DropDownToggle'という名前を付ける必要があると言われています。 –

+0

はい、ComboBoxクラスではGetTemplateChild(string controlname)を使用してこれらのコントロールを取得するためです。 ;) –

関連する問題