ユーザーが別のアプリケーションに移動するたびに一時停止したいゲームがあります。たとえば、チャーム メニューが選択されている場合、ユーザーは Windows キーを押したり、Alt-Tab キーを押して別のアプリケーションに移動したり、別のアプリケーションをクリックしたり、アプリケーションのフォーカスを失う可能性のあるその他の操作を行ったりします。
もちろん、これは些細なことです。Page
私はとしか持っておらず、でイベントをCanvas
試しましたが、それらは起動しません。GotFocus
LostFocus
Canvas
最も近いのは、ポインターをキャプチャした後PointerCaptureLost
に onを使用することです。CoreWindow
これは、チャーム メニューが選択されている場合のアプリケーションの切り替えには機能しますが、Windows キーが押された場合には機能しません。
編集:
以下の Chris Bowen の助けを借りて、最終的な「解決策」は次のとおりです。
public MainPage() {
this.InitializeComponent();
CapturePointer();
Window.Current.CoreWindow.PointerCaptureLost += PointerCaptureLost;
Window.Current.CoreWindow.PointerPressed += PointerPressed;
Window.Current.VisibilityChanged += VisibilityChanged;
}
private void VisibilityChanged(object sender, VisibilityChangedEventArgs e) {
if(e.Visible) {
CapturePointer();
}
else {
Pause();
}
}
void PointerPressed(CoreWindow sender, PointerEventArgs args) {
CapturePointer();
}
private void CapturePointer() {
if(hasCapture == false) {
Window.Current.CoreWindow.SetPointerCapture();
hasCapture = true;
}
}
void PointerCaptureLost(CoreWindow sender, PointerEventArgs args) {
hasCapture = false;
Pause();
}
private bool hasCapture;
それはまだ簡単な方法であるように思われるので、もっとエレガントなものを見つけたら教えてください.