Сообщение об ошибке 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 и любую другую папку со строками в ней. >
После удаления их, очистите/перестройте проект, и ошибка должна исчезнуть.