如何在 uwp 中关闭辅助视图

Posted

技术标签:

【中文标题】如何在 uwp 中关闭辅助视图【英文标题】:How to close secondary view in uwp 【发布时间】:2019-02-14 13:20:38 【问题描述】:

我正在构建一个 UWP 应用,它会在主视图之外生成第二个视图。

我想关闭主视图的第二个视图。 我已经尝试用谷歌搜索它,但其中大部分只告诉我如何生成而不是关闭。

下面是我用来打开一个新视图的代码块,在它的底部是我如何尝试关闭新创建的总是以失败告终的视图。

    public async void OpenNew(Type type, string title, string uniqueId)
    
        CoreApplicationView newView = null;
        if (!IsExists(uniqueId))
        
            newView = CoreApplication.CreateNewView();

            int newViewId = 0;
            await newView.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
            
                Frame frame = new Frame();
                Window.Current.Content = frame;
                Window.Current.Activate();
                frame.Navigate(type);

                newViewId = ApplicationView.GetForCurrentView().Id;
                ApplicationView.GetForCurrentView().Title = title;
                ApplicationView.GetForCurrentView().Consolidated += OnConsolidated;
            );

            await ApplicationViewSwitcher.TryShowAsStandaloneAsync(newViewId);
            _uniqueIds.Add(uniqueId, newViewId);
        

        // Below code testing on how I try to close newly spawned view but always throw error
        await Task.Delay(5000).ContinueWith(async _ =>
        
            await Window.Current.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
            
                newView.CoreWindow.Close();
            );
        );
    

这段代码总是抛出

Exception thrown: 'System.NullReferenceException'

任何链接或教程如何做到这一点?

【问题讨论】:

请提供更多详细信息。最好是一些代码。你用什么容器控件?关闭是什么意思?完全隐藏?当您的次要视图关闭时,您希望该空间发生什么? 我更新了我的问题 在哪一行引发了异常? 【参考方案1】:

Nvm,伙计们,我得到了答案。以下是我尝试从上述代码关闭第二个视图的部分更改:

await Task.Delay(5000).ContinueWith(async _ =>

    await newView.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
    
        CoreWindow.GetForCurrentThread().Close();
    );
);

【讨论】:

以上是关于如何在 uwp 中关闭辅助视图的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SwiftUI 中关闭 ResearchKit 模态视图?

如何在 SwiftUI 中关闭工作表时刷新视图

在 UWP 表单中关闭用户与 WebView 的交互

如何在 Angular 2 中关闭一个属性的视图封装?

在alertview中选择取消按钮时如何从数组中关闭所有alertview?

如何在导航控制器中关闭视图控制器,而不关闭整个堆栈