1

私は WPF を初めて使用し、コントロールの変更に疑問を持っています。Control Templateを変更することでコントロールを変更できることを知りました。つまり、

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

また、コンテンツ モデルを利用してコントロールを編集することもできます。つまり、

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

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

4

3 に答える 3

3

これら 2 つの主な違いは、ControlTemplateがコントロールの外観を定義することです。実際にその中にコンテンツを配置しているわけではありません。コンテンツ コントロール内のある場所には、何らかの形式のContentPresenterが必要です。ビルトイン コントロールは「ルックレス コントロール」と呼ばれるものであり、作成されたカスタム コントロールもルックレスにする必要があるため、これが可能です。コントロールが見栄えのしない方法でテンプレート化されておらず、代わりに静的なレイアウトがある場合、遭遇した混乱が発生する可能性があります。

物事を行う正しい方法については、何を達成しようとしているのかによって異なります。ルック アンド フィールや動作などのコントロールを変更しようとしている場合は、 ControlTemplate (または、テンプレート化する内容に応じて DataTemplate ) を使用するのが間違いなく最適な方法です。これの良い例は CheckBox です。信じられないかもしれませんが、CheckBox は実際には ToggleButton (多かれ少なかれ) であり、テンプレートを使用して箇条書きで切り替え可能性を表示します。 これは、テンプレートを使用して非常に気の利いたことを行う方法の別の非常に良い例です。

ControlTemplates も、要素に直接設定するのではなく、Styles を介して適用する必要があります。

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

WPF は Silverlight よりも優れていますが、SL3 に改善があるかどうかはわかりません。

于 2009-06-08T07:44:24.287 に答える
1

私の経験則では、コントロールテンプレートを変更せずに必要なものを取得できる場合は、コントロールテンプレートを変更しないでください。

コントロールテンプレートは、コントロールのルックアンドフィールを変更する方法です。たとえば、チェックボックスのチェックマークグラフィックを変更する丸いボタンを作成します。

コントロール内にコントロールを追加する方が簡単です。たとえば、ボタン内に画像を配置します。

また、コントロールテンプレートには、パディング、コンテンツの配置、無効な外観など、多くの機能があります。コントロールテンプレートを変更する場合は、これらすべての機能のサポートを追加する必要があります。

于 2009-06-08T10:48:31.310 に答える
0

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

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

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

于 2009-06-08T07:20:35.427 に答える