ContentView autoAdd при вызове - PullRequest
       9

ContentView autoAdd при вызове

0 голосов
/ 15 октября 2018

Добрый день,

Я сделал ContentView с именем WarningPopup.Я хотел бы автоматически добавить этот ContentView на мою текущую страницу при вызове.Например, я использую:

WarningPopup wp = new WarningPopup {
            ButtonText = "OK"
        };

, но мой WarningPopup не отображается на моей странице ... чтобы показать мое всплывающее окно, я должен использовать, например,

 Content = new AbsoluteLayout {
            Children = {
                wp
            }
        };

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

В случае, если это мой класс WarningPopup .cs

[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class WarningPopup : ContentView
{
    public static readonly BindableProperty ButtonTextProperty =
        BindableProperty.Create("ButtonText", typeof(string), typeof(WarningPopup), default(string));

    public string ButtonText {
        get { return (string)GetValue(ButtonTextProperty);  }
        set { SetValue(ButtonTextProperty, value);          }        
    }


    public WarningPopup ()
    {
        InitializeComponent ();
        innerLabel.SetBinding(Label.TextProperty, new Binding("ButtonText", source: this));


    }
}

и мой XAML:

<ContentView 
        WidthRequest="180"
        HeightRequest="60"
        xmlns="http://xamarin.com/schemas/2014/forms" 
        xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
        x:Class="MobileAMBPanel.WarningPopup">

      <Frame CornerRadius="4" HasShadow="False" OutlineColor="Silver" BackgroundColor="Red" AbsoluteLayout.LayoutBounds="0,0,1,1" AbsoluteLayout.LayoutFlags="All">
        <StackLayout Orientation="Horizontal">
                <Image x:Name="innerImage"  VerticalOptions="CenterAndExpand" HorizontalOptions="EndAndExpand"/>
                <Label x:Name="innerLabel"  VerticalOptions="CenterAndExpand" HorizontalOptions="StartAndExpand"/>
        </StackLayout>
      </Frame>
</ContentView>

Спасибо!

1 Ответ

0 голосов
/ 15 октября 2018

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);
};

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...