2012-05-02 80 views
5

私はインターネット上でこの情報を知っていますが、私の状況に翻訳する際に問題があります。部分宣言の異なる基本クラスを指定してはいけません

私はxamlウィンドウを持っていて、エラーを受け取っています: 'GX3OpenStackupGUIPlugin.GX3OpenStackupGUIPlugin'の部分宣言で異なる基本クラスを指定してはいけません 。

の背後に私のコードは次のとおりです。

public partial class GX3OpenStackupGUIPlugin : GX3ClientPlugin, IGX3PluginInterface 
    { 

私のXAMLは次のとおりです。

<Grid xmlns:my="clr-namespace:CustomControls;assembly=MultiComboBox" xmlns:extToolkit="http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit/extended" x:Class="GX3OpenStackupGUIPlugin.GX3OpenStackupGUIPlugin" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 

誰かがここ:)

をお知らせできてください、私が見つけたものへのリンクであるだけに苦労しています翻訳する... Partial declarations must not specify different base classes

littより多くの研究私はxamlのトップレベルの要素を実装するために私のコードを変更すると、エラーを取り除くことを発見しました。私のコードビハインドクラスは私が設計したインターフェースを実装する必要があるので、明らかにまだ問題があります。

+0

これらの答えはどちらも意味がありますが、「その他」の部分クラス定義がどこにあるかはわかりません。何か案は? – user589195

+0

私は部分的な部分を削除すると、クラスの別の部分的な解散があると文句を言うが、クラスの名前を検索しても何も生成されない:( – user589195

+0

GX3OpenStackupGUIPluginのXAMLファイルを持っているか(つまりWPFコントロール)それは普通のC#クラスですか?XAMLファイルの場合は、グリッドのようにXAMLのトップ部分を投稿できますか? – Ian

答えて

1

partial classには2つ(またはそれ以上)の部分があります。検索するとが別のclass GX3OpenStackupGUIPluginと表示されます。これはおそらくControlをベースタイプとして指定しています。あなたはファイルの一部を見ているだけです。他の半分はおそらくxamlの下から拡張する必要があります。

は(最初のファイル)

public partial class GX3OpenStackupGUIPlugin : GX3ClientPlugin, IGX3PluginInterface {} 

(第2ファイル)

public partial class GX3OpenStackupGUIPlugin : SomethingElse {...} 
2

部分クラスの宣言は、あなたができることを意味:

問題は、2つのファイルがこのような何かをやっているということです同じクラスのコードを2つの異なるファイルに指定してください:

AOther.cs

public partial class A 
{} 

A.cs

public partial class A 
{} 

このエラーは、クラスが別の拠点を定義することを語っています。

AOther.cs例で

public partial class A : B 
{} 

A.cs

public partial class A : X 
{} 

、Aは、異なるファイルにBおよびXから継承することができません。 XAMLで継承チェーンを指定することは可能だと思いますが、投稿されたコードでこれを行うことはできません。コメントでの質問に修正を加えて

更新

は、私は次のことを示唆しています。コントロール/ウィンドウをGX3ClientPluginから継承させるために継承を調べるのではなく、構図を見なければなりません。基本的にこれは、GX3ClientPluginのインスタンスをフォームに配置して呼び出すことを意味します。 GX3ClientPluginクラスのインタフェースを記述する必要がある場合は、フォームにそれを実装させますが、各メソッドに対して、そのインスタンスが保持しているインスタンスを呼び出します。あなたのクラスはUIとGX3ClientPluginの2つの問題を抱えているので、継承はこの問題を解決するには間違った方法だと思います。

8

リンク先の質問には答えが含まれています。その質問をした人が、この(働いている)で開始:

<A x:Class="B"> 
public partial class B : A 

そして、彼らは(動作しませんでした)これに、それを変更:

<A x:Class="C"> 
public partial class C : B 

これが原因で、背後に動作しません。シーン、.csファイルのファイルは、それを修正するにはA.から継承する部分クラスが含まれているXAMLに基づいて生成され、彼らはこれにそれを変更するために必要な:

<B x:Class="C"> 
public partial class C : B 

は、だからあなたの場合には、私はあなたを信じていますグリッド、すなわち、このような何か:

<namespace:GX3ClientPlugin x:Class="namespace.GX3OpenStackupGUIPlugin"> 
public partial class GX3OpenStackupGUIPlugin : GX3ClientPlugin 

を(私はGX3ClientPluginが最終的にグリッドまたはUserControlのようなものを継承していると仮定?)

+0

それはしませんが、必要があるように見えます。 – user589195

+1

なぜ私はWindowクラスと別のクラスから同時に継承していないのですか? – user589195

+0

私は.NETが複数の継承をサポートしているとは思わないが、元の質問の下で私のコメントも見てください。 – Andrew

4

私はのTabItemを継承しようとしたとき、私はこのエラーを得ました。コードがXAMLから生成されたときに現れるでしょう不一致だったこと

<UserControl 

:XAMLの最初の行は、ように見えた

public partial class ucTabItemSelectionCriteria : TabItem 

:.csファイルは、ように見えました。今、両方とものTabItemコントロールから継承され

<controls:TabItem xmlns:controls= 
"clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls" 

:私はXAMLの最初の2行を変更したときにそれを修正しました。