| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- using System;
- using Avalonia.Controls.Primitives;
- using Avalonia.Data;
- using Avalonia.Interactivity;
- using Avalonia.Reactive;
- namespace Avalonia.Controls;
- internal class NativeMenuBarPresenter : Menu
- {
- protected override Type StyleKeyOverride => typeof(Menu);
- internal static Control? CreateContainerForNativeItem(object? item, int index, object? recycleKey)
- {
- if (item is NativeMenuItemSeparator)
- {
- return new Separator();
- }
- else if (item is NativeMenuItem nativeItem)
- {
- var newItem = new NativeMenuItemPresenter
- {
- ItemsSource = nativeItem.Menu?.Items,
- [!HeaderedSelectingItemsControl.HeaderProperty] =
- nativeItem.GetObservable(NativeMenuItem.HeaderProperty).ToBinding(),
- [!MenuItem.IconProperty] = nativeItem.GetObservable(NativeMenuItem.IconProperty)
- .Select(i => i is { } bitmap ? new Image { Source = bitmap } : null).ToBinding(),
- [!!MenuItem.IsCheckedProperty] = nativeItem[!!NativeMenuItem.IsCheckedProperty],
- [!MenuItem.IsEnabledProperty] = nativeItem.GetObservable(NativeMenuItem.IsEnabledProperty).ToBinding(),
- [!MenuItem.IsVisibleProperty] = nativeItem.GetObservable(NativeMenuItem.IsVisibleProperty).ToBinding(),
- [!MenuItem.CommandProperty] = nativeItem.GetObservable(NativeMenuItem.CommandProperty).ToBinding(),
- [!MenuItem.CommandParameterProperty] =
- nativeItem.GetObservable(NativeMenuItem.CommandParameterProperty).ToBinding(),
- [!MenuItem.InputGestureProperty] = nativeItem.GetObservable(NativeMenuItem.GestureProperty).ToBinding(),
- [!MenuItem.ToggleTypeProperty] = nativeItem.GetObservable(NativeMenuItem.ToggleTypeProperty)
- // TODO12 remove NativeMenuItemToggleType
- .Select(v => (MenuItemToggleType)v).ToBinding(),
- [!ToolTip.TipProperty] =
- nativeItem.GetObservable(NativeMenuItem.ToolTipProperty).ToBinding(),
- };
- newItem.Click += MenuItemOnClick;
- return newItem;
- }
- return null;
- static void MenuItemOnClick(object? sender, RoutedEventArgs e)
- {
- if (((MenuItem)sender!).DataContext is NativeMenuItem item
- && item.HasClickHandlers && item is INativeMenuItemExporterEventsImplBridge bridge)
- {
- bridge.RaiseClicked();
- }
- }
- }
- protected internal override Control CreateContainerForItemOverride(object? item, int index, object? recycleKey)
- {
- return CreateContainerForNativeItem(item, index, recycleKey)
- ?? base.CreateContainerForItemOverride(item, index, recycleKey);
- }
- private class NativeMenuItemPresenter : MenuItem
- {
- protected override Type StyleKeyOverride => typeof(MenuItem);
- protected internal override Control CreateContainerForItemOverride(object? item, int index, object? recycleKey)
- {
- return CreateContainerForNativeItem(item, index, recycleKey)
- ?? base.CreateContainerForItemOverride(item, index, recycleKey);
- }
- }
- }
|