Как показать полный экран Modal ContentDialog в Windows Phone 8.1

Когда пользователь пытается войти в мое приложение, я показываю ContentDialog, содержащий несколько TextBlocks и ProgressBar.

Я выбираю ContentDialog, потому что он является модальным и блокирует пользователя до тех пор, пока приложение не соберет необходимую информацию и не будет готово перейти к следующей странице.

Следующая ссылка показывает класс диалога контента, доступный для Windows Phone 8.1 (Universal Apps).

Следующий код отображает код, который я написал для отображения ContentDialog (я временно поставил это в OnNavigatedTo для тестирования, позже переместит его в соответствующую функцию уведомления)

//Progress Bar
ProgressBar bar = new ProgressBar();
bar.IsIndeterminate = true;

//Downloading Data text
TextBlock txt = new TextBlock();
txt.Text = "Downloading data...";
txt.FontSize = 17;
txt.Foreground = new SolidColorBrush(Colors.White);
txt.HorizontalAlignment = Windows.UI.Xaml.HorizontalAlignment.Center;

//This could take a few seconds
TextBlock txt2 = new TextBlock();
txt2.Text = "This could take a few seconds.";
txt2.FontSize = 17;
txt2.Foreground = new SolidColorBrush(Colors.White);
txt2.HorizontalAlignment = Windows.UI.Xaml.HorizontalAlignment.Center;

//Please do not close the application.
TextBlock txt3 = new TextBlock();
txt3.Text = "Please do not close the application.";
txt3.FontSize = 17;
txt3.Foreground = new SolidColorBrush(Colors.White);
txt3.HorizontalAlignment = Windows.UI.Xaml.HorizontalAlignment.Center;

StackPanel stk = new StackPanel();
stk.Children.Add(bar);
stk.Children.Add(txt);
stk.Children.Add(txt2);
stk.Children.Add(txt3);


ContentDialog dlg = new ContentDialog();
dlg.Content = stk;
SolidColorBrush color = new SolidColorBrush(Colors.Black);
color.Opacity = 0.7;
dlg.Background = color;
dlg.Margin = new Thickness(0, 250, 0, 0);
dlg.ShowAsync();

Это отображается как enter image description here Выше вы можете видеть, что это покрывает только часть фона.

Я хочу, чтобы он отображался как enter image description here

сделав полноэкранный режим.

Я попытался изменить высоту и другие свойства, но не смог заставить его работать.

Я был бы рад, если кто-то может указать мне в правильном направлении.

Ответ 1

Я нашел решение, которое устраняет код. Не уверен, что это больше работает. Но это позволяет мне легко использовать Binding, чтобы решить, когда отображать этот модальный диалог и когда его скрывать.

Это мой XAML

<Grid>
<Grid Visibility="{Binding IsDownloadingData}" Canvas.ZIndex="1" Background="{StaticResource PartiallyTransparentBlackColor}" HorizontalAlignment="Stretch">
    <Grid.RowDefinitions>
        <RowDefinition Height="*" />
        <RowDefinition Height="Auto" />
        <RowDefinition Height="Auto" />
        <RowDefinition Height="Auto" />
        <RowDefinition Height="Auto" />
        <RowDefinition Height="*" />
    </Grid.RowDefinitions>
    <ProgressBar Grid.Row="1" IsIndeterminate="True"/>
    <TextBlock Grid.Row="2" Text="Downloading Data..." FontSize="17" Foreground="White" HorizontalAlignment="Center"/>
    <TextBlock Grid.Row="3" Text="This could take a few seconds." FontSize="17" Foreground="White" HorizontalAlignment="Center"/>
    <TextBlock Grid.Row="4" Text="Please do not close the application." FontSize="17" Foreground="White" HorizontalAlignment="Center"/>
</Grid>
<ScrollViewer Canvas.ZIndex="0" VerticalAlignment="Stretch" Margin="0,10,0,10">
    <!-- The XAML that should be hidden goes here (In my case LOGIN PAGE XAML) -->
</ScrollViewer>

Я играю с видимостью сетки, которая имеет Canvas.ZIndex = "1", используя привязку, и решает, когда отображать модальное окно.

Ответ 2

Вы можете, например, разместить Grid как содержимое вашего ContentDialog и установить его Height/Width как Bounds текущего окна или LayoutGrid:

// your code
stk.VerticalAlignment = Windows.UI.Xaml.VerticalAlignment.Center;
Grid contentGrid = new Grid();
contentGrid.Height = Window.Current.Bounds.Height;
contentGrid.Width = Window.Current.Bounds.Width;
// or from LayoutGrid
//contentGrid.Height = LayoutRoot.ActualHeight;
//contentGrid.Width = LayoutRoot.ActualWidth;
contentGrid.Width -= 40; // it seems that ContentDialog has some defaul margin
contentGrid.Children.Add(stk);

ContentDialog dlg = new ContentDialog();
dlg.Content = contentGrid;
SolidColorBrush color = new SolidColorBrush(Colors.Black);
color.Opacity = 0.7;
dlg.Background = color;
await dlg.ShowAsync();

Вы также можете придумать PopUp.

Ответ 3

В Windows Phone 8.1 ContentDialog имеет свойство FullSizeDesired boolean, которое, когда установлено значение true, откроет диалог в полноразмерном режиме. (Ссылка MSDN). При желании вам нужно установить Background на прозрачное значение цвета.