21

すべてのドキュメントによると、ルックレスでないコントロールを作成するときは、 をサブクラス化することになっていますUserControl。ただし、UserControlの単純なサブクラスですContentControlが、インターフェイスに関しては何も追加されていないようです。そのため、デザイナーが生成したコードを使用して基本クラスを変更しContentControlても、まったく同じように動作するように見えます。

UserControlでは、 overのポイントは何ContentControlですか?

アップデート:

Visual Studio では扱いが異なると答え続ける人には、そうではないと主張します。それを試してみてください!UserControlVisual Studio で新規作成し、結果の XAML ファイルでルート タグを に変更しContentControlます。次に、関連付けられたクラス ファイルで、基本クラスを変更するContentControlか、ここで行ったように単純に削除します (メモを参照)。完全な WYSIWYG デザイナー サポートを含め、まったく同じように動作するように見えます。

注: コード ビハインドから基本クラスを削除できます。これは、実際にはクラスの他の「部分」がコード生成によって XAML デザイナーによって作成される部分クラスであるためです。そのため、基本クラスは常に XAML ファイルのルート要素として定義されるため、コード ビハインドでは冗長であるため単純に省略できます。

更新された XAML は次のとおりです...

<ContentControl x:Class="Playground.ComboTest.InlineTextEditor"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <TextBlock Text="Success" />

</ContentControl>

...および関連するクラス ファイル...

namespace Playground.ComboTest {

    public partial class InlineTextEditor {

        public InlineTextEditor()
            => InitializeComponent();
    }
}
4

6 に答える 6

9

基本的に、UserControlクラスは利便性のためにあります。これにより、既存のコントロールから UI の小さな部分を構築できますが、ContentControlは、通常、単一の目的や機能を備えた新しいコントロールを作成するためのものです。

私はこれについて適切に説明された本を読んだのですが、幸運なことに、誰かが「そのコピーをオンラインに載せた」のです。リンクされた本から:

UserControl クラスは、関連するコントロールのコレクションの「ブラック ボックス」コンテナーとして機能するコンテナー クラスです。3 つのコントロールのセットを常に一緒に表示し、相互に簡単に対話できるようにする必要がある場合、それを実現する可能性が高い候補は UserControl クラスです。

次に、を作成するかどうかに関連しますCustomControl

決定プロセスの概要は次のとおりです。

可能な限りフレームワークを使用してください。WPF はさまざまな拡張可能なコントロールを提供するため、必要な機能が WPF コントロールにまだ存在しないことを確認してください。

多くの場合、作業しているデータ構造には異なる視覚的表現が必要です。ControlTemplates と DataTemplates を使用すると、多くの場合、必要な機能が得られます。

ValueConverters を調べて、ストック機能と必要なものの間のギャップを埋めるのに役立つかどうかを確認してください。

最後に、添付プロパティを使用して既存の動作を拡張できないかどうかを確認します。

あなたの質問に対する詳細な回答を探してください。

解き放たれた WPF コントロール開発

更新 >>>

@MarqueIV、あなたの質問にもっと直接答えるために:UserControlクラスは便宜上提供されています。それでおしまい。プロジェクトにWPF を追加するCustomControlと、XAML ファイルがないことがわかります。Generic.xamlこれは、フォルダー内で呼び出されるファイル内のコントロール マークアップを設計する必要があることを意味しThemesます。クラスはUserControlXAML ファイルを提供するので、簡単に作成できます...つまり、より便利になります...それだけです。それが理由です。

于 2013-09-13T08:39:49.757 に答える
3

と異なる点の 1 つは、メソッドContentControlUserControlオーバーライドするOnCreateAutomationPeerことです。それを探すことができます。多分それはContentControl.

このメソッドはUserControlAutomationPeer-instanceを作成します。

于 2013-09-13T09:05:54.640 に答える
1

ContentControl ContentControl
は Control クラスから直接派生します。
複数の要素 (TextBlock と Image の子を持つ StackPanel など) をホストするコンテナー (Grid、Stackpanel など) になる単一の要素をホストします。
その外観は、DataTemplate を使用して変更できます。MSDN の備考セクション
を参照してください。

UserControl
UserControl は ContentControl から派生します。
テンプレートをサポートしていないため、カスタマイズはありません。
Window のように自動的にフォーカスを捉えることはありません。
まだMSDN の備考セクションにあります。

于 2016-11-04T16:28:29.897 に答える
0

UserControl と ContentControl は同じ実装かもしれませんが、ユース ケースは同じではありません。

UserControl または CustomControl をいつ使用するかという 2 つの質問に答える必要があります。いつContentControlを使用するのですか ?.

では、いつ UserControl または CustomControl を使用するのでしょうか?

たとえば、隣に TextBlock があるボタンを意味する FileDialogBrowser が必要な場合など、再利用可能な UI
が必要な場合はいつでも、ボタンを押してユーザーがファイルを選択するたびに、選択したファイルを TextBlock に表示します。

同じですが、customControl にも正確には当てはまりませんが、ここではより洗練された処理を行いたいと考えていますが、とにかくこれは問題ではありません。

では、いつ ContentControl を使用するのでしょうか?

これを言うのは少し難しいですが、BusyIndi​​cator または Border から継承できるように、progressBar にメッセージを持たせたいとしましょう。ただし、ContentControl を使用すると、その中のコンテンツを制御できるコントロールが得られます。他の xaml 要素をラップすることができます。

お役に立てれば

于 2014-06-10T20:00:20.350 に答える
0

UserControl は複合コントロールです。ASP.NET Webforms の UserControl と同様の概念があります。これは、多くのコントロールから構成されるコントロールであることを意味します。WPF では、ユーザー コントロールの作成は、Visual Studio 2008 以降のデザイナーをサポートしています。ContentControl は、コンテンツとして 1 つのコントロールを持つことを目的としたコントロールです。

詳細情報: http://msdn.microsoft.com/en-us/library/system.windows.controls.contentcontrol.aspx

于 2013-09-13T08:44:25.310 に答える