diff --git a/src/Avalonia.Controls/Control.cs b/src/Avalonia.Controls/Control.cs
index ebfe98a175..94ad985046 100644
--- a/src/Avalonia.Controls/Control.cs
+++ b/src/Avalonia.Controls/Control.cs
@@ -110,6 +110,11 @@ namespace Avalonia.Controls
///
void ISetterValue.Initialize(ISetter setter)
{
+ if (setter is Setter s && s.Property == ContextFlyoutProperty)
+ {
+ return; // Allow ContextFlyout to not need wrapping in
+ }
+
throw new InvalidOperationException(
"Cannot use a control as a Setter value. Wrap the control in a .");
}
diff --git a/src/Avalonia.Controls/Flyouts/Flyout.cs b/src/Avalonia.Controls/Flyouts/Flyout.cs
index ff6f78a6f4..b1ca15bb4e 100644
--- a/src/Avalonia.Controls/Flyouts/Flyout.cs
+++ b/src/Avalonia.Controls/Flyouts/Flyout.cs
@@ -38,10 +38,11 @@ namespace Avalonia.Controls
{
if (FlyoutPresenterClasses != null)
{
- //Remove any classes no longer in use
+ //Remove any classes no longer in use, ignoring any pseudoclasses
for (int i = _popup.Child.Classes.Count - 1; i >= 0; i--)
{
- if (!FlyoutPresenterClasses.Contains(_popup.Child.Classes[i]))
+ if (!FlyoutPresenterClasses.Contains(_popup.Child.Classes[i]) &&
+ !_popup.Child.Classes[i].Contains(":"))
{
_popup.Child.Classes.RemoveAt(i);
}
diff --git a/src/Avalonia.Controls/Flyouts/MenuFlyout.cs b/src/Avalonia.Controls/Flyouts/MenuFlyout.cs
index 4cea5199f1..f147719281 100644
--- a/src/Avalonia.Controls/Flyouts/MenuFlyout.cs
+++ b/src/Avalonia.Controls/Flyouts/MenuFlyout.cs
@@ -58,10 +58,11 @@ namespace Avalonia.Controls
{
if (FlyoutPresenterClasses != null)
{
- //Remove any classes no longer in use
+ //Remove any classes no longer in use, ignoring pseudoclasses
for (int i = _popup.Child.Classes.Count - 1; i >= 0; i--)
{
- if (!FlyoutPresenterClasses.Contains(_popup.Child.Classes[i]))
+ if (!FlyoutPresenterClasses.Contains(_popup.Child.Classes[i]) &&
+ !_popup.Child.Classes[i].Contains(":"))
{
_popup.Child.Classes.RemoveAt(i);
}