Вопрос:

«Kproj.Forms.frmSwitch» не может быть корнем файла XAML, поскольку он был определен с использованием XAML

c# wpf winforms xaml wpf-controls

287 просмотра

1 ответ

405 Репутация автора

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

Я новичок в WPF. Я пытаюсь преобразовать программу из WinForms в WPF. У меня есть главное окно "Kproj.Forms.frmLogin", которое наследует базовый класс "Kproj.Forms.frmSwitch", который наследует класс System.Windows.Window. Когда я получил вышеупомянутую проблему, мой исходный код XAML был:

<Control:frmSwitch x:Class="Kproj.Forms.frmLogin"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:Control="clr-namespace:Kproj.Forms"
    mc:Ignorable="d"
    Title="LOG IN" Height="309" Width="678">
    <Grid Height="271" Width="662">
        ... Content
    </Grid>
</Control:frmSwitch>

с этими кодами:

namespace Kproj.Forms
    {
        public partial class frmLogin : frmSwitch
        {
        }
    }

namespace Kproj.Forms
    {
        public partial class frmSwitch : Window
        {
        }
    }

После дальнейших исследований я обнаружил, что мне нужно сделать frmSwitch базовым классом без XAML. Таким образом, я создал frmSwitch2 в общей форме класса, которая выглядит следующим образом:

namespace Kproj.Forms
{
    public class frmSwitch2 : Window
    {
    }
}

Затем я настроил главное окно XAML соответственно:

<Control:frmSwitch2 x:Class="Kproj.Forms.frmLogin"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:Control="clr-namespace:Kproj.Forms"
    mc:Ignorable="d"
    Title="LOG IN" Height="309" Width="678">
    <Grid Height="271" Width="662">
        ... Content
    </Grid>
</Control:frmSwitch2>

и код основного окна для:

namespace Kproj.Forms
    {
        public partial class frmLogin : frmSwitch
        {
        }
    }

Теперь я потерял исходное сообщение об ошибке, но я получил сообщение, в котором говорится

"The name 'frmSwitch2' does not exist in the namespace 'clr-namespace:FITS.Forms'."

даже если он предлагает «frmSwitch2», когда я набираю «Control:» в главном окне XAML, он знает, что он существует в пространстве имен. Какие-либо предложения?

Отказ от ответственности: я пытался исследовать его как можно лучше, но все сообщения, которые я нашел в StackOverflow, были этой проблемой, но все они были исправлены путем преобразования частичных классов XAML \ cs в сольный код за полным XAML-менее классом.

Автор: Hank Источник Размещён: 22.08.2016 09:23

Ответы (1)


0 плюса

405 Репутация автора

Решение

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

Если кто-то, кто знает больше MVVM, найдет решение этой проблемы, было бы неплохо узнать это. Даже если мне это больше не нужно, было бы хорошо учиться.

Автор: Hank Размещён: 25.08.2016 02:33
Вопросы из категории :
32x32