Это можно сделать с помощью 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;
}