1. ホーム
  2. wpf

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

2022-04-14 19:10:38

質問

私はWPFを使い始めたばかりで、再利用可能なWPFコントロールを作りたいと考えています。

Visual Studio でプロジェクトを作成するためのオプションを見ると、"WPF User Control Library" と "WPF Custom Control Library" が表示されます。 この2つの違いは何なのか不明で、Googleで検索してもまともな説明は出てきません。

両者の違いを理解し、理想的にはどちらを使うべきかの例を見たいと思います。

どのように解決するのですか?

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

ユーザーコントロールは、技術的には通常のコンテンツコントロールで、コードの一部で拡張することができますが、通常はその中に他のコントロールを配置することで拡張します。つまり、Kentが言ったように、UserControlは他のコントロールの集合体なのです。そのため、ユーザーコントロールでできることはかなり制限されます。使い勝手は良いのですが、フルカスタムコントロールに比べると限界があります。

これらのコントロールは、ランタイムの観点から見ると、ちょっとした違いがあります。アプリケーションをビルドして、そこにUserControlを配置すると、コントロールツリーは、その中に具象UserControlテンプレートを持つことになります。そこで、特化したボタンといういい加減な例を考えてみると。もし、ユーザーコントロールを使うなら、その中にボタンを追加して <UserControl> 要素を使用します。カスタムコントロールを使用する場合は、おそらくボタンからコントロール自体を派生させることになるでしょう。この違いは、論理ツリーで確認できます。

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

  • ウィンドウ
    • カスタムボタン

UserControlは、次のような論理ツリーを与える。

  • ウィンドウ
    • CustomButtonUserControl
      • ボタン

つまり、UserControlは通常のContentControlであり、それを少し拡張して、コンテンツをあらかじめ定義することができるのです。カスタムコントロールは、XAMLの利点を持つ代わりに、すべてのロジックとインタラクションをコードで行う必要があるため、実装の容易さの代償として、より大きな柔軟性を提供します。

とはいえ、ここまで書いておいてなんですが、Visual Studioのテンプレートにそれほど大きな違いがあるとは思えませんね。おそらく、Visual Studio Custom Controlは空のカスタムコントロールのプロジェクトを作成するだけで、User Controlプロジェクトは空のユーザーコントロールのプロジェクトを作成するのでしょう。そのプロジェクトに後から任意の項目を追加することができます。

更新情報

カスタムコントロールとユーザーコントロールの使い分けについて、私の意見を述べますと、もしユーザーコントロールで何かを成し遂げることができ、論理ツリーに余分なコントロール要素があっても問題ないのであれば、ユーザーコントロールを使う方が作成も維持も簡単です。カスタム・コントロールは、ユーザー・コントロールを使用しない理由がある場合にのみ使用してください。