Закрыть приложение
Правильно закрыть приложение WinStore программно
Всем привет. Каким образом правильно закрыть приложение winstore из кода, дело в том что такой.

Закрыть приложение WPF по нажатию на кнопки
Добрый день. Хочу закрыть приложение по нажатию кнопки, но ничего не выходит. Читал тут.
закрыть приложение Word
как программно закрыть ворд приложение. Я с таким кодам закрываю, но закрывается толка документ.
Создать приложение, которое нельзя закрыть
Здравствуйте! Пишу мелкое приложение, в котором устанавливается лимит времени использования ПК. По.
![]()
4431 / 2091 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
Написано же, что не подходит сигнатура метода. Ты думаешь, что можно взять и от балды любые параметры в метод Button_Click приделать?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
using System.ComponentModel; using System.Windows; namespace WpfApp1 { public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } protected override void OnClosing(CancelEventArgs e) { var response = MessageBox.Show("Do you really want to exit?", "Exiting. ", MessageBoxButton.YesNo, MessageBoxImage.Exclamation); if (response == MessageBoxResult.No) { e.Cancel = true; } else { Application.Current.Shutdown(); } base.OnClosing(e); } private void Button_Click(object sender, RoutedEventArgs e) { Close(); } } }
Добавлено через 8 минут
Вот тебе пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
using System; namespace WpfApp1 { public class ButtonEventArgs { public string Text { get; } public ButtonEventArgs(string text) { Text = text; } } public class ButtonExample { public event EventHandlerButtonEventArgs> Click; // Просто от балды какие-то данные, не важно. public string Data { get; } public ButtonExample(string data) { Data = data; } protected void RaiseClick(ButtonEventArgs e) { Click?.Invoke(this, e); } public void OnClick() { RaiseClick(new ButtonEventArgs(Data)); } } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
using System.ComponentModel; using System.Windows; namespace WpfApp1 { public partial class MainWindow : Window { ButtonExample _proxyButton; public MainWindow() { InitializeComponent(); _proxyButton = new ButtonExample("ПРИМЕР"); _proxyButton.Click += ProxyButton_Click; } private void ProxyButton_Click(object sender, ButtonEventArgs e) { _textBlock.Text = e.Text; // Закрываем окно вызвав метод Close у окна. Close(); } // Нажмёшь на кнопке в UI, вызовется этот обработчик события private void Button_Click(object sender, RoutedEventArgs e) { // Вызываем метод кнопки посредника _proxyButton.OnClick(); } // Вызовется при попытке закрыть окно любым способом. protected override void OnClosing(CancelEventArgs e) { var response = MessageBox.Show("Do you really want to exit?", "Exiting. ", MessageBoxButton.YesNo, MessageBoxImage.Exclamation); if (response == MessageBoxResult.No) { e.Cancel = true; } else { Application.Current.Shutdown(); } base.OnClosing(e); } } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
x:Class="WpfApp1.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:local="clr-namespace:WpfApp1" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" Title="MainWindow" Width="800" Height="450" mc:Ignorable="d"> > x:Name="button1" Width="60" Height="30" Click="Button_Click" Content="Нажать" /> x:Name="_textBlock" HorizontalAlignment="Center" VerticalAlignment="Top" Text="TextBlock" TextWrapping="Wrap" Margin="0,155,0,0" /> > >
Добавлено через 33 секунды
Из кода видно, откуда берётся эта самая определённая сигнатура метода.
Добавлено через 57 секунд
Если непонятно, то просто запусти в отладке проставив везде точки останова (breakpoint).
Как закрыть приложение wpf

Запустить приложение – одно дело, но после того, как с ним поработали, его надо закрыть. В Windows приложения можно закрыть, нажав Х в правом верхнем углу или нажав кнопки Ctrl + F4. Еще есть вариант закрыть из диспетчера задач, но это уже очень не «юзер-френдли».
Приложение должно иметь кнопку завершения работы. Если кнопок много, то кнопку закрытия приложения можно вынести в меню, но кнопка «Закрыть» непременно должна быть.
В нашем приложении кнопок пока мало, потому разместим ее в видимой области (Рис.1).
В XAML файле пропишите:

Рис.1. Кнопка Закрыть
Теперь выделите кнопку в дизайнере или строчку кода кнопки Закрыть и перейдите в окно Properties / Event handlers for the selected elements. Для автоматической генерации обработчика для кнопки дважды кликните на текстовое поле около свойства Click (Рис.2)

Рис.2. Генерация прототипа обработчика кнопки
После клика Visual studio автоматически откроет код обработчика.
В обработчике для кнопки добавьте код «this.Close();»:
private void btn_Close_Click(object sender, RoutedEventArgs e)
Запустите приложение и попробуйте закрыть его кнопкой. Если все сделали верно, то окно приложения закроется.
Как закрыть приложение wpf
Кнопка поддерживает команды, и вместо обработки события Click мы можем прикрепить к ней команду. Но что делать, если элемент не поддерживает команду, а нам надо обработать какое-то его действие.
Например, у нас определен элемент ListBox, и мы хотим отслеживать выбор объекта в списке. Если бы мы использовали событийную модель, то мы бы обрабатывали событие SelectionChanged . Но мы знаем, что выделение объекта в списке ведет к изменению свойства SelectedItem элемента ListBox. Поэтому вместо применения события мы можем просто обрабатывать изменения свойства SelectedPhone в ApplicationViewModel, которое привязано к свойству SelectedItem у ListBox.
Аналогично у элемента TextBox есть событие TextChanged , которое вызывается при изменении вводимого текста. Но опять же изменение текста приводит к изменению свойства Text у элемента TextBox. Поэтому мы могли бы установить привязку для этого элемента к свойству Text:
А в классе Phone (либо в специальной ViewModel, которая инкапсулирует объект Phone) обрабатывать изменение свойства Title, которое бы синхронно менялось при вводе новых символов в текстовое поле:
public string Title < get < return phone.Title; >set < // обработка изменения свойства phone.Title = value; OnPropertyChanged("Title"); >>
В тоже время подобные действия можно установить не для всех событий. И если мы хотим связать события с командами, необходимо использовать дополнительный функционал.
В частности, нам надо добавить в проект через пакетный менеджер Nuget специальный пакет Microsoft.Xaml.Behaviors.Wpf :

Пусть у нас в проекте есть следующая модель Phone :
using System.ComponentModel; using System.Runtime.CompilerServices; namespace HelloApp < public class Phone : INotifyPropertyChanged < private string title; private string company; private int price; public Phone(string title, string company, int price) < this.title = title; this.company = company; this.price = price; >public string Title < get < return title; >set < title = value; OnPropertyChanged("Title"); >> public string Company < get < return company; >set < company = value; OnPropertyChanged("Company"); >> public int Price < get < return price; >set < price = value; OnPropertyChanged("Price"); >> public event PropertyChangedEventHandler? PropertyChanged; public void OnPropertyChanged([CallerMemberName] string prop = "") < if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(prop)); >> >
Затем определим следующий класс ApplicationViewModel , который будет представлять ViewModel:
using System; using System.Collections.ObjectModel; using System.ComponentModel; using System.Runtime.CompilerServices; using System.Windows.Input; namespace HelloApp < public class ApplicationViewModel : INotifyPropertyChanged < Phone? selectedPhone; public ObservableCollectionPhones < get; set; >// команда добавления нового объекта RelayCommand? addCommand; public RelayCommand AddCommand < get < return addCommand ?? (addCommand = new RelayCommand(obj =>< Phone phone = new Phone("", "", 0); Phones.Insert(0, phone); SelectedPhone = phone; >)); > > // команда удаления RelayCommand? removeCommand; public RelayCommand RemoveCommand < get < return removeCommand ?? (removeCommand = new RelayCommand(obj => < Phone? phone = obj as Phone; if (phone != null) < Phones.Remove(phone); >>, (obj) => Phones.Count > 0)); > > RelayCommand? doubleCommand; public RelayCommand DoubleCommand < get < return doubleCommand ?? (doubleCommand = new RelayCommand(obj => < Phone? phone = obj as Phone; if (phone != null) < Phone phoneCopy = new Phone(phone.Title, phone.Company, phone.Price); Phones.Insert(0, phoneCopy); >>)); > > public Phone? SelectedPhone < get < return selectedPhone; >set < selectedPhone = value; OnPropertyChanged("SelectedPhone"); >> public ApplicationViewModel() < Phones = new ObservableCollection< new Phone("iPhone 7", "Apple", 56000), new Phone("Galaxy S7 Edge", "Samsung", 60000), new Phone("Elite x3", "HP", 56000), new Phone("Mi5S", "Xiaomi", 35000) >; > public event PropertyChangedEventHandler? PropertyChanged; public void OnPropertyChanged([CallerMemberName] string prop = "") < if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(prop)); >> public class RelayCommand : ICommand < Actionexecute; Func? canExecute; public event EventHandler? CanExecuteChanged < add < CommandManager.RequerySuggested += value; >remove < CommandManager.RequerySuggested -= value; >> public RelayCommand(Action execute, Func? canExecute = null) < this.execute = execute; this.canExecute = canExecute; >public bool CanExecute(object? parameter) < return canExecute == null || canExecute(parameter); >public void Execute(object? parameter) < execute(parameter); >> >
Среди прочего здесь определена команда DoubleCommand, которая добавляет копию объекта в список.
Далее добавим в представление кнопку, которая будет вызывать данную команду. Но, допустим, мы хотим выполнять эту команду, если по кнопке был совершен двойной щелчок, то есть если произошло событие MouseDoubleClick :
" /> " /> " /> " /> " /> " />
Для добавленной кнопки устанавливается свойство Interaction.Triggers , которое позволяет связать триггеры событий с командами и передать этим командам параметры:
В файле связанного кода MainPage.xaml.cs определим привязку ApplicationViewModel к контексту страницы MainPage
using System.Windows; namespace HelloApp < public partial class MainWindow : Window < public MainWindow() < InitializeComponent(); DataContext = new ApplicationViewModel(); >> >
Теперь по двойному нажатию на эту кнопку произойдет дублирование в списке выделенного элемента:
Как закрыть приложение wpf



Скачай курс
в приложении
Перейти в приложение
Открыть мобильную версию сайта
© 2013 — 2023. Stepik
Наши условия использования и конфиденциальности

Public user contributions licensed under cc-wiki license with attribution required