質問: ### 前提・実現したいこと Xamarin.Formsで画像ビュアを作成しています。 UWPではPageRenderer内でDispatcher.AcceleratorKeyActivatedに追加することで取得できましたが、WPFではDispatcher自体がありません。 Control.PreviewKeyDownではキー入力を処理するコントロールにフォーカスがあると取得できましたが、それらにフォーカスが当たっていないときは無反応でした。 Formがアクティブな時、常にキーボードのイベントを取得するにはどのようにすればよいでしょうか。 ### 補足情報(FW/ツールのバージョンなど) Visual Studio 2017 Community 15.9.7 Xamarin.Forms 3.5.0.129452 Xamarin.Forms.Platform.WPF 3.5.0.129452
回答: これが正しい方法かわかりませんが、以下のやり方で実現できました。 1.myApp.WPF/MainWindow.xaml.cs に public static MainWindow MyWindow; を追加。 コンストラクタで MyWindow = this; 2.myApp.WPF/myCustomPageRenderer.cs で MainWindow.MyWindow のイベントハンドラを操作。 ``` protected override void OnElementChanged(ElementChangedEventArgs e) { base.OnElementChanged(e); if (e.OldElement != null) { MainWindow.MyWindow.PreviewKeyDown -= MyWindow_PreviewKeyDown; } if (e.NewElement != null) { MainWindow.MyWindow.PreviewKeyDown += MyWindow_PreviewKeyDown; } } ``` 何か問題がありそうならご指摘ください。