Как закрыть домашнее окно - PullRequest
1 голос
/ 21 июля 2009

Я создаю wpf-приложение на c #, я знаю, что для закрытия / открытия окна вы должны использовать методы .Close () и .Show (), но по какой-то причине домашний экран, первое окно, которое появляется при Я запускаю приложение, не закрываюсь.

        Home window1 = new Home();
        window1.Close();
        Name window2 = new Name();
        window2.Show();

Окно2 появляется, но окно1 не закрывается. В чем проблема.

Ответы [ 4 ]

1 голос
/ 22 июля 2009

Это ошибка в WPF. Window.Close завершится с ошибкой, если событие SourceInitialized еще не произошло. Последующие вызовы Window.Close также не будут выполнены.

https://connect.microsoft.com/WPF/feedback/ViewFeedback.aspx?FeedbackID=299100

Чтобы обойти это, добавьте это в окно:

protected override void OnSourceInitialized(EventArgs e)
{
    base.OnSourceInitialized(e);

    // check if we've already been closed
    if (m_bClosed)
    {
        // close the window now
        Close();
    }
}

protected override void OnClosing(CancelEventArgs e)
{
    base.OnClosing(e);

    // make sure close wasn't cancelled
    if (!e.Cancel)
    {
        // mark window as closed
        m_bClosed = true;

        // if our source isn't initialized yet, Close won't actually work,
        // so we cancel this close and rely on SourceInitialized to close
        // the window
        if (new WindowInteropHelper(this).Handle == IntPtr.Zero)
            e.Cancel = true;
    }
}

bool m_bClosed;
1 голос
/ 21 июля 2009

Где ваш код для показа window1? Если вы показываете свое домашнее окно где-то еще в вашем коде, вам нужно использовать эту ссылку, чтобы закрыть его. Создание нового объекта Home и вызов его метода Close не закрывают окно, отображаемое с использованием другого объекта Home.

1 голос
/ 21 июля 2009

Предположительно, потому что если вы закроете окно, вы закроете приложение.

Если вы просто хотите скрыть главное окно, используйте метод window.Hide().

Это из справки по Window.Close:

Окно может быть закрыто с помощью одного из несколько, хорошо известных, обеспеченных системой механизмы, расположенные в его строке заголовка, в том числе:

ALT + F4.

Системное меню | Закрыть .

Кнопка

Закрыть .

Окно также можно закрыть с помощью одного из нескольких известных механизмов в клиентской области, которые предоставлено разработчиками, в том числе:

Файл | Выход в главном окне.

Файл | Закрыть или кнопку Закрыть на дочернее окно.

UPDATE

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

0 голосов
/ 21 июля 2009

Или вы можете сделать Window2 главным окном (вы можете изменить это в app.xaml в свойстве StartUpUri) и либо показывать Window2 и закрывать Window1, либо вообще не показывать Window1.

<Application x:Class="Invitrogen.TheGadget.App"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    StartupUri="Window2.xaml">
</Application>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...