Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
private void App_OnStartup(object sender, StartupEventArgs e){ Application.Current.Properties["GodMode"] = false; // Проверить входные аргументы командной строки // на предмет наличия флага /GODMODE. foreach (string arg in e.Args) { if (arg.Equals("/godmode",StringComparison.OrdinalIgnoreCase)) { Application.Current.Properties["GodMode"] = true; break; } }}Данные уровня приложения доступны из любого места внутри приложения WPF. Для обращения к ним потребуется лишь получить точку доступа к глобальному объекту приложения (через
Application.CurrentClickprivate void Button_Click(object sender, RoutedEventArgs e){ // Указал ли пользователь /godmode? if ((bool)Application.Current.Properties["GodMode"]) { MessageBox.Show("Cheater!"); // Мошенник! }}Если теперь ввести аргумент командной строки
/godmodebin/debugWpfAppAllCode.exe /godmodeОтобразится окно сообщения и программа завершится.
На заметку! Вспомните, что аргументы командной строки можно указывать внутри Visual Studio. Нужно просто дважды щелкнуть на значке Properties (Свойства) в окне Solution Explorer, в открывшемся диалоговом окне перейти на вкладку Debug (Отладка) и ввести
/godmodeОбработка закрытия объекта Window
Конечные пользователи могут завершать работу окна с помощью многочисленных встроенных приемов уровня системы (например, щелкнув на кнопке закрытия X внутри рамки окна) или вызвав метод
Close()ClosingCancelEventHandlerУказанный делегат ожидает целевые методы, принимающие тип
System.ComponentModel.CancelEventArgsCancelEventArgsCanceltrueCancelEventArgs.CancelfalseClosedSystem.EventHandlerМодифицируйте класс
МаinWindowpublic MainWindow(){ InitializeComponent(); this.Closed+=MainWindow_Closed; this.Closing += MainWindow_Closing;}Теперь реализуйте соответствующие обработчики событий:
private void MainWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e){<b> // Выяснить, на самом ли деле пользователь хочет закрыть окно.</b> string msg = "Do you want to close without saving?"; MessageBoxResult result = MessageBox.Show(msg, "My App", MessageBoxButton.YesNo, MessageBoxImage.Warning); if (result == MessageBoxResult.No) {<b> // Если пользователь не желает закрывать окно, тогда отменить закрытие.</b> e.Cancel = true; }}private void MainWindow_Closed(object sender, EventArgs e){ MessageBox.Show("See ya!");}Запустите программу и попробуйте закрыть окно, щелкнув либо на значке X в правом верхнем углу окна, либо на кнопке. Должно появиться диалоговое окно с запросом подтверждения. Щелчок на кнопке Yes (Да) приведет к отображению окна с прощальным сообщением, а щелчок на кнопке No (Нет) оставит окно в памяти.
Перехват событий мыши
Инфраструктура WPF предоставляет несколько событий, которые можно перехватывать, чтобы взаимодействовать с мышью. В частности, базовый класс
UIElementMouseMoveMouseUpMouseDownMouseEnterMouseLeave