I understand the standard way is by creating Commands and then adding your shortcut keys to them as InputGestures. This enables the shortcut keys to work even if they're not hooked up to any controls. And since menu items understand keyboard gestures, they'll automatically display your shortcut key in the menu items text, if you hook that command up to your menu item.
A. Create static attribute to hold command (preferably as property in static class you create for commands - but for simple example, just using static attribute in window .cs):
public static RoutedCommand MyCommand = new RoutedCommand( );
B. Add the shortcut key(s) that should invoke method:
MyCommand.InputGestures.Add( new KeyGesture( Key.S , ModifierKeys.Control ));
C. Create command binding that points to your method to call on execute, put these in the command bindings for the UI element under which it should work for (e.g., the window) & the method:
<Window.CommandBindings>
<CommandBinding Command="{x:Static local:MyWindow.MyCommand}" Executed="MyCommandExecuted"/>
</Window.CommandBindings>
private void MyCommandExecuted( object sender, ExecutedRoutedEventArgs e ) { ... }