より良いエンジニアを目指して

1日1つ。良くなる!上手くなる!

WPFのユーザーコントロール側からショートカットキーを設定する

以下のようなOK/Cancelのコントロールを作成して各画面に配置していたのですが、OKといったらAlt+Oのショートカットキーでしょうと。

f:id:rimever:20210324211316p:plain

素直にXAMLでWindow.InputBindingsを指定して回るのも手間だなあということで、以下のようにしてみました。

        public OkCancelPanel()
        {
            InitializeComponent();
            Loaded += OnLoaded;
        }

        private void OnLoaded(object sender, RoutedEventArgs e)
        {
            var parentWindow = Window.GetWindow(this);
            if (parentWindow != null && OkCommand != null)
            {
                parentWindow.InputBindings.Add(new KeyBinding(OkCommand, Key.O, ModifierKeys.Alt));
            }
        }

コンストラクタの時点ではウインドウを取得するとnullとなるので、Loadedのタイミングで設定しています。