From 63e428851c2b783896218d5a0275f9f38d774884 Mon Sep 17 00:00:00 2001 From: Giuseppe Lippolis Date: Thu, 19 Jan 2023 16:33:20 +0100 Subject: [PATCH 1/2] feat(MenuFlyout): Add ItemContainerTheme --- src/Avalonia.Controls/Flyouts/MenuFlyout.cs | 19 ++++++++++++++++++- .../Flyouts/MenuFlyoutPresenter.cs | 10 ++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/Avalonia.Controls/Flyouts/MenuFlyout.cs b/src/Avalonia.Controls/Flyouts/MenuFlyout.cs index 97fda68051..b028a8f007 100644 --- a/src/Avalonia.Controls/Flyouts/MenuFlyout.cs +++ b/src/Avalonia.Controls/Flyouts/MenuFlyout.cs @@ -3,6 +3,7 @@ using Avalonia.Collections; using Avalonia.Controls.Primitives; using Avalonia.Controls.Templates; using Avalonia.Metadata; +using Avalonia.Styling; namespace Avalonia.Controls { @@ -27,6 +28,12 @@ namespace Avalonia.Controls AvaloniaProperty.RegisterDirect(nameof(ItemTemplate), x => x.ItemTemplate, (x, v) => x.ItemTemplate = v); + /// + /// Defines the property. + /// + public static readonly StyledProperty ItemContainerThemeProperty = + ItemsControl.ItemContainerThemeProperty.AddOwner(); + public Classes FlyoutPresenterClasses => _classes ??= new Classes(); /// @@ -48,6 +55,15 @@ namespace Avalonia.Controls set => SetAndRaise(ItemTemplateProperty, ref _itemTemplate, value); } + /// + /// Gets or sets the that is applied to the container element generated for each item. + /// + public ControlTheme? ItemContainerTheme + { + get { return GetValue(ItemContainerThemeProperty); } + set { SetValue(ItemContainerThemeProperty, value); } + } + private Classes? _classes; private IEnumerable? _items; private IDataTemplate? _itemTemplate; @@ -57,7 +73,8 @@ namespace Avalonia.Controls return new MenuFlyoutPresenter { [!ItemsControl.ItemsProperty] = this[!ItemsProperty], - [!ItemsControl.ItemTemplateProperty] = this[!ItemTemplateProperty] + [!ItemsControl.ItemTemplateProperty] = this[!ItemTemplateProperty], + [!ItemsControl.ItemContainerThemeProperty] = this[!ItemContainerThemeProperty], }; } diff --git a/src/Avalonia.Controls/Flyouts/MenuFlyoutPresenter.cs b/src/Avalonia.Controls/Flyouts/MenuFlyoutPresenter.cs index 7aca21b42e..12fa014fc6 100644 --- a/src/Avalonia.Controls/Flyouts/MenuFlyoutPresenter.cs +++ b/src/Avalonia.Controls/Flyouts/MenuFlyoutPresenter.cs @@ -47,5 +47,15 @@ namespace Avalonia.Controls } } } + + protected internal override void PrepareContainerForItemOverride(Control element, object? item, int index) + { + base.PrepareContainerForItemOverride(element, item, index); + + // Child menu items should not inherit the menu's ItemContainerTheme as that is specific + // for top-level menu items. + if ((element as MenuItem)?.ItemContainerTheme == ItemContainerTheme) + element.ClearValue(ItemContainerThemeProperty); + } } } From 5123f14668334f1446decc391bf41b900687f489 Mon Sep 17 00:00:00 2001 From: Giuseppe Lippolis Date: Wed, 25 Jan 2023 09:38:45 +0100 Subject: [PATCH 2/2] fix: Address review --- src/Avalonia.Controls/Flyouts/MenuFlyoutPresenter.cs | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/src/Avalonia.Controls/Flyouts/MenuFlyoutPresenter.cs b/src/Avalonia.Controls/Flyouts/MenuFlyoutPresenter.cs index 12fa014fc6..594d7da2fb 100644 --- a/src/Avalonia.Controls/Flyouts/MenuFlyoutPresenter.cs +++ b/src/Avalonia.Controls/Flyouts/MenuFlyoutPresenter.cs @@ -1,5 +1,4 @@ using System; -using Avalonia.Controls.Generators; using Avalonia.Controls.Platform; using Avalonia.Controls.Primitives; using Avalonia.LogicalTree; @@ -47,15 +46,5 @@ namespace Avalonia.Controls } } } - - protected internal override void PrepareContainerForItemOverride(Control element, object? item, int index) - { - base.PrepareContainerForItemOverride(element, item, index); - - // Child menu items should not inherit the menu's ItemContainerTheme as that is specific - // for top-level menu items. - if ((element as MenuItem)?.ItemContainerTheme == ItemContainerTheme) - element.ClearValue(ItemContainerThemeProperty); - } } }