Как закрыть приложение WPF при нажатии кнопки X

Я новичок в WPF и заметил, что мое приложение продолжает работать после того, как я нажму кнопку «X», чтобы выйти из окна. Раньше я программировал графический интерфейс, поэтому знаю, что это обычное дело. Однако, когда я изучаю проблему, любые решения, которые я нахожу, кажутся бессмысленными.

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

После решения Application.ShutdownMode у меня есть это в моем файле MainWindow.xaml:

<Window x:Class="CartToolsPrototype1.Window1" Background="White"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        ResizeMode="CanMinimize"
    Title="{DynamicResource CartTools}" Height="802" Width="950" WindowStartupLocation="CenterScreen" >
    <Window.Resources>

        <Application
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            StartupUri="Window1.xaml"
            ShutdownMode="OnMainWindowClose"
            >
            </Application>

Компилятор выдает мне сообщение об ошибке: «Все объекты, добавленные в IDictionary, должны иметь связанный с ними атрибут Key или какой-либо другой тип ключа». Что именно я здесь делаю не так, и как мне правильно реализовать свою функцию выключения?

Спасибо.


person Eric after dark    schedule 15.07.2013    source источник
comment
Скорее всего, это не проблема, специфичная для WPF. Я предполагаю, что вы запускаете поток, и он не помечен как фон и не завершен, когда вы пытаетесь закрыть приложение.   -  person Daniel Hilgarth    schedule 15.07.2013
comment
Разве я не могу просто удалить тег wpf вместо того, чтобы начинать совершенно новый поток?   -  person Eric after dark    schedule 15.07.2013
comment
Вы уверены, что проблема не в том, что мой ShutdownMode закодирован неправильно? В моем файле App.xaml у меня есть ShutdownMode="OneMainWindowClose", но программа продолжает работать в фоновом режиме, когда я нажимаю x   -  person Eric after dark    schedule 15.07.2013
comment
Я нашел это. Спасибо.   -  person Eric after dark    schedule 15.07.2013


Ответы (1)


Вы не ставите тег Application в свой Window. В вашем решении у вас есть app.xaml, где вы должны поместить:

ShutdownMode="OnMainWindowClose"

и цитируя MSDN:

MainWindow автоматически устанавливается со ссылкой на первый объект Window, который будет создан в AppDomain.

person dkozl    schedule 15.07.2013
comment
ОООО, хорошо. Лампочка... Я поместил его в этот файл, но мое Window1 не должно быть установлено в качестве главного окна, потому что кнопка x не закрывает приложение, когда я закрываю главное окно. - person Eric after dark; 15.07.2013
comment
Каково ваше StartupUri в app.xaml. Это твой MainWindow? - person dkozl; 15.07.2013
comment
StartupUri — это Window1.xaml - person Eric after dark; 15.07.2013
comment
Мое решение просто говорит вам, как изменить ShutdownMode и справиться с ошибкой компиляции, которая у вас возникла, но, как предложил @GarryVass, ваше приложение должно закрыться с настройками по умолчанию в любом случае, и я бы предложил выполнить еще одну отладку, чтобы увидеть, есть ли что-то, что блокирует завершение работы. . - person dkozl; 15.07.2013
comment
Я пометил это как свой ответ, потому что технически это решило мою ошибку компилятора, но во время отладки я обнаружил ошибку, которая препятствовала завершению работы. - person Eric after dark; 15.07.2013