Общая цель того, что вы пытаетесь достичь может быть достигнуто с помощью PushModalAsync и PopModalAsync методы Xamarin.FormsНавигация объект.
Скорее всего, это достаточно хорошо для того, что вам нужно - Однако - это не совсем модально. Я объясню после небольшого фрагмента кода: -
StackLayout objStackLayout = new StackLayout()
{
};
//
Button cmdButton_LaunchModalPage = new Button();
cmdButton_LaunchModalPage.Text = "Launch Modal Window";
objStackLayout.Children.Add(cmdButton_LaunchModalPage);
//
cmdButton_LaunchModalPage.Clicked += (async (o2, e2) =>
{
ContentPage objModalPage = new ContentPage();
objModalPage.Content = await CreatePageContent_Page2();
//
await Navigation.PushModalAsync(objModalPage);
//
// Code will get executed immediately here before the page is dismissed above.
});
//
return objStackLayout;
private async Task<StackLayout> CreatePageContent_Page2()
{
StackLayout objStackLayout = new StackLayout()
{
};
//
Button cmdButton_CloseModalPage = new Button();
cmdButton_CloseModalPage.Text = "Close";
objStackLayout.Children.Add(cmdButton_CloseModalPage);
//
cmdButton_CloseModalPage.Clicked += ((o2, e2) =>
{
this.Navigation.PopModalAsync();
});
//
return objStackLayout;
}
Проблема с вышесказанным, что
await Navigation.PushModalAsync(objModalPage);
немедленно вернуться после анимации.
Хотя вы не можете взаимодействовать с предыдущей страницы, как мы показываем новый NavigationPage с кнопкой Закрыть показали - родителюнавигация Страница по-прежнему выполняется за кулисами параллельно.
Итак, если бы у вас были какие-то таймеры или что-то еще, они все равно вызывались бы, если бы вы не остановили их.
Вы также можете использовать подход TaskCompletionSource, как описано в следующем сообщении также How can I await modal form dismissal using Xamarin.Forms?.
Примечание - что, хотя вы можете теперь ждут 2-й страницы отображения, а затем, когда эта страница уволенный позволяет выполнение кода, чтобы продолжить на следующей строке - это до сих пор не истинно модальный форма. Опять же, на родительской странице будут вызываться таймеры или что-либо, выполняющее еще.
Update 1: -
Чтобы иметь содержание появляется поверх существующего содержимого, то просто включите его на текущей странице, однако сделать этот раздел контента невидимым до тех пор, пока это необходимо.
Если вы используете внешний контейнер, такой как сетка Grid, которая поддерживает несколько дочерних элементов управления в одной и той же ячейке, вы сможете достичь того, чего хотите.
Вы также хотите использовать что-то вроде заполненного Коробку с прозрачностью, которая также будет охватывать всю страницу, чтобы контролировать видимую, сквозную секцию, которая окружает ваш внутренний раздел контента.
Но я хочу, чтобы он, как модальное диалоговое окно всплывающего окна, которое появится над родительской страницей. В соответствии с вашим примером он открывает отдельную страницу, а предыдущая страница недоступна для просмотра. –
Теперь я обновляю свой ответ (см. Update1), и теперь он более четко показывает, чего вы пытаетесь достичь. – Pete
Спасибо @Pete, есть ли у вас какая-нибудь ссылка для кода примера? –