2012-02-29 3 views
3

Как я могу установить shortKey для меню, например, для этого кода:Как установить shortkey для меню?

<Menu > 
    <MenuItem Header="File" > 
     <MenuItem Header="Save" ToolTip="Ctrl + S" Click="Save_Click"/> 
     <MenuItem Header="Save As" ToolTip="Ctrl + S + Shift" Click="SaveAs_Click"/> 
     <MenuItem Header="SelectAll" ToolTip="Ctrl + A" Click="SelectAll_Click"/> 
    </MenuItem> 
</Menu> 

Другими словами, когда я нажал Ctrl-S, Save_Click будет поднимать и так далее.

+0

сделать вы хотите, чтобы ваши кнопки быстрого доступа доступен только с вашего окна или даже с рабочего стола? – GaaRa

ответ

2

Как сказал Игорь. Однако, чтобы избежать написания собственной реализации ICommand, вы можете добавить CommandBinding для команд Save и SaveAs.

<Window x:Class="MenuShotCuts.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
    <Window.CommandBindings> 
     <CommandBinding Command="ApplicationCommands.Save" 
         Executed="SaveCommandHandler" 
        /> 
    </Window.CommandBindings> 
    <!-- implementation --> 
</Window> 

Вам нужно изменить свойство Command в MenuItem, а также:

<MenuItem Header="Save" ToolTip="Ctrl + S" Command="ApplicationCommands.Save"/> 

В коде позади:

// Save executed handler 
private void SaveCommandHandler(object sender, ExecutedRoutedEventArgs e) 
{ 
    // do something 
} 
3

Я думаю, что лучший способ заключается в использовании WPF команда

<Window x:Class="MenuShotCuts.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
    <Window.InputBindings> 
     <KeyBinding Key="S" Modifiers="Ctrl" Command="{Binding SaveCmd}" /> 
    </Window.InputBindings> 
    <Grid> 
     <Menu > 
      <MenuItem Header="File" > 
       <MenuItem Header="Save" ToolTip="Ctrl + S" Command="{Binding SaveCmd}"/> 
      </MenuItem> 
     </Menu> 
    </Grid> 
</Window> 

В коде позади:

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 

     this.DataContext = this; 

     m_saveCmd = new SaveCommand(); 
    } 

    private SaveCommand m_saveCmd; 
    public SaveCommand SaveCmd 
    { 
     get 
     { 
      return m_saveCmd; 
     } 
    } 
} 

public class SaveCommand : ICommand 
{ 
    #region ICommand Members 

    public bool CanExecute(object parameter) 
    { 
     return true; 
    } 

    public event EventHandler CanExecuteChanged; 

    public void Execute(object parameter) 
    { 
     MessageBox.Show("Saved", "Info"); 
    } 

    #endregion 
} 
Смежные вопросы