Страницы

Поиск по вопросам

суббота, 15 февраля 2020 г.

WPF: Самый простой способ вызывать метод сочетанием клавиш

#c_sharp #wpf #xaml


Я просмотрел много вопросов и ответов на англоязычном Stack Overflow, но так и не
нашел ответа на вопрос: как вызывать какой-либо метод с помощью сочетания клавиш в
WPF-приложениях? В Windows Forms Application это делалось довольно просто, но похоже
в более развитом WPF это гораздо сложнее.

Ниже представлен классический пример. Нигде, где я смотел, толком не объяснено, что
именно мы привязываем. Но это явно не метод. Что это вообще за ApplicationCommands? 


  



В другом вопросе было сказано: "XAML - это язык разметки, а потому мы не можем так
просто вызвать метод оттуда". Хорошо, почему мы тогда с лёгкостью можем привязать метод
к кнопке?


Ответы

Ответ 1



Ответ на твой вопрос: UserCommands.cs using System.Windows.Input; namespace Wpf_CommandsWithBindings { public static class UserCommands { static UserCommands() { // Можно прописать горячие клавиши по умолчанию InputGestureCollection inputs = new InputGestureCollection(); inputs.Add(new KeyGesture(Key.S, ModifierKeys.Control, "Ctrl+S")); SomeCommand = new RoutedUICommand("Some", "SomeCommand", typeof(UserCommands), inputs); } public static RoutedCommand SomeCommand { get; private set; } } } MainWindow.xaml MainWindow.xaml.cs using System.Windows; namespace Wpf_CommandsWithBindings { public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void ShowMessage_Executed(object sender, RoutedEventArgs e) { MessageBox.Show(this, "Test"); } } } Что это вообще за ApplicationCommands? В WPF есть набор заготовленных комманд, которые не содержат никакого конкретного кода (что-то делающего полезное). Эти команды представляют общую задачу приложения, например, открыть папку, печать документа, открытие документа и т.д. То есть просто "задача" без конкретной реализации. Для выполнения конкретных действий командой, нужно использовать привязку, которая будет в коде вызывать конкретное действие. Может возникнуть вопрос, зачем нужны вообще эти заготовленные команды? Например, если сторонний разработчик создаст элемент управления DirectoryView, то такой элемент управления может внутри своей логики использовать команду ApplicationCommands.Open для вызова кода, открывающего корневую папку. По идее, если у тебя уже есть привязка для этой команды, то при использовании элемента управления уже не нужно ничего дописывать. Пример, из которого видно, что достаточно прописать команду в элементе управления и в зависимости от места использования этого элемента будут выполняться разные действия (в данном примере демонстрация, что это вообще работает): UserControlTest.xaml

Комментариев нет:

Отправить комментарий