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);
}
}
}