MobileMenuButtonMenu.xaml.cs 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using Xamarin.CommunityToolkit.Converters;
  7. using Xamarin.CommunityToolkit.UI.Views;
  8. using Xamarin.Forms;
  9. using Xamarin.Forms.Xaml;
  10. namespace InABox.Mobile
  11. {
  12. public class MobileMenuButtonMenuImagePositionConverter : BaseConverter<MobileMenuButtonMenuImagePosition, Dock>
  13. {
  14. public override Dock ConvertFrom(MobileMenuButtonMenuImagePosition value)
  15. {
  16. return value == MobileMenuButtonMenuImagePosition.Left
  17. ? Dock.Left
  18. : Dock.Right;
  19. }
  20. public override MobileMenuButtonMenuImagePosition ConvertBackTo(Dock value)
  21. {
  22. return value == Dock.Right
  23. ? MobileMenuButtonMenuImagePosition.Right
  24. : MobileMenuButtonMenuImagePosition.Left;
  25. }
  26. }
  27. public enum MobileMenuButtonMenuImagePosition
  28. {
  29. Left,
  30. Right
  31. }
  32. public class MobileMenuButtonTemplateSelector : DataTemplateSelector
  33. {
  34. public DataTemplate Item { get; set; }
  35. public DataTemplate Separator { get; set; }
  36. protected override DataTemplate OnSelectTemplate (object item, BindableObject container)
  37. {
  38. return item is MobileMenuItem
  39. ? Item
  40. : Separator;
  41. }
  42. }
  43. [XamlCompilation(XamlCompilationOptions.Compile)]
  44. public partial class MobileMenuButtonMenu
  45. {
  46. public IList<MobileMenuEntry> Items => _viewModel.Items;
  47. public IList<MobileMenuEntry> VisibleItems => _viewModel.VisibleItems;
  48. public bool ShowImages
  49. {
  50. get => _viewModel.ShowImages;
  51. set => _viewModel.ShowImages = value;
  52. }
  53. public MobileMenuButtonMenuImagePosition ImagePosition
  54. {
  55. get => _viewModel.ImagePosition;
  56. set => _viewModel.ImagePosition = value;
  57. }
  58. public MobileMenuButtonMenu()
  59. {
  60. InitializeComponent();
  61. }
  62. private void TapGestureRecognizer_OnTapped(object sender, EventArgs e)
  63. {
  64. if ((sender as BindableObject)?.BindingContext is MobileMenuItem item)
  65. item.DoClicked();
  66. }
  67. private void _viewModel_OnLayoutChanged(object sender, MobileMenuButtonLayoutChangedEventArgs args)
  68. {
  69. _menu.RowDefinitions.Clear();
  70. for (int i=0; i< args.RowCount; i++)
  71. _menu.RowDefinitions.Add(new RowDefinition() { Height = GridLength.Auto});
  72. }
  73. public event EventHandler ItemClicked;
  74. private void _viewModel_OnItemClicked(object sender, EventArgs e)
  75. {
  76. ItemClicked?.Invoke(this, EventArgs.Empty);
  77. }
  78. }
  79. }