2012-04-10 119 views
2

當我點擊菜單條,然後按快捷鍵它的作品,但它不工作,否則。有什麼可以設置快捷鍵的範圍嗎?菜單快捷鍵範圍

XAML:

<Window x:Class="NewGUI_WPF.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:common="clr-namespace:Common;assembly=RecentFileListLib" 
    Title="Sezor" Height="Auto" Width="Auto" WindowStartupLocation="Manual" Icon="/NewGUI_WPF;component/Images/i161.ICO" WindowStyle="SingleBorderWindow" Focusable="False" ResizeMode="CanResize" mc:Ignorable="d" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" d:DesignHeight="243" d:DesignWidth="314" SizeToContent="Manual" WindowState="Maximized"> 

<Window.CommandBindings> 
    <CommandBinding Command="Save" Executed="SaveCommand" /> 
    <CommandBinding Command="Open" Executed="OpenCommand" /> 
</Window.CommandBindings> 

<Grid> 
    <Menu Height="23" Name="main_menu" VerticalAlignment="Top" HorizontalAlignment="Stretch" IsMainMenu="True"> 
     <MenuItem Name="MI_Case" Header="Case"> 
      <MenuItem Header="Open" Command="Open"> 
       <MenuItem.Icon> 
        <Image Height="16" Width="16" Source="/NewGUI_WPF;component/Images/openHS.png" /> 
       </MenuItem.Icon> 
      </MenuItem> 
      <MenuItem Header="Save" Name="MainMenu_File_Save" Command="Save"> 
       <MenuItem.Icon> 
        <Image Height="16" Width="16" Source="/NewGUI_WPF;component/Images/saveHS.png" /> 
       </MenuItem.Icon> 
      </MenuItem> 
      <MenuItem Header="Save as" Name="MainMenu_File_SaveAs" Click="MainMenu_File_SaveAs_Click" /> 
      <common:RecentFileList x:Name="RecentFileList" /> 
      <MenuItem Header="Quit" Click="MainMenu_File_Quit_Click" /> 
     </MenuItem> 
     <MenuItem Header="View"> 
      <MenuItem Header="Input File" Click="MainMenu_View_InputFile_Click" /> 
      <MenuItem Header="Mesh File" Click="MainMenu_View_meshFile_Click" /> 
      <MenuItem Name="MainMenu_View_Summary" Header="Summary" Click="MainMenu_View_summary_Click" /> 
     </MenuItem> 
     <MenuItem Header="Define" > 
      <MenuItem Header="Input File" Click="MainMenu_Define_InputFile_Click" Name="MainMenu_Define_InputFile" /> 
      <MenuItem Header="Mesh File" Click="MainMenu_Define_MeshFile_Click" Name="MainMenu_Define_MeshFile" /> 
      <MenuItem Header="Simulation File" Click="MainMenu_Define_SimulFile_Click" Name="MainMenu_Define_SimulFile" /> 
      <MenuItem Header="Boundaries" Click="MainMenu_Define_BC_Click" /> 
      <MenuItem Header="Initials" Click="MainMenu_Define_Initials_Click" /> 
      <MenuItem Header="Spatial Discretization" Click="MainMenu_Define_SpatDis_Click" />     
      <MenuItem Header="Flow" Click="MainMenu_Define_Flow_Click" /> 
      <MenuItem Header="Material" Click="MainMenu_Define_Material" /> 
      <MenuItem Header="Algoritm" Click="MainMenu_Define_Algoritm" /> 
      <MenuItem Header="Gradient Reconstruction"> 
       <RadioButton Content="Least-Squares" Checked="Least_Squares_Checked" Name="rad_GR_LS" /> 
       <RadioButton Content="Green-Gauss" Click="Green_Gauss_Checked" Name="rad_GR_GG" /> 
      </MenuItem> 
     </MenuItem> 
     <MenuItem Header="Run" > 
      <MenuItem Header="Simulation" Click="MainMenu_Run_Simulation_Click" /> 
     </MenuItem> 
    </Menu> 
    <Frame Height="Auto" HorizontalAlignment="Left" Margin="40,60,30,20" Name="frm_summary" VerticalAlignment="Top" Width="Auto" NavigationUIVisibility="Hidden" /> 
    <StatusBar Height="23" Name="statusBar1" VerticalAlignment="Bottom" Margin="0"> 
     <TextBlock Name="statBar_text_1"></TextBlock> 
    </StatusBar> 
</Grid> 

代碼:

private void OpenCommand(object sender, ExecutedRoutedEventArgs e) {...} 
private void SaveCommand(object sender, ExecutedRoutedEventArgs e) {...} 
+0

嗯......我在逐字輸入你的代碼到一個新的WPF項目,它實際上對我來說工作得很好。我正在運行Windows 7並使用Visual Studio 2010編譯。你在用什麼? – dharmatech 2012-04-10 21:10:14

+0

另外,你可以試試我粘貼下面的例子,看看它是否也不適用於你的系統?您可能想要在不同的開發箱上進行測試,以防您正在使用的輸入法出現奇怪的輸入偏差。 – dharmatech 2012-04-10 21:11:00

+0

此外,由於'control-s'是'Save'命令的默認值,所以您可以忽略'Window.InputBindings'部分。我在我的系統上這樣做了,鍵綁定工作。 – dharmatech 2012-04-10 21:12:40

回答

1

Window標記刪除Focusable="False"

+1

它的工作。 Thx花時間! – Shibli 2012-04-10 22:00:49

+1

@shibli沒問題!很高興我們發現了這個問題。發佈確切的代碼總是有幫助的。 ;-) – dharmatech 2012-04-10 22:03:51

1

看起來你需要添加CanExecuteCommandBinding和後面方法的相應的代碼。

這是一個最小化的演示,連接Control-S以啓動Help命令。

的XAML:

<Window x:Class="stackoverflow___scope_of_menu_shortcut_key.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="Help" CanExecute="HelpCanExecute" Executed="HelpExecuted"/> 
    </Window.CommandBindings> 

    <Window.InputBindings> 
     <KeyBinding Command="Help" Key="S" Modifiers="Control"/> 
    </Window.InputBindings> 

    <Menu> 
     <MenuItem Header="File"> 
      <MenuItem Header="Help" Name="HelpMenu" Command="Help"/> 
     </MenuItem> 
    </Menu> 

</Window> 

的背後代碼:

using System.Windows; 
using System.Windows.Input; 

namespace stackoverflow___scope_of_menu_shortcut_key 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 
     } 

     private void HelpCanExecute(object sender, CanExecuteRoutedEventArgs e) 
     { 
      e.CanExecute = true; 
     } 

     private void HelpExecuted(object sender, ExecutedRoutedEventArgs e) 
     { 
      System.Diagnostics.Process.Start("http://www.microsoft.com"); 
     } 
    } 
} 

請注意,如果您註釋掉行:

e.CanExecute = true; 

鍵綁定不再起作用。

下面是您的示例,將其簡化爲最低限度。這個作品在我的系統上:

XAML:

<Window x:Class="stackoverflow___scope_of_menu_shortcut_key.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="Save" Executed="MyCommand" /> 
    </Window.CommandBindings> 

    <MenuItem Header="Save" Command="ApplicationCommands.Save"/> 

</Window> 

後面的代碼:

using System.Windows; 
using System.Windows.Input; 

namespace stackoverflow___scope_of_menu_shortcut_key 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 
     } 

     private void MyCommand(object sender, ExecutedRoutedEventArgs e) 
     { 
      System.Diagnostics.Process.Start("http://www.microsoft.com"); 
     } 
    } 
} 
+0

我按照您的建議進行了更改,但情況仍然相同。 – Shibli 2012-04-10 20:58:48