使用  Rg.Plugins.Popup 插件

1.  新建 PopupMenu.xaml

  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <pages:PopupPage xmlns="http://xamarin.com/schemas/2014/forms"
  3. xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
  4. xmlns:pages="clr-namespace:Rg.Plugins.Popup.Pages;assembly=Rg.Plugins.Popup"
  5. xmlns:animations="clr-namespace:Rg.Plugins.Popup.Animations;assembly=Rg.Plugins.Popup"
  6. xmlns:iconize="clr-namespace:Plugin.Iconize;assembly=Plugin.Iconize"
  7. x:Class="DCMS.Client.Views.CustomView.PopupMenu" x:Name="PopupMaster">
  8. <pages:PopupPage.Resources>
  9. <ResourceDictionary>
  10. <Style x:Key="EntryStyle"
  11. TargetType="Entry">
  12. <Setter Property="PlaceholderColor"
  13. Value="#9cdaf1" />
  14. <Setter Property="TextColor"
  15. Value="#7dbbe6" />
  16. </Style>
  17. </ResourceDictionary>
  18. </pages:PopupPage.Resources>
  19. <pages:PopupPage.Animation>
  20. <animations:ScaleAnimation PositionIn="Top"
  21. PositionOut="Center"
  22. ScaleIn=""
  23. ScaleOut="0.7"
  24. DurationIn=""
  25. EasingIn="BounceOut" />
  26. </pages:PopupPage.Animation>
  27. <ScrollView HorizontalOptions="End"
  28. VerticalOptions="Start">
  29. <AbsoluteLayout Margin="0,45,0,0"
  30. x:Name="MainLayout">
  31. <Frame x:Name="FrameContainer"
  32. Margin="0,10,10,0"
  33. HorizontalOptions="Center"
  34. BorderColor="Transparent"
  35. BackgroundColor="White">
  36. <ListView x:Name="SecondaryToolbarListView"
  37. VerticalOptions="Start"
  38. HorizontalOptions="Start"
  39. WidthRequest=""
  40. HasUnevenRows="True"
  41. ItemsSource="{Binding Source={x:Reference PopupMaster},Path=MenuItems}">
  42. <ListView.ItemTemplate>
  43. <DataTemplate>
  44. <ViewCell>
  45. <StackLayout Orientation="Horizontal"
  46. HorizontalOptions="FillAndExpand"
  47. Margin=""
  48. Spacing=""
  49. HeightRequest=""
  50. Padding="15,0,0,0">
  51. <iconize:IconImage x:Name="iconImage"
  52. Icon="{Binding Icon}"
  53. HorizontalOptions="Start"
  54. VerticalOptions="Center"
  55. Margin="0,0,8,0"
  56. IconColor="{StaticResource PrimaryDarkColor}"
  57. IconSize="" />
  58. <Label x:Name="menuText"
  59. Text="{Binding MenuText}"
  60. FontSize=""
  61. VerticalOptions="Center"
  62. HorizontalOptions="Start" />
  63. </StackLayout>
  64. </ViewCell>
  65. </DataTemplate>
  66. </ListView.ItemTemplate>
  67. </ListView>
  68. </Frame>
  69. <ContentView AbsoluteLayout.LayoutFlags="XProportional"
  70. AbsoluteLayout.LayoutBounds=".8,5, 15, 15">
  71. <ContentView.GestureRecognizers>
  72. <TapGestureRecognizer Tapped="OnCloseButtonTapped" />
  73. </ContentView.GestureRecognizers>
  74. <BoxView HeightRequest=""
  75. x:Name="CloseImage"
  76. WidthRequest=""
  77. BackgroundColor="White"></BoxView>
  78. </ContentView>
  79. </AbsoluteLayout>
  80. </ScrollView>
  81. </pages:PopupPage>
  1. [XamlCompilation(XamlCompilationOptions.Compile)]
  2. public partial class PopupMenu : PopupPage
  3. {
  4. private List<ToolbarItemModel> MenuItems { get; set; }
  5. public PopupMenu (List<ToolbarItemModel> data)
  6. {
  7. InitializeComponent ();
  8. MenuItems = data;
  9. }
  10.  
  11. protected override void OnAppearing()
  12. {
  13. base.OnAppearing();
  14. SecondaryToolbarListView.ItemsSource = MenuItems;
  15. SecondaryToolbarListView.HeightRequest = MenuItems.Count * ;
  16. }
  17.  
  18. protected override void OnAppearingAnimationBegin()
  19. {
  20. base.OnAppearingAnimationBegin();
  21. CloseImage.Rotation = ;
  22. //CloseImage.TranslationY = -10;
  23. MainLayout.RaiseChild(CloseImage);
  24. }
  25.  
  26. private void OnCloseButtonTapped(object sender, EventArgs e)
  27. {
  28. CloseAllPopup();
  29. }
  30.  
  31. protected override bool OnBackgroundClicked()
  32. {
  33. CloseAllPopup();
  34.  
  35. return false;
  36. }
  37.  
  38. private async void CloseAllPopup()
  39. {
  40. await PopupNavigation.Instance.PopAllAsync();
  41. }
  42. }

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

  1. public partial class SaleBillPage : ContentPage
  2. {
  3.  
  4. private PopupMenu _popupMenu;
  5.  
  6. public SaleBillPage()
  7. {
  8. InitializeComponent();
  9.  
  10. var items = new List<ToolbarItemModel>
  11. {
  12. new ToolbarItemModel {Icon = "fas-list-alt", MenuText = "历史单据"},
  13. new ToolbarItemModel {Icon = "fas-list-alt", MenuText = "支付方式"},
  14. new ToolbarItemModel {Icon = "fas-list-alt", MenuText = "欠款"},
  15. new ToolbarItemModel {Icon = "fas-list-alt", MenuText = "优惠"},
  16. new ToolbarItemModel {Icon = "fas-list-alt", MenuText = "整单备注"},
  17. new ToolbarItemModel {Icon = "fas-list-alt", MenuText = "清空单据"},
  18. new ToolbarItemModel {Icon = "fas-list-alt", MenuText = "打印"},
  19. };
  20.  
  21. _popupMenu = new PopupMenu(items);
  22. }
  23.  
  24. #region Overrides
  25.  
  26. protected override void OnAppearing()
  27. {
  28. base.OnAppearing();
  29. this.ToolbarItems.Clear();
  30. foreach (var toolBarItem in GetToolBarItems().ToList())
  31. {
  32. this.ToolbarItems.Add(toolBarItem);
  33. }
  34. }
  35.  
  36. #endregion
  37.  
  38. private IList<ToolbarItem> GetToolBarItems()
  39. {
  40. var list = new List<ToolbarItem>();
  41. list.Add(new ToolbarItem("\uf0c7", "", () =>
  42. {
  43. Device.BeginInvokeOnMainThread(() =>
  44. {
  45. DisplayAlert("提示", "抱歉,功能稍后开放...", "取消");
  46. });
  47. },ToolbarItemOrder.Primary, ));
  48. list.Add(new ToolbarItem("\uf0c9", "", () =>
  49. {
  50. Device.BeginInvokeOnMainThread(async () =>
  51. {
  52. await PopupNavigation.Instance.PushAsync(_popupMenu);
  53. });
  54. }, ToolbarItemOrder.Primary, ));
  55.  
  56. return list;
  57. }
  58. }

效果如图:

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. selenium执行JavaScript语句:控制滚动条 聚焦元素 改变下拉选项

    1. 执行js脚本 控制滚动条 # http://www.cnblogs.com/yoyoketang/p/6128655.html In [347]: js = "window.scrol ...

  2. Linux 内核参数 arp_ignore & arp_announce 详解

    arp_ignore定义了对目标地址为本机IP的ARP询问的不同应答模式. arp_announce对网络接口(网卡)上发出的ARP请求包中的源IP地址作出相应的限制:主机会根据这个参数值的不同选择使 ...

  3. jmeter 使用问题

    问题1:导入脚本失败,提示 解决:没有安装JMemter plugins manager插件,具体安装参考http://www.cnblogs.com/cxx1/p/7883820.html,第二步.

  4. Json.NET Performance Tips

    原文: http://www.newtonsoft.com/json/help/html/Performance.htm To keep an application consistently fas ...

  5. Tornado-Ajax

    介绍 AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML).AJAX 不是新的编程语言,而是一种使用现有标准的新方法.AJAX是在不 ...

  6. ECMA Script 6_对象的扩展

    对象 1. ES6 允许直接写入变量和函数,作为对象的属性和方法 const foo = 'bar'; /*****************属性的优化********************/ con ...

  7. JMeter参数化中存在逗号的解决方法

    在Jmeter中通过CSV Data Set Config进行参数化时,如果参数化数据中存在逗号(,)我们可以通过一下方式进行设置 如何存在中文乱码,可以设置file encoding:gb2312

  8. foreach next 操作数组指针移动问题

    2018年10月20日10:39:40 先说结论,foreach 维护的是一套属于自己的数组指针 会在操作数据的时候,分裂一套变量地址,即使你强制使用 & 取地址一样会分裂,不会引用同一套指针 ...

  9. 【Python基础】lpthw - Exercise 37 复习各种符号

    本节需要熟悉python的符号和关键字的功能. 一.关键字 1. and 逻辑与,如 True and False == False的值为True 2. as with...as...的功能类似try ...

  10. tcpdump我的交叉编译(mips)

    一.libpcap交叉编译 1.下载libpcap-1.8.1(http://www.tcpdump.org/) 2.解压 3.修改configure文件 a.注释掉 #if test -z &quo ...