C# Xamarin.Forms选项卡页面中的下拉菜单

C# Xamarin.Forms选项卡页面中的下拉菜单,c#,xamarin.forms,renderer,C#,Xamarin.forms,Renderer,我有一个这样的选项卡式页面设计 tabbedpage已经设置好了,但我无法找到实现下拉菜单和向tabbar添加额外按钮(图像中的过滤器按钮)的方法。选项卡页面的自定义渲染器可能会起作用,但作为最后的手段,我更愿意这样做,请帮助我。这可以通过绝对布局和一些高度计算来完成。不需要自定义渲染器 将所有内容放入您的选项卡页面。内容放入绝对布局,然后放入堆栈布局(或您正在使用的其他布局)。然后添加一个框架(我正在使用框架,但您可以使用其他视图) 解释和更多关于标志的说明。这很容易理解,但如果你有困难,请帮

我有一个这样的选项卡式页面设计


tabbedpage已经设置好了,但我无法找到实现下拉菜单和向tabbar添加额外按钮(图像中的过滤器按钮)的方法。选项卡页面的自定义渲染器可能会起作用,但作为最后的手段,我更愿意这样做,请帮助我。

这可以通过
绝对布局和一些高度计算来完成。不需要自定义渲染器

将所有内容放入您的
选项卡页面。内容
放入
绝对布局
,然后放入
堆栈布局
(或您正在使用的其他
布局
)。然后添加一个
框架
(我正在使用
框架
,但您可以使用其他
视图

解释和更多关于标志的说明。这很容易理解,但如果你有困难,请帮助我

现在你的下拉列表准备好了。当您想要显示它时,只需设置可见性

frame.IsVisisble = true;
技巧1:您甚至可以使用动画使其上下移动。例如,我会这样做

Tip-2:如果在
StackLayout
中添加
手势识别器
,用户可以在下拉列表周围单击,它将隐藏

XAML:


这可以通过
绝对布局
和一些高度计算来完成。不需要自定义渲染器

将所有内容放入您的
选项卡页面。内容
放入
绝对布局
,然后放入
堆栈布局
(或您正在使用的其他
布局
)。然后添加一个
框架
(我正在使用
框架
,但您可以使用其他
视图

解释和更多关于标志的说明。这很容易理解,但如果你有困难,请帮助我

现在你的下拉列表准备好了。当您想要显示它时,只需设置可见性

frame.IsVisisble = true;
技巧1:您甚至可以使用动画使其上下移动。例如,我会这样做

Tip-2:如果在
StackLayout
中添加
手势识别器
,用户可以在下拉列表周围单击,它将隐藏

XAML:


非常感谢Martinedo,我将从您的示例开始实施,并看看我的结果如何。但是,我有一个问题之前,下拉本身,我没有指出这一点。在Tabbar中的filter按钮(从图像中),我找不到在Tabbar中放置额外按钮的方法,除了添加一个页面并禁用该页面。如果没有自定义渲染器,这是不可能的。安卓可以做到,但我不认为iOS可以。我建议您找到另一种方法来放置过滤器按钮,好的,我已经决定将其作为工具栏项。一旦我实施了,我会回到这里。如果你的代码行得通,我会接受答案的。嗨,Martinedo。在仔细考虑之后,我决定使用渲染器,这样我就有了更多的控制权。我将创建一个自定义视图,并在Android和IOS上找到本机解决方案,以实现我的目标。然后我会把答案贴出来。你能把你的答案贴出来吗?我不得不处理类似的问题。通过AbsoluteLayout实现了它,但是通过自定义渲染器看到它也不错。感谢alot Martinedo,我将开始用您的示例实现它,看看我的结果如何。但是,我有一个问题之前,下拉本身,我没有指出这一点。在Tabbar中的filter按钮(从图像中),我找不到在Tabbar中放置额外按钮的方法,除了添加一个页面并禁用该页面。如果没有自定义渲染器,这是不可能的。安卓可以做到,但我不认为iOS可以。我建议您找到另一种方法来放置过滤器按钮,好的,我已经决定将其作为工具栏项。一旦我实施了,我会回到这里。如果你的代码行得通,我会接受答案的。嗨,Martinedo。在仔细考虑之后,我决定使用渲染器,这样我就有了更多的控制权。我将创建一个自定义视图,并在Android和IOS上找到本机解决方案,以实现我的目标。然后我会把答案贴出来。你能把你的答案贴出来吗?我不得不处理类似的问题。通过AbsoluteLayout实现了它,但通过自定义渲染器看到它也不错
frame.IsVisisble = true;
<StackLayout.GestureRecognizers>
     <TapGestureRecognizer Tapped="StackLayout_Tapped"/>
</StackLayout.GestureRecognizers>
if (frame.IsVisisble)
{
    frame.IsVisisble = false;
}