我在Template10Sample项目中使用了繁忙的对话框实现,不幸的是我无法在网上找到
忙碌指示实现为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>
这就是它的样子
我想我找到了问题的根源。在检查可视化树后,我发现CommandBar位于PopupRoot树节点下(不知道它是什么,并且不能谷歌),而ModalDialog和实际应用程序内容位于RootScrollViewer /../ ModalDialog / ...因此模态对话框无法覆盖CommandBar本身。
不知道如何处理它。
答案 0 :(得分:0)
MessageDialog是替代使用的,非常简单易用。
它冻结&#39;在关闭它之前的主窗口,您可以添加更多按钮和内容以及从中获取反馈。 欲了解更多信息,请访 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
}
正如您所看到的,托管此类窗口的功能必须是Async,因此为了以编程方式启动此类窗口或任何类似的UI更改,请使用Dispatcher:
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}
答案 1 :(得分:0)
只有Bar.java
和ContentDialog
可以是模态的。由于MessageDialog
无法编辑,您可以使用`ContentDialog'。
最终你可以在所有内容上放置网格,它可以正常工作:
MessageDialog