2009-06-08 1 views
1

私はWPFの新機能ですが、コントロールの変更に疑問があります。私は、コントロールテンプレートを変更してコントロールを変更できることを知りました。すなわち、コントロールテンプレートを変更してコントロールを変更したときとサブコントロールを追加したときの違いは何ですか?

<Button> 
    <Button.Template> 
    <ControlTemplate> 
     ... 
    </ControlTemplate> 
    </Button.Template> 
</Button> 

また、我々はコンテンツモデルを利用コントロールを編集することができます。すなわち、

<Button> 
    <Grid> 
    <CheckBox> 
    </CheckBox> 
    <RadioButton> 
    </RadioButton> 
    ... 
    </Grid> 
</Button> 

これら2つの手法の違いは何ですか? WPFでコントロールをカスタマイズする正しい方法はどれですか。これをよりよく理解するのを手伝ってください。

答えて

3

これら2つの主な違いは、ControlTemplateがコントロールの外観を定義していることです。それは実際にその中にコンテンツを配置していません。コンテンツコントロール内のある場所には、ContentPresenterという形式があります。組み込みのコントロールは、'lookless controls'と呼ばれるものであり、作成されたカスタムコントロールも見た目に欠けているため、これを実行できます。コントロールが無意味な方法でテンプレート化されていないが、代わりに静的なレイアウトを持っている場合、混乱が起こる可能性があります。

については、の方法は、達成しようとしているものによって異なります。ルック・アンド・フィールや振る舞いなどのコントロールを変更しようとしている場合は、using a ControlTemplate(またはテンプレート化する内容に応じてDataTemplate)を使用することは間違いありません。これの良い例は、CheckBoxです。それは、CheckBoxは実際にはToggleButton(more or less)です。つまり、through templatingは、弾丸にtogleablityを表示します。 Here'sテンプレートを使用して非常に気の利いたことを行う方法の非常に良い例です。

ControlTemplatesは、要素に直接設定する代わりにapplied through Stylesである必要があります。

実際にコントロールの動作や外観を変更しない場合は、コンテンツモデルを使用するのが正しい方法です。

WPF does this better then Silverlight SL3に改善があるかどうかはわかりませんが、

0

テンプレートをリソースに配置し、別のボタンに再利用することができます。

コンテンツを直接変更することは、UserControlを作成しない限り再利用できません。

どちらを使用するかは、具体的なタスクと個人の好みによって異なります。

+0

コントロールの内容は、要素をリソースとして定義したり、ContentControlsを使用したり、コンテンツをDataTemplateとして割り当てることによって、再利用可能です。 – rmoore

+0

ContentControlまたはDataTemplateを使用すると、元の質問の#2と同じではないと思います。 –

1

私の経験則では、コントロールテンプレートを変更せずに自分が望むものを得ることができれば、コントロールテンプレートを変更しないでください。

コントロールテンプレートは、チェックボックスのチェックマークグラフィックスを変更するための丸いボタンを作成するなど、コントロールの外観を変更する方法です。&

コントロール内にコントロールを追加する方が簡単です(たとえば、ボタン内にイメージを配置するなど)。

コントロールテンプレートを変更すると、埋め込み、コンテンツの配置、無効な外観など、コントロールテンプレートに多くの機能が含まれていることに注意してください。これらすべての機能のサポートを追加する必要があります。

関連する問題