Выпадающее меню в Xamarin.Forms TabbedPage - PullRequest
0 голосов
/ 18 октября 2018

У меня есть такой дизайн вкладки, The tabbed page

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

1 Ответ

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

Это можно сделать с помощью AbsoluteLayout и некоторого расчета высоты.Пользовательский рендерер не требуется.

Поместите все в свой TabbedPage.Content в AbsoluteLayout, а затем в StackLayout (или другой Layout, который вы используете).Затем добавьте Frame (я использую Frame, но вы можете использовать другие View).

<AbsoluteLayout x:Name="absoluteLayout">
     <StackLayout AbsoluteLayout.LayoutFlags="All" AbsoluteLayout.LayoutBounds="0,0,1,1">
         //other layouts and elements
     </StackLayout>
     <Frame AbsoluteLayout.LayoutFlags="WidthProportional" AbsoluteLayout.LayoutBounds="0,0,1,A" IsVisible="False">
         //your checkboxes and labels
     </Frame>
</AbsoluteLayout>

В свойстве Frame AbsoluteLayout.LayoutBounds="0,0,1,A" Я написал A, но вы должны написатьчисло там:

  • A = высота вашего DropDown меню

Если вы не знаете высоту при инициализации XAML, вы можете установить ее вКод также:

AbsoluteLayout.SetLayoutBounds(frame, new Rectangle(0, 0, 1, height)); // X,Y,Width,Height

Объяснение и более подробно о флагах объясняется здесь .Это довольно легко понять, но если у вас возникли проблемы, это видео помогло мне.

Теперь ваш DropDown готов.Если вы хотите, чтобы он отображался, просто установите видимость.

frame.IsVisisble = true;

Tip-1 : вы можете даже анимировать его, чтобы подниматься и опускаться с помощью анимации.Например, этот код мира сделает это.

Tip-2 : если вы добавите GestureRecognizers к вашему StackLayout, пользователь может нажатьвокруг DropDown, и он будет скрываться.

XAML:

<StackLayout.GestureRecognizers>
     <TapGestureRecognizer Tapped="StackLayout_Tapped"/>
</StackLayout.GestureRecognizers>

КОД:

if (frame.IsVisisble)
{
    frame.IsVisisble = false;
}
...