web-dev-qa-db-ja.com

WPFエラーメッセージ:部分的な宣言で異なる基本クラスを指定することはできません

UserControlにこのエラーメッセージが表示されるのはなぜですか。

MyNamespace.MyUserControlの部分的な宣言では、異なる基本クラスを指定してはなりません。

別の名前空間で作成した別のUserControlクラスから継承したのに対し、この別の名前空間はXAMLで次のように参照されているからです。

xmlns:my="clr-namespace:ReferedNamespace;Assembly=ReferedNamespace"
15
user310291

ここでは少し先に進みますが、これは通常、コードビハインドとxamlファイルが同じ基本クラスから継承されていない場合に発生します。

問題の詳細がすべてわかっていないため、同じ例外がスローされる状況を作成します。これは、問題の理解に役立つ場合があります。

例として、Visual Studioを使用して新しいWPFアプリケーションを作成するだけで、XAMLは次のようになります。

<Window x:Class="WpfApplication1.MainWindow" .....>

背後のコードには、次のようなものが含まれます。

public partial class MainWindow : Window
{
    //Code here
}

ここで「partial」修飾子に注意してください。これは、このクラス(MainWindow)が単一のファイルではなく、複数のファイル(この場合はXAML(.xaml.cs)ファイルとCS(.cs)ファイル)に分散している可能性があることを意味します。

次に、新しいUserControlをソリューションに追加します。 UserControl1という名前になります。

XAMLに変更を加えずに、メインウィンドウのコードビハインドを変更します。

public partial class MainWindow : UserControl1
{
    //Code here
}

これで、質問した例外が発生します。

コードでこのようなものを探します。それでも解決策が見つからない場合は、さらにコードを入力してください。

29
TimothyP

この部分で.csファイルと.xamlファイルの両方を確認してください

  • .xamlファイル内:

    <Window x:Class="BUSsAsDesign.GUI.IGPopUP" > ...... </Window>
    
  • .csファイル内:

    namespace BUSsAsDesign.GUI
    {
       public partial class IGPopUP : Window
      {
    
       //code here
    
      }
    }
    
  • ウィンドウをUserControlに変更したい場合

  • 変化する

    <Window x:Class="BUSsAsDesign.GUI.IGPopUP" > ....... </Window>
    <!--**becomes**-->
    <UserControl x:Class="BUSsAsDesign.GUI.IGPopUP" > ....... </UserControl>
    

    namespace BUSsAsDesign.GUI
    {
      public partial class IGPopUP : Window
      {

       //code here

      }
    }
    //**becomes**
    namespace BUSsAsDesign.GUI
    {
      public partial class IGPopUP : UserControl
      {

       //code here

       } 
    }

-お役に立てば幸いです:)。

この情報を追加したかったのです。 Visual Studio 2017には、深く掘り下げる時間がなかったバグがありますが、このエラーが発生します。 (OPから)

概要:リソースxamlファイルのx:Classとして部分クラスを宣言すると、このエラーが発生し、宣言を削除した後もエラーが持続します。

このバグを再現するには(または、このエラーメッセージが表示されたためにここにいる場合)

ステップ1:新しいWPFプロジェクトを作成します。
ステップ2:新しいリソースファイルを作成する
ステップ3:リソースファイルの名前空間をプロジェクトのメイン名前空間に変更します(最後のビットを削除します)。
ステップ4:リソースファイル宣言/ヘッダーセクションで、メインウィンドウ(デフォルトの起動ウィンドウオブジェクト)をそのリソースファイルのクラスとして指定するx:Class宣言を追加します。 (例:x:Class = MainWindow)
ステップ5:ソリューションのクリーンアップ/再構築
ステップ6: OPからこのエラーが発生するはずです。したがって、リソースファイルのヘッダーからx:Class宣言を削除し、プロジェクトを保存/クリーンアップ/再構築します。

バグが再現された場合、リソースファイルからx:Class宣言を削除しても、エラーは残るはずです。

このバグに対して私が見つけた唯一の解決策は、削除プロジェクトビンフォルダー、およびビルドが含まれている他のフォルダーです。

それらを削除した後、プロジェクトをクリーンアップ/再構築すると、エラーはなくなります。

2
Jscix