首页 文章

在UWP应用程序中插入另一个类似visual root的popuproot

提问于
浏览
0

我有一个使用一些ContentDialogs的UWP应用程序 . 我看到它们出现在PopupRoot可视化树中 . 我需要在所有其他可视树之上的另一个类似PopupRoot的可视树,它将具有半透明背景和繁忙指示符,这将阻止用户与应用程序交互,同时保留应用程序外观和应用程序状态,直到忙碌指标已完成 .

如下图所示,visual studio在调试时会执行此操作以注入实时可视化树工具 . (它是PopupRoot下面的Grid) .

Visual studio does this when debugging to inject the live visual tree tools.

由于UWP / WinRT的源代码不可用,我很难搞清楚这一点 . 我找到了PopupRoot的WPF源代码,但它只是边际有用 .

如果这是不可能的,我将必须在主RootScrollViewer可视树中实现我自己的弹出根,并在那里显示我的所有对话框 . 这将是我想避免的大量工作 .

2 回答

  • 0

    您可以创建一个“shell”页面,其中包含一个包含应用程序页面的Frame,之后您可以定义某种忙碌指示符,然后在需要时启动/关闭它 . 因为它是在XAML树中的帧之后定义的,所以它将出现在它的顶部 .

    以下是 AppShell.xaml 页面内的内容片段

    <Grid>
       <Frame x:Name="AppFrame" />
       <Grid Visibility="Collapsed" x:Name="BusyIndicator">
          <ProgressRing />
          ... etc.
       </Grid>
    </Grid>
    

    在代码隐藏 AppShell.xaml.cs 中,您可以提供一个公共方法:

    public void SetBusy( bool visible )
    {
        BusyIndicator.Visibility = 
           visible ? Visibility.Visible : Visibility.Collapsed;
    }
    

    现在,只要你需要打开忙碌指示器,你就可以这样做:

    ( Window.Current.Content as AppShell ).SetBusy( true );
    

    这绝对不是最干净的解决方案,您应该以某种方式封装它,这样您就不需要查询当前窗口,但基本思想成立 .

  • 0

    所以我猜答案是否定的 . 我最终在主RootScrollViewer可视化树中实现了我自己的弹出式根,就像我在放弃ContentDialog控件的问题中所述 .

    谢谢所有回复试图帮助的人!

相关问题