1st: Позволяет переместить свойства AbsoluteLayout
в вашем ContentView к фактическому родителю, самому ContentView (вы будете гоняться за изменяющим сознание абсолютным позиционированием, в противном случае, я изменил его размер, чтобы соответствовать /наложите «центр» экрана для моего примера):
<ContentView
~~~
AbsoluteLayout.LayoutBounds=".5,.5,.5,.5" AbsoluteLayout.LayoutFlags="All">
<ContentView.Content>
<Frame CornerRadius="4" HasShadow="False" OutlineColor="Silver" BackgroundColor="Red">
<StackLayout Orientation="Horizontal">
<Image x:Name="innerImage" VerticalOptions="CenterAndExpand" HorizontalOptions="EndAndExpand"/>
<Label x:Name="innerLabel" Text="StackOverflow" VerticalOptions="CenterAndExpand" HorizontalOptions="StartAndExpand"/>
</StackLayout>
</Frame>
</ContentView.Content>
</ContentView>
2nd: На странице, на которой будет размещаться это «всплывающее окно», убедитесь, что корневой макет являетсяAbsoluteLayout
, если нет, то просто вложение всего существующего содержимого страницы в одну будет работать без изменения чего-либо другого на фактическое содержимое и обязательно добавьте к нему x:Name
.
<ContentPage
~~~
>
<ContentPage.Content>
<AbsoluteLayout x:Name="someContainer">
<StackLayout>
~~~~
</StackLayout>
</AbsoluteLayout>
</ContentPage.Content>
</ContentPage>
3rd: Используя x:Name
AbsoluteLayout вашей страницы хостинга, вы можете Add
/ Remove
«всплывающее» ContentView, когда вам нужно:
button.Clicked += async (object sender, EventArgs e) =>
{
var contentView = new WarningPopup();
someContainer.Children.Add(contentView);
await Task.Delay(1000);
someContainer.Children.Remove(contentView);
};