我有多个页面的应用程序,与 navigateto 逻辑连接。
其中一个页面包含带有网络摄像头绑定(bind)的媒体元素。进入后台模式后(例如,通过最小化应用程序思想单击系统菜单),相机元素停止。所以,我订阅了
Windows.ApplicationModel.Core.CoreApplication.LeavingBackground 事件并重新初始化相机。如果当前页面是包含此订阅和相机元素的页面,则一切正常。如果当前页面是另一个页面,并且应用已恢复,LeavingBackground 无论如何都会发生此事件,因此隐藏页面会尝试重新初始化相机。
我尝试设置 this.NavigationCacheMode = NavigationCacheMode.Disabled,因此根据 MSDN,理论上必须在 NavigatedTo 事件之后处理包含媒体元素和订阅 LeavingBackground 事件的页面实例。但这是我不明白的另一种方式。
相机页面似乎只实例化一次,并且永远实例化,并且总是会收到 LeavingBackgound 事件 - 这对我来说很糟糕。
我试图将 Window.Current.Content.GetType() 与包含相机元素的页面类型进行比较,但有时此类型包含其他页面的类型,但有时它随 Content.Content 移动,所以我被卡住了。
最佳答案
我假设您在离开该页面时必须注销事件处理程序:
public sealed partial class WebCamPage
{
public WebCamPage()
{
InitializeComponent();
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
Windows.ApplicationModel.Core.CoreApplication.LeavingBackground += OnLeavingBackground;
}
protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
{
Windows.ApplicationModel.Core.CoreApplication.LeavingBackground -= OnLeavingBackground;
}
private void OnLeavingBackground(object sender, LeavingBackgroundEventArgs e)
{
// Your code here.
}
}
关于UWP 页面生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43422637/