64

ユーザー コントロールとカスタム コントロールの違いに関する説明をいくつか読んでい ます。たとえば、次のとおりです。

たとえば、データグリッドのアイテムから値を変更する責任がある2つのコンボボックスを持つデータグリッドの単純な構成を作成したいと思います。何度も使用するので、このための特定のコントロールを作成したいと考えています。背後にあるロジックを実装したいのですが、xaml の呼び出しで itemsSource を指定するだけで済みます。

この例では、ユーザーまたはカスタム コントロールを作成する必要がありますか? プロパティとロジックがあるので、このコントロールのビューモデルを用意する必要がありますか?

編集: これら 2 つのオプションを明確に概念的に分離した記事を知っていますか?

4

7 に答える 7

101

ユーザー コントロールとカスタム コントロールの間だけでなく、ユーザー コントロール、カスタム コントロール、コントロール テンプレートのカスタマイズ、データ テンプレートのカスタマイズ、ヘッダー テンプレート (コレクション ベースのコントロール用)、添付プロパティの中からも選択できます。コントロール オーサリングの概要を参照してください。

検討順に従っていきます

  1. 添付プロパティ: 機能を実現できる場合は、添付プロパティを使用します。例、数値テキスト ボックス。

  2. コントロール テンプレート: コントロール テンプレートをカスタマイズすることで要件を満たすことができる場合は、これを使用します。例、円形のプログレス バー。

  3. カスタム コントロール: コントロール テンプレートでそれができない場合は、カスタム コントロールを使用します。既に存在するコントロールをカスタマイズ/拡張する必要がある場合。GridView のヘッダー行に基づく並べ替え、フィルタリングを提供する例 (GridView はメトロ アプリに存在し、例を説明するためだけに使用されます)

  4. ユーザー コントロール: 最も優先度の低いもの。合成が必要な場合にのみ、カスタム コントロールを使用してそれを行うことができません。あなたの例のように、2つのコンボボックスと1つのデータグリッド。ユーザー コントロールは、カスタム コントロールまたはコントロール テンプレートを介して活用できるシームレスなルックレス機能を提供しません。

于 2012-06-28T15:55:45.910 に答える
50

UserControls違いを説明するいくつかの優れた回答が既にありますが、カスタム コントロールと異なる目的があることも理解しています。

UserControl通常、ある種の複合動作をカプセル化します。たとえば、多くの場所で連絡先の詳細を編集する必要があるアプリケーションがある場合、すべてのデータのラベルとテキスト フィールドを含むカスタム コントロールを作成し、関連するコードを持つ送信ボタンを配置して、このコントロールを再利用することができます。アプリケーション全体で。

カスタム コントロールは、WPFコントロール クラス (EGなど) の 1 つから派生したコントロールでありControlContentControlコードで作成する必要があります。これらのコントロールは通常、全体として一緒に機能するのではなく、単一のまとまりのある目的 ( TextBoxComboBox、と考えLabelてください) を持っています (ただし、必ずしもそうである必要はありません)。

UserControlは通常、WPF視覚的に設計できるため、慣れていない人にとっては簡単です。

私の提案は、から始めることUserControlです。仕組みに慣れてきたら、いつでもこれをカスタム コントロールにリファクタリングできますWPF。コントロールをカスタム コントロールとして作成するには、コントロールのルック アンド フィールを定義するために独自のものを提供する必要があるため、およびの知識が必要です。ControlTemplateStyle

結局のところ、コントロールが正しく動作する限り、どのアプローチを使用してもかまいません。

同じ問題に対する 2 つのアプローチの例については、この投稿を参照してください。投稿者は、プライマリ コンテンツの前にモーダル コンテンツを表示できるコントロールを求めていました。投稿者は、実際にUserControl. カスタムコントロールとしてコントロールを作成する投稿に回答を追加しましたが、どちらも同じ結果になります。

于 2012-06-28T17:40:58.103 に答える
7

最良の説明はmsdnにあります。ControlCustomControl はより「仮想的な」名前であり、WPF には「CustomControl」と呼ばれるクラスはありません。代わりに、のItemsControlような WPF コントロール クラスの 1 つの上に構築された新しいクラスを作成することを意味しTextBoxますButton

特定のケースでは、UserControl で十分なはずです。CustomControl の作成は簡単に回避できるものです。それは悪いことではありませんが、多くの人、特に WinForms から来た WPF の初心者は、必要以上にサブクラス化する傾向があります。

于 2012-06-28T15:53:05.217 に答える
1

初めてコントロールを作成する場合は、VS を使用するとインターフェイスをより簡単に設計できるため、UserControl をお勧めします。カスタム コントロールはより強力ですが、コントロールのロジックをインターフェイスから明確に分離する必要があり、これにはもう少し準備が必要です。

于 2012-06-28T15:38:09.847 に答える
1

簡単に視覚的にデザインできますCustomControl。新規UserControl(またはウィンドウ) を作成します。Designer で xaml 構造を視覚的に作成します。結果の xaml の本体をControlTemplatenew 内にコピーして貼り付けますCustomControl(例: 一般的なテーマ ファイル)。

私の記憶が正しければ、Blend で CustomControl テンプレートを直接視覚的に設計することもできます。

もちろん、ウィンドウで wip CustomControl をインスタンス化し、ウィンドウのデザイナー ビューを新しいパネルとして VisualStudio のコントロールの xaml ビューの上に配置することもできます。スタイル テンプレートの一部の xaml バインディングは、再構築するまで、このように Designer に表示されません。

[ 私見 GUI は主に視覚的な問題であり、コードで作成するべきではなく、作成する必要もありません。]

于 2013-11-06T22:21:07.977 に答える
-2

カスタム コントロールを作成するには、それをユーザー コントロールとして実装する必要があります。独自のユーザー コントロールは、カスタム コントロールと呼ばれます。とてもシンプルです。

UserControl は、カスタム コンテンツを含めるための基本クラスです。

<UserControl>
  Your custom WPF content
</UserControl>

私はその記事に完全には同意しません。ただし、あなたの場合、UI で後で再利用できる UserControl が必要です。

于 2012-06-28T15:18:44.113 に答える