Я пишу приложение WPF всего несколькими командами, поэтому я использую панель инструментов без меню. Я хотел бы назначить сочетания клавиш ctrl на кнопки на панели инструментов. Есть ли простой способ сделать это, без необходимости создавать маршрутизированные команды или ICommands только для поддержки ярлыков? Я бы предпочел сделать это в XAML, а не в коде.Ярлыки клавиш на панели инструментов
ответ
Я пришел к выводу, что WPF не предоставляет простой способ добавить клавишу Ctrl к кнопке. Я решил проблему, улавливая нажатие клавиш в коде, а затем вызывая соответствующую ICommand - ICommand, к которой привязано свойство Command соответствующей кнопки. Это немного уродливый взлом, но он работает, и, похоже, это лучший подход в данных обстоятельствах.
Вам нужен код, одно событие сообщает команде, может ли оно быть выполнено (не более нескольких строк обычно), а другое - что делать, поэтому каждый связанный с ним контроль делает то же самое. Вот очень простой пример:
XAML:
<UserControl x:Class="WPFTests.AppCommands"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="300" Width="300">
<UserControl.CommandBindings>
<CommandBinding Command="ApplicationCommands.New" CanExecute="CommandBinding_CanExecute" Executed="CommandBinding_Executed" />
</UserControl.CommandBindings>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<CheckBox Grid.Row="0" Height="16" Name="checkBoxCanExecute" Margin="8" IsChecked="true">Can execute</CheckBox>
<Button Grid.Row="1" Height="24" Padding="8,0,8,0" HorizontalAlignment="Left" Margin="8" Command="ApplicationCommands.New">ApplicationCommand.New</Button>
</Grid>
</UserControl>
C#
использованием System.Windows; с использованием System.Windows.Controls; с использованием System.Windows.Input;
namespace WPFTests
{
/// <summary>
/// Interaction logic for AppCommands.xaml
/// </summary>
public partial class AppCommands : UserControl
{
public AppCommands()
{
InitializeComponent();
}
private void CommandBinding_CanExecute(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = (bool)checkBoxCanExecute.IsChecked;
}
private void CommandBinding_Executed(object sender, ExecutedRoutedEventArgs e)
{
MessageBox.Show("New executed");
}
}
}
EDIT: По запросу RichardOD. Вот немного больше информации я отвечал в моем комментарии:
<Button Command="ApplicationCommands.New">
Это ставит клавиатуру жест Ctrl + N на кнопке. Если вы должны были сделать
<Button Command="ApplicationCommands.Open">
Он поместил бы Ctrl + O. Это неявно реализовано в CommandBindings WPF. Вы можете даже создать свою собственную команду своим собственным жестом. А если связать команду с пунктом меню, он будет автоматически показывать жест рядом с названием команды без каких-либо дополнительных efforr, просто:
<MenuItem Command="ApplicationCommands.New" />
Это покажет [Новый Ctrl + N] в пункте меню.
Спасибо за ответ, но я не думаю, что он отвечает на вопрос, который я задал. Все, что я хочу сделать, это поместить Ctrl-Key на кнопку; например, Ctrl-O, чтобы вызвать кнопку «Открыть файл». –
+1 Карло, я бы переместил ваш комментарий в ответ, так как ваш комментарий действительно является ответом. :) – RichardOD
Самый простой и грязный способ - просто добавить ярлык клавиатуры самостоятельно. Конечно, если вы меняете ярлык, который вы используете в Command, вы должны вручную его изменить в подсказке инструмента. Но может быть, мы можем привязать текст подсказки инструмента к свойствам Command, чтобы получить ярлык через привязку? Кто-нибудь знает, если это возможно?
<Button Command="{Binding OpenDllCommand}" Content="Bla-bla >
<Button.ToolTip>
<StackPanel>
<TextBlock Text="F6" FontWeight="Bold" />
<TextBlock Text="Open MbUnit/MINT DLL with tests" />
</StackPanel>
</Button.ToolTip>
</Button>
- 1. Ярлыки панели инструментов Eclipse
- 2. SearchView скрывает другие ярлыки на панели инструментов
- 3. Ярлыки команд TortoiseGit в панели инструментов окна
- 4. Можно ли заменить ярлыки на панели инструментов CKEditor?
- 5. Как показать ярлыки на моей панели инструментов WinJS?
- 6. Matplotlib - Ярлыки на панели инструментов навигации не работают
- 7. SearchView на панели инструментов аналогично панели инструментов
- 8. Отключить ярлыки клавиш Jupyter
- 9. Ярлыки клавиш в WPF
- 10. Ярлыки клавиш в VB.NET
- 11. SendKeys.Send Ярлыки клавиш
- 12. Ярлыки клавиш для вызова контекстных меню
- 13. Как настроить ярлыки клавиш на окнах?
- 14. EditText на панели инструментов
- 15. Поиск на панели инструментов
- 16. Ошибка на панели инструментов
- 17. Добавить ярлыки в элементы панели инструментов в XCODE
- 18. Ярлыки клавиш в расширениях Chrome
- 19. Ярлыки клавиш Eclipse для VisualStudio
- 20. Xcode клавиш, чтобы найти ярлыки
- 21. Ярлыки клавиш Visual Studio 2010
- 22. PyQt5: Ярлыки клавиш w/QAction
- 23. Оказание вспомогательных инструментов на вертикальной панели инструментов
- 24. Недавно созданный значок панели инструментов не отображается на панели инструментов
- 25. пространства между значком на панели инструментов и названием панели инструментов
- 26. Добавление нижней панели инструментов, аналогичной панели инструментов на устройствах iOS
- 27. Ярлыки панели R-диаграммы
- 28. Что такое ярлыки клавишной панели bigquery?
- 29. Добавление объекта на панели инструментов
- 30. Реализация SearchView на панели инструментов
Основываясь на вашем комментарии к моему ответу, я не уверен, что понял ваш вопрос. Но я думаю, что ты это переусердствовал.WPF CommandBindings делает именно то, что вам нужно, пока элемент управления, который вы используете, имеет атрибут Command. Вы просто устанавливаете ApplicationCommand, и жест клавиатуры автоматически устанавливается на него. В моем примере, если вы сделаете Ctrl + O, CommandBinding_Executed будет запущен. – Carlo