2011-01-18 10 views
0

My(Surface)UserControlsが大量のコードを共有しています。ですから、この共通のコードと動作を定義できる抽象スーパークラスを定義したいと思います。(Surface)UserControlでポリモフィズムを使用していますか?

しかし(サーフェス)UserControlの抽象スーパークラスを定義するにはどうすればよいですか?私はコードビハインドSurfaceUserControlのファイルをサブクラス化しようとしたが、その後、私は次のエラーを取得する:

Partial declarations of 'Prototype_Concept_2.views.DependencyExpander' must not specify different base classes C:\Users\Roflcoptr\Documents\Visual Studio 2008\Projects\Prototype_Concept_2\Prototype_Concept_2\views\DependencyExpander.xaml.cs 

答えて

1

SurfaceUserControl(またはSurfaceControlまたはSurfaceContentControlまたはSurfaceItemsControl)から派生するのは、コントロールのコンシューマがSurfaceイベントを処理しやすくするためです。あなたは正しいですが、これはコードの重複を招きます。

Surface SDKを構築していたとき、この問題を軽減するために、多くの自動コード生成が採用されました。 Reflectorを使用してサーフェスコントロールの実装方法を調べると、コントロールに組み込まれているロジックがほとんどないことがわかります は、個々のコントロールごとに1トンのロジックを含むいくつかのヘルパークラスです。

0

あなたがSurfaceUserControlする必要はありませんから、ユーザーコントロールを派生ベースコントロール。したがって、SurfaceContentControlから派生したテンプレート化されたカスタムコントロールを作成し、その基本クラスで共有されるほとんどのコードを配置します。

1

問題は、あなたのXAMLファイルは、おそらくまだで始まるされていることである。

<UserControl x:Class="..." 

しかし、あなたは別のタイプ(ないUserControlが、SurfaceUserControl)からクラスを派生場合、その後、あなたがいることを言っています同じクラスは2つのクラスをサブクラス化します。

カスタムコントロールを作成し、それをサブクラス化することができますが、私は個人的にこれが予想よりも問題になる可能性があることを個人的に見出しています。私はこれを別の方法で扱うことをお勧めします。

UserControl用に1つのスーパークラスを作成するのではなく、カプセル化を使用して1つのクラスに責任を委譲する方が簡単です。各UserControlはこのように共有ビヘイビアを処理できます。代わりに、共有DataContext(または共有階層)を使用することもできます。

関連する問題