ユーザーコントロールライブラリとカスタムコントロールライブラリの違いは何ですか?


168

WPFをすぐに理解できるようになりました。再利用可能なWPFコントロールを作成したいと考えています。

Visual Studioでプロジェクトを作成するためのオプションを見ると、「WPFユーザーコントロールライブラリ」と「WPFカスタムコントロールライブラリ」が表示されます。それらの違いが何であるかは私には不明であり、私のGoogle検索ではまともな説明が何も見つかりませんでした。

それらの違いを理解し、理想的にはどちらを使用するかについていくつかの例を確認したいと思います。


2
オプションとして、コンテンツのネストやコントロールのテンプレートの変更を忘れないでください。このようにして、カスタムコントロールを記述しなくても、コントロールにかなり劇的な変更を加えることができます。
MichaC 2009

ちょうどMichaCが言ったこと。WPFの最も優れた点は、既存のコントロールをテンプレート化することで大きな影響を与えることができることです。まれにカスタムコントロールが必要になる場合があります。これは、コントロールへの小さな変更でさえ、新しい派生コントロールを必要とするWinFormsとは異なります。
Mikko Rantanen

まだ便利です。別の金のバッジを持っています。
ouflak 2016

回答:


117

実際には、カスタムコントロールはコードレベルで実装するものであり、ユーザーコントロールにXAMLを使用できます。カスタムコントロールは、WPFコントロールの基本クラスの1つを拡張し、コードを通じて追加機能を提供するため、追加されたすべてのロジックと表現をコード内に実装する必要があります。

ユーザーコントロールは、技術的には通常のコンテンツコントロールであり、コードの一部で拡張できますが、通常、その中に他のコントロールを配置することで拡張されます。したがって、Kentが述べたように、UserControlは他のコントロールの集約です。これにより、ユーザーコントロールで実行できることが大幅に制限されます。使い方は簡単ですが、完全なカスタムコントロールよりも制限があります。

これらのコントロールには、ランタイムの観点からの小さな違いがあります。アプリケーションを構築してUserControlをその中に配置すると、コントロールツリーの中に具体的なUserControlテンプレートが含まれます。したがって、特殊なボタンの不完全な例を考えると、ユーザーコントロールを使用している場合は、<UserControl>要素内にボタンを追加します。カスタムコントロールを使用する場合は、ボタン自体からコントロール自体を派生させます。違いは論理ツリーに表示されます。

カスタムコントロールは次のような論理ツリーを提供しますが

    • CustomButton

UserControlは、

    • CustomButtonUserControl
      • ボタン

したがって、最終的には、UserControlは通常のContentControlであり、少し拡張してコンテンツを事前定義できます。カスタムコントロールを使用すると、XAMLの利点を利用する代わりに、コード内のすべてのロジックと対話を実行する必要があるため、実装が容易になるという犠牲を払って柔軟性が向上します。

結局のところ、Visual Studioテンプレートにはそれほど大きな違いはないと思います。ほとんどの場合、Visual Studioカスタムコントロールは、カスタムコントロールが空のプロジェクトを作成するだけですが、ユーザーコントロールプロジェクトは、ユーザーコントロールが空のプロジェクトです。後でプロジェクトに任意の種類のアイテムを追加できます。

更新

そして、カスタムコントロールとユーザーコントロールをいつ使用するかについての私の意見は、ユーザーコントロールで何かを実行でき、論理ツリーの追加のコントロール要素が邪魔にならない場合は、ユーザーコントロールを使用する方がはるかに簡単であるためです。作成して維持します。カスタムコントロールは、ユーザーコントロールを使用しない理由がある場合にのみ使用してください。


2
カスタムコントロールを使用して他のコントロールを集約できますか?

そして、スキン可能/テンプレート化可能な問題はどうですか?

1
集計するとはどういう意味かわかりません。他のコントロールを集約してカスタムコントロールを作成することはできません。ただし、StackPanel、Grid、Panel自体などのPanelコントロールから派生させることができるため、カスタムコントロールを使用してレイアウトコンテナーを実装できます(ユーザーコントロールを使用して実行できるかどうかは不明です)。
Mikko Rantanen、

はい。ただし、他のコントロールを集約するだけの場合は、ユーザーコントロールを使用する方がはるかに簡単です。カスタムコントロールを実行する目的によっては、書くのが本当に難しい場合があります。そのため、機能のサブセットしか提供していない場合でも、ユーザーコントロールを使用することを選択します。
MichaC 2009

1
これらのコントロールは両方とも、正しい方法で実装されたときにスキン可能/テンプレート可能でなければなりません。残念ながら、私のWPFリファレンスは現在オフィスにあるため、実装の詳細を確認できません。
Mikko Rantanen、

23

A Controlはスキン可能(テンプレート化可能)ないくつかの動作を表しますが、a UserControlは通常Control、アプリケーションに固有のsのより高レベルの集約です。

詳細については、こちらをご覧ください


3
それは私が見つけたリンクの1つであり、物事をうまく説明できませんでした:)。私が見逃していることの1つは、スキン可能/テンプレート化が実際に意味することと、ユーザーコントロールでそれができない理由です。また、リンクされた投稿の最後の文は、「一般的に言えば、カスタムコントロールはユーザーコントロールよりも柔軟性と再利用性が優れています」です。それが本当なら、なぜユーザーコントロールを作成する必要があるのでしょうか。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.