MobileMenuButton.xaml.cs 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. using System;
  2. using Xamarin.Forms;
  3. using Xamarin.Forms.Xaml;
  4. using System.Collections;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using Syncfusion.XForms.PopupLayout;
  8. using XF.Material.Forms.UI;
  9. namespace InABox.Mobile
  10. {
  11. [XamlCompilation(XamlCompilationOptions.Compile)]
  12. public partial class MobileMenuButton
  13. {
  14. private MobileMenuButtonMenu _menu;
  15. public IList<MobileMenuEntry> Items => _menu.Items;
  16. public RelativePosition Position { get; set; }
  17. public event EventHandler Appearing;
  18. private ImageSource _source;
  19. public ImageSource Image
  20. {
  21. get => _image.Source;
  22. set => _image.Source = value;
  23. }
  24. public Size ImageSize
  25. {
  26. get => new Size(_image.WidthRequest,_image.HeightRequest);
  27. set
  28. {
  29. _image.HeightRequest = value.Height;
  30. _image.WidthRequest = value.Width;
  31. }
  32. }
  33. public bool ShowImages
  34. {
  35. get => _menu.ShowImages;
  36. set => _menu.ShowImages = value;
  37. }
  38. public MobileMenuButtonMenuImagePosition ImagePosition
  39. {
  40. get => _menu.ImagePosition;
  41. set => _menu.ImagePosition = value;
  42. }
  43. public event MobileMenuButtonClickedEvent Clicked;
  44. public MobileMenuButton()
  45. {
  46. _menu = new MobileMenuButtonMenu();
  47. _menu.ItemClicked += (sender,args) => PopupManager.DismissPopup();
  48. InitializeComponent();
  49. ShowImages = false;
  50. Position = RelativePosition.AlignToLeftOf;
  51. }
  52. private void _image_OnClicked(object sender, EventArgs e)
  53. {
  54. Appearing?.Invoke(this, EventArgs.Empty);
  55. if (_menu.Items.Any())
  56. {
  57. PopupManager.ShowPopup(
  58. this,
  59. () => _menu,
  60. new PopupManagerConfiguration()
  61. {
  62. SizeMode = AutoSizeMode.Both,
  63. Padding = 5,
  64. Position = this.Position
  65. }
  66. );
  67. }
  68. else
  69. Clicked?.Invoke(this, new MobileMenuButtonClickedEventArgs(null));
  70. }
  71. }
  72. }