Сообщение об ошибке WPF: частичное объявление не должно указывать разные базовые классы - PullRequest
15 голосов
/ 26 января 2011

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

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

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

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

Ответы [ 3 ]

28 голосов
/ 27 января 2011

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

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

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

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

Код позади будет содержать что-то вроде этого:

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

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

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

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

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

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

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

17 голосов

посмотрите ваши файлы .cs и .xaml в этих частях

  • в файле .xaml:

    <Window x:Class="BUSsAsDesign.GUI.IGPopUP" > ...... </Window>
    
  • in.CS файл:

    namespace BUSsAsDesign.GUI
    {
       public partial class IGPopUP : Window
      {
    
       //code here
    
      }
    }
    
  • Теперь, если вы хотите изменить Window на 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

       } 
    }

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

1 голос
/ 16 ноября 2017

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

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

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

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

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

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

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

...