| File: Shell\MenuShellItem.cs | Web Access |
| Project: src\src\Controls\src\Core\Controls.Core.csproj (Microsoft.Maui.Controls) |
#nullable disable using System.Collections.Generic; using System.ComponentModel; using System.Runtime.CompilerServices; using Microsoft.Maui.Controls.Internals; using Microsoft.Maui.Controls.StyleSheets; namespace Microsoft.Maui.Controls { internal class MenuShellItem : ShellItem, IMenuItemController, IStyleSelectable { internal MenuShellItem(MenuItem menuItem) { MenuItem = menuItem; MenuItem.Parent = this; Shell.SetFlyoutItemIsVisible(this, Shell.GetFlyoutItemIsVisible(menuItem)); this.SetBinding(TitleProperty, static (MenuItem item) => item.Text, BindingMode.OneWay, source: menuItem); this.SetBinding(IconProperty, static (MenuItem item) => item.IconImageSource, BindingMode.OneWay, source: menuItem); this.SetBinding(FlyoutIconProperty, static (MenuItem item) => item.IconImageSource, BindingMode.OneWay, source: menuItem); this.SetBinding(AutomationIdProperty, static (MenuItem item) => item.AutomationId, BindingMode.OneWay, source: menuItem); MenuItem.PropertyChanged += OnMenuItemPropertyChanged; } IList<string> IStyleSelectable.Classes => ((IStyleSelectable)MenuItem).Classes; public string Text => Title; void OnMenuItemPropertyChanged(object sender, PropertyChangedEventArgs e) { if (e.PropertyName == Shell.MenuItemTemplateProperty.PropertyName) Shell.SetMenuItemTemplate(this, Shell.GetMenuItemTemplate(MenuItem)); else if (e.PropertyName == TitleProperty.PropertyName) OnPropertyChanged(MenuItem.TextProperty.PropertyName); else if (e.PropertyName == Shell.FlyoutItemIsVisibleProperty.PropertyName) Shell.SetFlyoutItemIsVisible(this, Shell.GetFlyoutItemIsVisible(MenuItem)); } protected override void OnPropertyChanged([CallerMemberName] string propertyName = null) { base.OnPropertyChanged(propertyName); if (propertyName == nameof(Title)) OnPropertyChanged(nameof(Text)); else if (propertyName == Shell.FlyoutItemIsVisibleProperty.PropertyName && MenuItem != null) Shell.SetFlyoutItemIsVisible(MenuItem, Shell.GetFlyoutItemIsVisible(this)); } public MenuItem MenuItem { get; } bool IMenuItemController.IsEnabled { get => MenuItem.IsEnabled; set => MenuItem.IsEnabled = value; } void IMenuItemController.Activate() { (MenuItem as IMenuItemController).Activate(); } protected override void OnBindingContextChanged() { base.OnBindingContextChanged(); SetInheritedBindingContext(MenuItem, BindingContext); } } }