2012-02-29 77 views
3

如何設置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 2012-02-29 07:06:46

回答

2

正如伊戈爾說。但是,如果希望避免編寫自己的ICommand實現,可以爲Save和SaveAs命令添加CommandBinding。

<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 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 
}