Сообщение об ошибке WPF: Частичное объявление не должно указывать разные базовые классы

Почему у меня есть это сообщение об ошибке для UserControl:

Частичное объявление MyNamespace.MyUserControl не должен указать разные базовые классы

Просто потому, что я унаследовал от другого класса UserControl, который я создал в другом пространстве имен, тогда как это другое пространство имен упоминается в XAML как

xmlns:my="clr-namespace:ReferedNamespace;assembly=ReferedNamespace"

Ответы

Ответ 1

Здесь немного, но обычно это происходит, когда код позади и файл xaml не наследуются от одного и того же базового класса.

Поскольку у нас нет всех деталей, касающихся вашей проблемы, Я создам ситуацию, которая заставит исключение одного и того же исключения, это может помочь вам понять вашу проблему.

В качестве примера просто создайте новое приложение WPF с помощью Visual Studio, XAML может выглядеть примерно так:

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

В коде ниже будет содержаться что-то вроде этого:

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

Обратите внимание на модификатор "partial". Это означает, что этот класс (MainWindow) может не должны быть определены в одном файле, но разбросаны по нескольким файлам, в этом случае файлы XAML (.xaml.cs) и CS (.cs).

Теперь добавьте в решение новый UserControl. Он будет называться UserControl1.

Не внося никаких изменений в XAML, измените код для MainWindow:

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

Теперь вы получите исключение, о котором вы спрашивали.

Ищите что-то подобное в своем коде, если вы все еще не можете найти решение, пожалуйста, укажите больше кода.

Ответ 2

посмотрите на ваши .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

       } 
    }

- я надеюсь, что это будет полезно:).

Ответ 3

Я хотел добавить эту информацию. В Visual Studio 2017 есть ошибка, с которой у меня не было времени вникать с большой глубиной, но она вызывает эту ошибку. (из OP)

Обзор: При объявлении частичного класса как x: класса для ресурса xaml файла это приведет к этой ошибке, и после удаления объявления ошибка будет сохраняться.

Чтобы воспроизвести эту ошибку (или если вы здесь, потому что получаете это сообщение об ошибке)

Шаг 1: Создайте новый проект WPF.
Шаг 2: Создайте новый файл ресурсов
Шаг 3: Измените пространство имен файлов ресурсов на основное пространство имен проектов (удалите бит в конце.)
Шаг 4: В разделе объявления/заголовка файлов ресурсов добавьте объявление x: Class, определяющее ваш MainWindow (объект окна запуска по умолчанию) как класс для этого файла ресурсов. (EG: x: class= MainWindow)
Шаг 5: Очистить/Восстановить решение
Шаг 6: Теперь вы должны получить эту ошибку от OP. Поэтому удалите декларацию x: Class из своего заголовка в файле ресурсов и сохраните/очистите/перестройте проект.

Если ошибка была воспроизведена, ошибка должна остаться, даже если вы удалили объявление x: Class из файла ресурсов.

Единственное решение, которое я смог найти для этой ошибки, - это удалить папку Bin и любую другую папку со строками в ней. >

После удаления их, очистите/перестройте проект, и ошибка должна исчезнуть.