Открытие нового окна с помощью WPF

#c# #wpf

#c# #wpf

Вопрос:

Я пытаюсь открыть новое окно из действия в моем главном окне.

У меня есть макет главного окна MainWindow.axml :

 <Window x:Name="Capacity_Restrictions" x:Class="PayloadRestrictions.MainWindow"
        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:local="clr-namespace:PayloadRestrictions"
        mc:Ignorable="d"
        Title="Capacity Restrictions" Height="551.677" Width="879.614">
        ...

</Window>
  

И затем окно, которое я хочу открыть EditTextWindow.xaml :

 <Window x:Name="Capacity_Restrictions" x:Class="PayloadRestrictions.EditTextWindow"
        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:local="clr-namespace:PayloadRestrictions"
        mc:Ignorable="d"
        Title="Editing" Height="100" Width="100">
        ...   
</Window>
  

И затем внутри моего MainWindow.xaml.cs у меня есть:

 namespace PayloadRestrictions
{
    public partial class EditTextWindow : Window
    {
        public EditTextWindow()
        {
            InitializeComponent();

        }
    }

    public partial class MainWindow : Window

    {
        public MainWindow()
        {
            InitializeComponent();

            void Row_DoubleClick(object sender, MouseButtonEventArgs e)
            {
                DataGridRow row = sender as DataGridRow;
                // Some operations with this row
                var window = new EditTextWindow();
                window.Show();
            }
            ...
        }
     }
  

И каждый раз, когда я пытаюсь собрать проект, я получаю ошибку в InitializeComponent(); строке внутри EditTextWindow частичного класса:

The name 'InitializeComponent' does not exist in the current context PayloadRestrictions

Есть предложения по поводу того, что я здесь делаю не так?

Комментарии:

1. Как вы добавили файл для второго окна? Если вы используете Visual Studio, вы можете добавить новое окно WPF непосредственно через пользовательский интерфейс, и оно должно все правильно настроить (включая новый код за файлом).

2. Если это действительно ваш код, то вы вложили обработчик событий внутрь конструктора. После этого должна быть закрывающая фигурная скобка InitializeComponent

3. Я зашел в папку, где находился MainWindow.axml файл, сделал его копию и изменил

4. Если вы скопировали файл, вы также скопировали xaml, и если вы не обновили имя класса в xaml и нет автоматически сгенерированного файла конструктора, то у вас вообще не будет метода InitializeComponent. Создание окна с помощью IDE немного настраивает вас. Создание класса window вручную приведет к отсутствию битов.

5. Использование IDE сделало это за меня, теперь я решил проблему. Переместите комментарий в ответ, и я приму его.

Ответ №1:

По крайней мере, одна проблема заключается в том, что оба окна имеют одинаковые имена в ваших файлах xaml.

Решение состоит в том, чтобы разделить их как отдельные файлы, как указывал Энди. Затем вы можете просто запустить дочернее окно, например:

 EditTextWindow window = new EditTextWindow();
window.Show();