2010-11-21 5 views
1

私はすべてのユーザーコントロールに共通の部分をいくつか持っています。それはインターフェイスで定義されています、例えばMyInterfaceです。継承を使用してユーザーコントロールの共通部分を実装する方法は?

その後、私はクラスでその一部を実装し、MyBaseClassを言う:私は、ユーザーコントロールを作成するときに

class MyBaseClass : MyInterface  
{  
//......  
} 

はその後、私は、このユーザーコントロールにしたい共通部分の実装を持っています。だから、私はMyControlのコードを次のように変更したいと考えています:

public partial class MyControl : UserControl, MyBaseClass 
    { 
     public MyControl() 
     { 
      InitializeComponent(); 
     } 
    } 

システムでエラーが発生します。理由:Mybaseは部分クラスではありません。 MyBaseClassを部分的に変更する場合は、erroが "mutiple base classを許可しない"のようなものを取得します。

一つの解決策は、

public partial class MyUserControl : UserControl, MyInterface 
    { 
     public MyUserControl() 
     { 
      InitializeComponent(); 
     } 
    } 

のようですが、これは、各ユーザーコントロールの重複実装が発生します。多くのコピー&ペースト。私はこのようにしたくない。

次のようにしようとしました:私はエラーを得た

public class MyBaseClass : UserControl, MyInterface 

または

public partial class MyBaseClass : UserControl, MyInterface 

: 'をMyUserControl' の 部分的な宣言は、この問題をresoveする方法別の基本クラスに

を指定してはなりませんか?

+0

C#の多重継承をサポートしていません...あなたが試すことができますすべてがUserControlから継承し、いくつかのBaseUesrControl、共通のコードを配置することであり、このベースから継承より。 –

答えて

0

私はあなたがこれで行くお勧め: -

public class MyBaseClass : UserControl, MyInterface 
あなたが試した

が、ねじれがあります。あなたがwnatこの由来「ユーザーコントロール」を作成する場合は、標準のUserControlで始まるが、その後これにコードビハインドファイルを変更します -

public partial class MyDerivedClass : MyBaseClass 

変更XAMLへ: -

<local:MyBaseClass x:Class="MyNamespace.MyDerivedClass" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="clr-namespace:MyNamespace" 
> 
    <Grid x:Name="LayoutRoot" Background="White"> 
    </Grid> 
</local:MyBaseClass> 
+0

ありがとうございます。 MyBaseClassは別のプロジェクト(aseembly)にあり、xamlをと変更しました。、VSは次のようにエラーを出します: 'MyCommon'は宣言されていません接頭辞。 MyBaseClassを同じプロジェクトに配置する場合は、ローカルを使用する場合と同じです。 – KentZhou

+0

ありがとうございます。考え出した。ローカルまたはMyCommonをxmlnlに配置する必要があります。 – KentZhou