diff --git a/src/Avalonia.Base/Collections/AvaloniaList.cs b/src/Avalonia.Base/Collections/AvaloniaList.cs
index ace898b55f..a3c3015a38 100644
--- a/src/Avalonia.Base/Collections/AvaloniaList.cs
+++ b/src/Avalonia.Base/Collections/AvaloniaList.cs
@@ -220,7 +220,7 @@ namespace Avalonia.Collections
///
/// Removes all items from the collection.
///
- public void Clear()
+ public virtual void Clear()
{
if (this.Count > 0)
{
diff --git a/src/Avalonia.Controls/Classes.cs b/src/Avalonia.Controls/Classes.cs
index 02fd6e63bf..c897e86697 100644
--- a/src/Avalonia.Controls/Classes.cs
+++ b/src/Avalonia.Controls/Classes.cs
@@ -86,6 +86,20 @@ namespace Avalonia.Controls
base.AddRange(c);
}
+ ///
+ /// Remvoes all non-pseudoclasses from the collection.
+ ///
+ public override void Clear()
+ {
+ for (var i = Count - 1; i >= 0; --i)
+ {
+ if (!this[i].StartsWith(":"))
+ {
+ RemoveAt(i);
+ }
+ }
+ }
+
///
/// Inserts a style class into the collection.
///
diff --git a/tests/Avalonia.Controls.UnitTests/ClassesTests.cs b/tests/Avalonia.Controls.UnitTests/ClassesTests.cs
index fae97bada7..c9b9d9f82c 100644
--- a/tests/Avalonia.Controls.UnitTests/ClassesTests.cs
+++ b/tests/Avalonia.Controls.UnitTests/ClassesTests.cs
@@ -149,5 +149,17 @@ namespace Avalonia.Controls.UnitTests
Assert.Throws(() => target.Replace(new[] { ":qux" }));
}
+
+ [Fact]
+ public void Clear_Should_Not_Remove_Pseudoclasses()
+ {
+ var target = new Classes("foo", "bar");
+
+ ((IPseudoClasses)target).Add(":baz");
+
+ target.Clear();
+
+ Assert.Equal(new[] { ":baz" }, target);
+ }
}
}