忙表明模态对话框不涵盖BottomAppBar

忙表明模态对话框不涵盖BottomAppBar

问题描述:

我用忙对话框实现从Template10Sample项目,可惜的是,我不能在网上了忙表明模态对话框不涵盖BottomAppBar

忙指示被实现为ModalDialog与分配的用户控件上找到它的ModalContent。显示和隐藏它的代码可以在下面找到。

问题是,我使用BottomAppBar进行应用程序导航,并且此栏未被模态对话框覆盖,并且所有按钮都保持不变。它看起来好像酒吧不是窗户的内容,这很奇怪。

为什么?如何< WUT :)

var modal = Window.Current.Content as ModalDialog; 
var view = modal.ModalContent as BusyControl; 
if (view == null) { 
    modal.ModalContent = view = new BusyControl(); 
} 
modal.IsModal = view.IsBusy = busy; 
view.BusyText = text; 

XAML:

<UserControl 
    x:Class="Foo.Views.BusyControl" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="using:Foo.Views" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    mc:Ignorable="d" 
    d:DesignHeight="300" 
    d:DesignWidth="400"> 
    <Viewbox Height="32" HorizontalAlignment="Center" VerticalAlignment="Center"> 
     <Grid> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="Auto" /> 
       <ColumnDefinition /> 
      </Grid.ColumnDefinitions> 
      <ProgressRing Width="16" Height="16" Foreground="White" IsActive="{x:Bind IsBusy, Mode=OneWay}" /> 
      <TextBlock Grid.Column="1" Margin="12,0,0,0" VerticalAlignment="Center" Foreground="White" Text="{x:Bind BusyText, Mode=OneWay, FallbackValue='TODO Localization Please Wait...'}" /> 
     </Grid> 
    </Viewbox> 

</UserControl> 

enter image description here

这是怎么看起来像


我想我找到了问题的根源。检查可视化树后,我发现CommandBar位于PopupRoot树节点下(不知道它是什么,不能谷歌它),而ModalDialog和实际应用程序内容位于RootScrollViewer /../ ModalDialog/...因此模式对话框不能覆盖CommandBar本身。

不知道该如何处理它。

+0

我想我找到了问题的根源。检查可视化树后,我发现CommandBar位于PopupRoot树节点下(不知道它是什么,不能谷歌它),而ModalDialog和实际应用程序内容位于RootScrollViewer /../ ModalDialog/...因此模式对话框不能覆盖CommandBar本身。不知道该如何处理它。 –

MessageDialog内置替代方案,使用起来非常简单。

它'冻结'主窗口,直到你关闭它,你可以添加更多的按钮和内容,并从中获取反馈。 获取更多信息,请访问: https://docs.microsoft.com/en-us/uwp/api/windows.ui.popups.messagedialog

实例的使用:

private async void Button_Clicked_1(object sender, RoutedEventArgs e)//event 
     { 
     MessageDialog dialog = new MessageDialog("My Modal Window"); 
      await dialog.ShowAsync();//waits for window to return 

     } 

正如你可以看到主机这样的窗口功能必须是异步的,所以为了以编程方式火了这样的窗口或任何类似的UI变化对于这个问题是使用接线员:

var dis=CoreApplication.MainView; await dis.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.High, 
() => { MessageDialog dialog = new MessageDialog("My Modal Window"); 
      await dialog.ShowAsync();//waits for window to return} 

只有ContentDialogMessageDialog可以是模式。由于MessageDialog无法编辑,因此可以使用'ContentDialog'。

最终,你可以只发生在一切电网和其将正常工作:

<Grid> 
    <Grid> 
     ... 
    </Grid> 
    <Grid Visibility={x:Bind IsModal, Mode=OneWay} Background="#00000055"> 
      <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="Auto" /> 
      <ColumnDefinition /> 
     </Grid.ColumnDefinitions> 
     <ProgressRing Width="16" Height="16" Foreground="White" IsActive="{x:Bind IsBusy, Mode=OneWay}" /> 
     <TextBlock Grid.Column="1" Margin="12,0,0,0" VerticalAlignment="Center" Foreground="White" Text="{x:Bind BusyText, Mode=OneWay, FallbackValue='TODO Localization Please Wait...'}" /> 
    </Grid> 
</Grid>