我希望能够通过使用DisplayRequest类来阻止屏幕保护程序在我的应用程序正在使用时触发,但我只想在它是活动应用程序时执行此操作。如果用户切换到另一个窗口/应用程序,那么我想像一个好公民,并再次允许屏幕保护程序。
我无法看到一种明显的方法来检测UWP应用何时获得/失去焦点(或被激活/停用)以及快速搜索并未提供任何见解。有人能指出我正确的方向吗?
答案 0 :(得分:13)
实际上非常简单:
Window.Current.Activated += Current_Activated;
private void Current_Activated(object sender, Windows.UI.Core.WindowActivatedEventArgs e)
{
if (e.WindowActivationState == CoreWindowActivationState.Deactivated)
{
// do stuff
}
else
{
// do different stuff
}
}
答案 1 :(得分:8)
我们可以使用CoreWindow.Activated
event来检测何时激活或停用UWP应用。当窗口完成激活或取消激活时,将触发此方法。对于UWP应用程序,我们通常只有一个窗口。因此,我们可以在Application.OnLaunched
方法中添加一些代码,例如以下代码来检测:
Window.Current.CoreWindow.Activated += (sender, args) =>
{
if (args.WindowActivationState == Windows.UI.Core.CoreWindowActivationState.Deactivated)
{
System.Diagnostics.Debug.WriteLine("Deactivated " + DateTime.Now);
}
else
{
System.Diagnostics.Debug.WriteLine("Activated " + DateTime.Now);
}
};
除此之外,您还可以使用CoreApplication.GetCurrentView
method或CoreWindow.GetForCurrentThread
method获取CoreWindow
。
答案 2 :(得分:3)
您不应该处理应用激活状态的更改。
请参阅How to prevent screen locks in your UWP apps。
自动请求处理
如果没有任何其他编码,当您的应用不再具有焦点时,您的RequestActive()调用也将被停用 - 换句话说,当您的应用进入暂停状态时。在Windows Phone移动设备和Windows 10 PC或平板电脑模式下的Surface Pro上,“您的应用程序不再具有焦点”意味着只要您的应用程序不再位于前台(顺便说一下,快照应用仍然算在前台) 。但是,在桌面模式的Windows 10 PC上,无论您的应用程序何时最小化,都将意味着它。在桌面模式下,请注意即使另一个应用程序窗口覆盖了您的应用程序窗口,UWP应用程序生命周期仍会将您的应用程序视为在前台运行。
非常酷的是,当您的应用程序返回前台或取消最小化时,RequestActive()调用将自动重新激活。你不需要做任何事情!
这也意味着如果另一个应用程序碰巧发出请求以保持显示活动,则它不能劫持同一设备上每个其他应用程序的行为。只要用户使用该应用程序,该请求就会很好。一旦应用程序被解雇或最小化,Windows 10就会恢复其常规的节能习惯,即使应用程序忘记调用RequestRelease()。
最后,当您的应用终止时,系统会自动清除所有剩余的显示活动请求。
这一切都是为了满足您的需求。
答案 3 :(得分:1)
我在主窗口上使用可见性更改事件。在应用程序中打开或关闭新窗口时不会触发该事件。
Window.Current.VisibilityChanged += OnVisibilityChanged;
/// <summary>
/// When the window visibility changes, the stuff happens
/// </summary>
/// <param name="sender">object sender</param>
/// <param name="e">VisibilityChangedEventArgs e</param>
private void OnVisibilityChanged(object sender, VisibilityChangedEventArgs e)
{
if (!e.Visible)
{
// do stuff
}
else
{
// do other stuff
}
}