Сочетания клавиш на панели инструментов - PullRequest
0 голосов
/ 10 сентября 2009

Я пишу приложение WPF всего несколькими командами, поэтому я использую панель инструментов без меню. Я хотел бы назначить сочетания клавиш Ctrl для кнопок на панели инструментов. Есть ли простой способ сделать это, не создавая маршрутизируемые команды или ICommands просто для поддержки ярлыков? Я бы предпочел сделать это в XAML, а не с выделенным кодом.

Ответы [ 3 ]

1 голос
/ 10 сентября 2009

Вам нужен код, одно событие сообщает команде, может ли она быть выполнена (обычно не более нескольких строк), другое - что нужно делать, поэтому каждый связанный с ним элемент управления делает то же самое. Вот очень простой пример:

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");
        }
    }
}

РЕДАКТИРОВАТЬ: По запросу RichardOD. Вот немного больше информации, которую я разместил в своем комментарии:

<Button Command="ApplicationCommands.New">

Это ставит жест клавиатуры Ctrl + N на кнопку. Если бы вы должны были сделать

<Button Command="ApplicationCommands.Open">

Было бы поставить Ctrl + O. Это неявно реализовано в CommandBindings WPF. Вы даже можете создать свою собственную команду своим собственным жестом. И если вы привяжете команду к пункту меню, она автоматически покажет жест рядом с именем команды без каких-либо дополнительных усилий, просто:

<MenuItem Command="ApplicationCommands.New" />

Это покажет [Новый Ctrl + N] в пункте меню.

0 голосов
/ 11 декабря 2012

Самый простой и грязный способ - просто добавить сочетание клавиш самостоятельно. Конечно, если вы измените ярлык, который вы используете в 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>
0 голосов
/ 12 сентября 2009

Я пришел к выводу, что WPF не предоставляет простой способ добавления клавиши Ctrl к кнопке. Я решил свою проблему, перехватывая нажатия клавиш в выделенном фрагменте кода, а затем вызывая соответствующую ICommand - ICommand, с которой связано свойство Command соответствующей кнопки. Это немного уродливый хак, но это работает, и, кажется, это лучший подход в данных обстоятельствах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...