使用  Rg.Plugins.Popup 插件

1.  新建 PopupMenu.xaml

<?xml version="1.0" encoding="utf-8" ?>
<pages:PopupPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:pages="clr-namespace:Rg.Plugins.Popup.Pages;assembly=Rg.Plugins.Popup"
xmlns:animations="clr-namespace:Rg.Plugins.Popup.Animations;assembly=Rg.Plugins.Popup"
xmlns:iconize="clr-namespace:Plugin.Iconize;assembly=Plugin.Iconize"
x:Class="DCMS.Client.Views.CustomView.PopupMenu" x:Name="PopupMaster">
<pages:PopupPage.Resources>
<ResourceDictionary>
<Style x:Key="EntryStyle"
TargetType="Entry">
<Setter Property="PlaceholderColor"
Value="#9cdaf1" />
<Setter Property="TextColor"
Value="#7dbbe6" />
</Style>
</ResourceDictionary>
</pages:PopupPage.Resources>
<pages:PopupPage.Animation>
<animations:ScaleAnimation PositionIn="Top"
PositionOut="Center"
ScaleIn=""
ScaleOut="0.7"
DurationIn=""
EasingIn="BounceOut" />
</pages:PopupPage.Animation>
<ScrollView HorizontalOptions="End"
VerticalOptions="Start">
<AbsoluteLayout Margin="0,45,0,0"
x:Name="MainLayout">
<Frame x:Name="FrameContainer"
Margin="0,10,10,0"
HorizontalOptions="Center"
BorderColor="Transparent"
BackgroundColor="White">
<ListView x:Name="SecondaryToolbarListView"
VerticalOptions="Start"
HorizontalOptions="Start"
WidthRequest=""
HasUnevenRows="True"
ItemsSource="{Binding Source={x:Reference PopupMaster},Path=MenuItems}">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout Orientation="Horizontal"
HorizontalOptions="FillAndExpand"
Margin=""
Spacing=""
HeightRequest=""
Padding="15,0,0,0">
<iconize:IconImage x:Name="iconImage"
Icon="{Binding Icon}"
HorizontalOptions="Start"
VerticalOptions="Center"
Margin="0,0,8,0"
IconColor="{StaticResource PrimaryDarkColor}"
IconSize="" />
<Label x:Name="menuText"
Text="{Binding MenuText}"
FontSize=""
VerticalOptions="Center"
HorizontalOptions="Start" />
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Frame>
<ContentView AbsoluteLayout.LayoutFlags="XProportional"
AbsoluteLayout.LayoutBounds=".8,5, 15, 15">
<ContentView.GestureRecognizers>
<TapGestureRecognizer Tapped="OnCloseButtonTapped" />
</ContentView.GestureRecognizers>
<BoxView HeightRequest=""
x:Name="CloseImage"
WidthRequest=""
BackgroundColor="White"></BoxView>
</ContentView>
</AbsoluteLayout>
</ScrollView>
</pages:PopupPage>
     [XamlCompilation(XamlCompilationOptions.Compile)]
public partial class PopupMenu : PopupPage
{
private List<ToolbarItemModel> MenuItems { get; set; }
public PopupMenu (List<ToolbarItemModel> data)
{
InitializeComponent ();
MenuItems = data;
} protected override void OnAppearing()
{
base.OnAppearing();
SecondaryToolbarListView.ItemsSource = MenuItems;
SecondaryToolbarListView.HeightRequest = MenuItems.Count * ;
} protected override void OnAppearingAnimationBegin()
{
base.OnAppearingAnimationBegin();
CloseImage.Rotation = ;
//CloseImage.TranslationY = -10;
MainLayout.RaiseChild(CloseImage);
} private void OnCloseButtonTapped(object sender, EventArgs e)
{
CloseAllPopup();
} protected override bool OnBackgroundClicked()
{
CloseAllPopup(); return false;
} private async void CloseAllPopup()
{
await PopupNavigation.Instance.PopAllAsync();
}
}

2.  在需要添加Toolbar 的页面中  添加 菜单项。

  public partial class SaleBillPage : ContentPage
{ private PopupMenu _popupMenu; public SaleBillPage()
{
InitializeComponent(); var items = new List<ToolbarItemModel>
{
new ToolbarItemModel {Icon = "fas-list-alt", MenuText = "历史单据"},
new ToolbarItemModel {Icon = "fas-list-alt", MenuText = "支付方式"},
new ToolbarItemModel {Icon = "fas-list-alt", MenuText = "欠款"},
new ToolbarItemModel {Icon = "fas-list-alt", MenuText = "优惠"},
new ToolbarItemModel {Icon = "fas-list-alt", MenuText = "整单备注"},
new ToolbarItemModel {Icon = "fas-list-alt", MenuText = "清空单据"},
new ToolbarItemModel {Icon = "fas-list-alt", MenuText = "打印"},
}; _popupMenu = new PopupMenu(items);
} #region Overrides protected override void OnAppearing()
{
base.OnAppearing();
this.ToolbarItems.Clear();
foreach (var toolBarItem in GetToolBarItems().ToList())
{
this.ToolbarItems.Add(toolBarItem);
}
} #endregion private IList<ToolbarItem> GetToolBarItems()
{
var list = new List<ToolbarItem>();
list.Add(new ToolbarItem("\uf0c7", "", () =>
{
Device.BeginInvokeOnMainThread(() =>
{
DisplayAlert("提示", "抱歉,功能稍后开放...", "取消");
});
},ToolbarItemOrder.Primary, ));
list.Add(new ToolbarItem("\uf0c9", "", () =>
{
Device.BeginInvokeOnMainThread(async () =>
{
await PopupNavigation.Instance.PushAsync(_popupMenu);
});
}, ToolbarItemOrder.Primary, )); return list;
}
}

效果如图:

Xamarin 自定义 ToolbarItem 溢出菜单实现(Popover/Popup) 弹出下拉效果的更多相关文章

  1. IOS第二天-新浪微博 - 添加搜索框,弹出下拉菜单 ,代理的使用 ,HWTabBar.h(自定义TabBar)

    ********HWDiscoverViewController.m(发现) - (void)viewDidLoad { [super viewDidLoad]; // 创建搜索框对象 HWSearc ...

  2. 【android开发】使用PopupWindow实现页面点击顶部弹出下拉菜单

    没有太多花样,也没有很复杂的技术,就是简单的PopupWindow的使用,可以实现点击弹出一个自定义的view,view里可以随便设计,常用的可以放一个listview. demo中我只是一个点击展示 ...

  3. 有序无序Ul->Li Ol->Li菜单,默认点击当前弹出下拉,再次点击收起下拉菜单(变形2 ---修饰)

    从上面可以看出,两个问题,第一:下拉出现的太快太突然,第二:再点击下一个下拉菜单的时候,上一个不会闭合,针对这两个问题,接下来会一 一解决. 解决下拉太快: js中有个jquery效果,有一个效果是j ...

  4. 有序无序ul->li ol->li菜单,默认点击当前弹出下拉,再次点击收起下拉菜单

    实现这一效果利用css和js技术结合 以ul->li为例子 <!DOCTYPE html><html lang="en"><head> & ...

  5. bootstrap中popover.js(弹出框)使用总结+案例

    bootstrap中popover.js(弹出框)使用总结+案例 *转载请注明出处: 作者:willingtolove: http://www.cnblogs.com/willingtolove/p/ ...

  6. Android定位&地图&导航——基于百度地图,实现自定义图标绘制并点击时弹出泡泡

    一.问题描述 上一次我们使用百度地图实现基本的定位功能,接下来我们继续实现搜索和定位,并使用LocationOverlay绘制定位位置,同时展示如何使用自定义图标绘制并点击时弹出泡泡 如图所示: 二. ...

  7. UWP Popup 弹出

    一:需求 做一个类似于安卓的弹出消息框,如图.当用户点击下载或者选择时,能够从底部弹出一个提示框,用于提示用户. 二:Popup 类 不需要我们自己额外去写一个弹窗类,微软自己有一个Popup 弹窗类 ...

  8. vant - 弹框 【Popup 弹出层】【DatetimePicker 时间选择】

    [HelloWorld.vue] <template> <div class="hello"> <van-row class="m-head ...

  9. UWP Popup 弹出提示框

    一:需求 做一个类似于安卓的弹出消息框,如图.当用户点击下载或者选择时,能够从底部弹出一个提示框,用于提示用户. 二:Popup 类 不需要我们自己额外去写一个弹窗类,微软自己有一个Popup 弹窗类 ...

随机推荐

  1. SparkCore | Rdd| 广播变量和累加器

    Spark中三大数据结构:RDD:  广播变量: 分布式只读共享变量: 累加器:分布式只写共享变量: 线程和进程之间 1.RDD中的函数传递 自己定义一些RDD的操作,那么此时需要主要的是,初始化工作 ...

  2. sort it 树状数组+逆序对

    sum[i]是1-i所有1的和,而i-sum[a[i]]就是在a[i]后面的数,即在i之前出现,却比他大的数.1是加在a[i]上,即i实际应该放的位置.而c[i]是为sum做准备的 #include& ...

  3. get、put、post、delete含义与区别

    1.GET请求会向数据库发索取数据的请求,从而来获取信息,该请求就像数据库的select操作一样,只是用来查询一下数据,不会修改.增加数据,不会影响资源的内容,即该请求不会产生副作用.无论进行多少次操 ...

  4. BigDecimal 准确的 double , float 计算

    public class ArithUtil { private static final int DEF_DIV_SCALE = 10; private ArithUtil() { } /** * ...

  5. ie下js不执行的几种可能

    1.首先考虑的就是代码是否有报错2.其次搜索代码中是否有console.log等测试的代码3.检查所用的方法是否兼容ie 以上是鄙人在开发过程中遇到的几种情况,抛砖来引玉~~

  6. React 面向组件化编程 - 封装了webpack - npm run build 产生的包的 /static 引用路径问题

    React 面向组件化编程 面向对象 ----> 面向模块 ----> 面向组件 套路: 注意: 组件名必须大写开头: 只能有一个根标签: <input />虚拟DOM 元素必 ...

  7. 8. 环境变量_数据库_mongoose的基本使用_模型对象的CRUD

    1. 环境变量 系统环境(cmd)使用的变量/命令 能够让我们在cmd环境下运行指定的程序 用户环境变量 path(我们一般设置这个) 系统环境变量 path 过程: 当我们在cmd中输入一个指令 先 ...

  8. JS-函数声明 和 函数表达式

    问题: 1, function foo() {}; 2, var foo = function () {}; 1,上面的语法是声明,可以提升,因此在函数定义的上方也可以调用 2,下面的语法是函数表达式 ...

  9. Educational Codeforces Round 5

    616A - Comparing Two Long Integers    20171121 直接暴力莽就好了...没什么好说的 #include<stdlib.h> #include&l ...

  10. day 22 二十二、面向对象导入、名称空间、类与对象

    一.面向对象导入 1.含义: ①面向过程: 重过程:解决问题,考虑的是解决问题的流程 解决问题的思路清晰,但拓展性不强 ②面向对象: 重对象:解决问题,找到解决问题的对象 解决问题的思路可能不止一条( ...