Ответ 1
Сначала добавьте пространство имен приложений в начало файла xaml, которое будет использовать привязку: ex.
xmlns:main="clr-namespace:MyApplication"
Затем добавьте собственный статический класс, содержащий команды вне класс главного окна: ex.
public static class Command
{
public static RoutedCommand GSToggleCmd = new RoutedCommand();
public static RoutedCommand ScreenZoomCmd = new RoutedCommand();
}
Мой класс главного окна оказался "MainWindow"; Я определил класс Command прямо под ним.
Наконец, добавьте привязки команд в файле xaml
<Window.CommandBindings>
<CommandBinding Command="main:Command.GSToggleCmd" Executed="GameStateToggleExecuted" />
<CommandBinding Command="main:Command.ScreenZoomCmd" Executed="ApplyScreenFitCmd" />
</Window.CommandBindings>
Command=""
относится к RoutedCommand
, к которому вы привязаны. Я назвал мою ссылку на пространство имен main
, поэтому синтаксис main:Command.nameofcommand
Executed=""
относится к функции, вызванной при запуске команды.
Пример функции Executed
:
private void ApplyScreenFitCmd( object sender, ExecutedRoutedEventArgs args )
{
string proportionStr = args.Parameter as string;
}
И что это. Минималистичный, простой подход к использованию CommandBindings
в WPF
.
Чтобы добавить команду, просто вставьте новый статический RoutedCommand
в класс Command
и добавьте CommandBinding
в файл xaml под Window.CommandBindings
Примечание:
Редактор Visual Studio Xaml может сначала пожаловаться на то, что некоторая команда не может быть найдена. Построение проекта решит проблему.
Дополнительная информация:
Вы также можете запустить CommandBindings
через InputBindings. (ключевые триггеры)
Пример (помещается в файл Xaml, который будет их использовать):
<Window.InputBindings>
<KeyBinding Key="F5" Command="main:Command.GSToggleCmd" />
<KeyBinding Modifiers="Shift+Alt" Key="Q" Command="main:Command.ScreenZoomCmd" CommandParameter="1.0" />
<KeyBinding Modifiers="Alt" Key="W" Command="main:Command.ScreenZoomCmd" CommandParameter="0.75" />
<KeyBinding Modifiers="Alt" Key="E" Command="main:Command.ScreenZoomCmd" CommandParameter="0.5" />
</Window.InputBindings>
Итак, в основном Key
нажмите триггеры KeyBinding
, который, в свою очередь, вызывает CommandBinding
указанной команды, вызывая соответствующую функцию вызова.
Как и в приведенном выше примере, вы также можете определить CommandParameter
, чтобы отправить параметр в вызываемую функцию. Самое приятное в этом состоит в том, что, как и выше, вы можете повторно использовать один и тот же CommandBinding
, просто вставляя разные CommandParameters
.
Вы также можете запустить CommandBindings
через Кнопки, MenuItems и т.д.
Пример:
<MenuItem Header="100%" InputGestureText="Alt+Q" Command="main:Command.ScreenZoomCmd" CommandParameter="1.0"/>
Это тот же синтаксис, что и с InputBindings
.
Мне потребовалось некоторое время, прежде чем я установил минималистский, единообразный способ использования привязок в WPF. Я надеюсь, что эта статья предотвратит всю борьбу, которую эта концепция, по-видимому, легко вызывает.