#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();