Xamarin Forms - несколько представлений на одной странице [закрыто]

Dec 09 2020

Итак, мне нужно добиться нескольких представлений на странице , что-то вроде этого , но я не могу найти способ, который делает это возможным кроссплатформенным. Я вижу, что в IOS вы можете добиться этого, добавив на страницу несколько контроллеров представления, но возможно ли это в формах xamarin?

Пожалуйста, дайте мне знать, если у вас есть опыт в этом.

Заранее спасибо!

Ответы

LucasZhang-MSFT Dec 09 2020 at 18:21

Есть много решений, которые могут его реализовать. Например, вы можете использовать AbsoluteLayout для создания прокрутки.

в ContentPage

<AbsoluteLayout BackgroundColor="White" AbsoluteLayout.LayoutBounds="0,1,1,1">
        <!--  -->

        <Button Clicked="Button_Clicked" Text="Test"  AbsoluteLayout.LayoutBounds="0.5,0.3,0.2,0.05" AbsoluteLayout.LayoutFlags="All" />

        <StackLayout x:Name="bottomBar" BackgroundColor="Olive" AbsoluteLayout.LayoutBounds="0.5,1.0,1.0,0.04" AbsoluteLayout.LayoutFlags="All">
            

            <!-- put the content of swipe here -->

        </StackLayout>
    </AbsoluteLayout>

В коде позади

    bool isShow;
    const double layoutPropHeightMax = 0.45;
    const double layoutPropHeightMin = 0.06;
   //you could set the height here as you want

    private void Button_Clicked(object sender, EventArgs e)
    {
        if(!isShow)
        {
            //show the keyboard

            Device.BeginInvokeOnMainThread(async () =>
            {

                var height = layoutPropHeightMin;

                while (height < layoutPropHeightMax)
                {
                    await Task.Delay(1);
                    height += 0.04;

                    AbsoluteLayout.SetLayoutBounds(bottomBar, new Rectangle(0.5, 1.0,1.0, height));
                }

            });

        }

        else
        {
            // hide the keyboard
            Device.BeginInvokeOnMainThread(async () =>
            {

                var height = layoutPropHeightMax;

                while (height > layoutPropHeightMin)
                {
                    await Task.Delay(1);
                    height -= 0.04;

                    AbsoluteLayout.SetLayoutBounds(bottomBar, new Rectangle(0.5, 1.0, 1.0, height));
                }

            });

        }


        isShow = !isShow;
    }

Вот аналогичная проблема, на которую вы можете обратиться.