using System.ComponentModel; using Avalonia.Controls.Primitives; using Avalonia.Metadata; using Avalonia.Styling; namespace Avalonia.Controls { public class Flyout : PopupFlyoutBase { /// /// Defines the property /// public static readonly StyledProperty ContentProperty = AvaloniaProperty.Register(nameof(Content)); private Classes? _classes; /// /// Gets the Classes collection to apply to the FlyoutPresenter this Flyout is hosting /// public Classes FlyoutPresenterClasses { get => _classes ??= new Classes(); set { if (_classes is null) _classes = value; else if (_classes != value) _classes.Replace(value); } } /// /// Defines the property. /// public static readonly StyledProperty FlyoutPresenterThemeProperty = AvaloniaProperty.Register(nameof(FlyoutPresenterTheme)); /// /// Gets or sets the that is applied to the container element generated for the flyout presenter. /// public ControlTheme? FlyoutPresenterTheme { get => GetValue(FlyoutPresenterThemeProperty); set => SetValue(FlyoutPresenterThemeProperty, value); } /// /// Gets or sets the content to display in this flyout /// [Content] public object Content { get => GetValue(ContentProperty); set => SetValue(ContentProperty, value); } protected override Control CreatePresenter() { return new FlyoutPresenter { [!ContentControl.ContentProperty] = this[!ContentProperty] }; } protected override void OnOpening(CancelEventArgs args) { if (Popup.Child is { } presenter) { if (_classes != null) { SetPresenterClasses(presenter, FlyoutPresenterClasses); } if (FlyoutPresenterTheme is { } theme) { presenter.SetValue(Control.ThemeProperty, theme); } } base.OnOpening(args); } } }