每当用户移动到另一个应用程序时,我都会想要暂停一个游戏。例如,当选择了超级按钮菜单时,用户将Windows键,alt-tab按到另一个应用程序,单击另一个应用程序或任何其他会使应用程序失去焦点的内容。
当然这应该是微不足道的!我只有一个Page
和一个Canvas
,我在GotFocus
上尝试了LostFocus
和Canvas
个事件,但他们没有开火。
我最接近的是在捕获指针后在PointerCaptureLost
上使用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;
似乎他们的应该更容易,所以如果你发现更优雅的东西,请告诉我。
答案 0 :(得分:7)
尝试使用Window.VisibilityChanged事件。像这样:
public MainPage()
{
this.InitializeComponent();
Window.Current.VisibilityChanged += Current_VisibilityChanged;
}
void Current_VisibilityChanged(object sender, Windows.UI.Core.VisibilityChangedEventArgs e)
{
if (!e.Visible)
{
//Something useful
}
}
虽然它不会捕捉Charms激活,但它应该适用于你提到的其他情况。
答案 1 :(得分:0)
尝试使用App.xaml.cs中预定义的onSuspending
事件来处理游戏暂停。只要应用程序被挂起,事件就会触发,因此它可以正常工作。您可能需要对例如确保游戏实际上是在您尝试暂停之前开始运行,因为当应用程序中的任何页面被暂停时会触发此事件。