Browse Source

Don't remove pseudoclasses when clearing Classes.

Fixes #1080
pull/1084/head
Steven Kirk 9 years ago
parent
commit
474aa60403
  1. 2
      src/Avalonia.Base/Collections/AvaloniaList.cs
  2. 14
      src/Avalonia.Controls/Classes.cs
  3. 12
      tests/Avalonia.Controls.UnitTests/ClassesTests.cs

2
src/Avalonia.Base/Collections/AvaloniaList.cs

@ -220,7 +220,7 @@ namespace Avalonia.Collections
/// <summary>
/// Removes all items from the collection.
/// </summary>
public void Clear()
public virtual void Clear()
{
if (this.Count > 0)
{

14
src/Avalonia.Controls/Classes.cs

@ -86,6 +86,20 @@ namespace Avalonia.Controls
base.AddRange(c);
}
/// <summary>
/// Remvoes all non-pseudoclasses from the collection.
/// </summary>
public override void Clear()
{
for (var i = Count - 1; i >= 0; --i)
{
if (!this[i].StartsWith(":"))
{
RemoveAt(i);
}
}
}
/// <summary>
/// Inserts a style class into the collection.
/// </summary>

12
tests/Avalonia.Controls.UnitTests/ClassesTests.cs

@ -149,5 +149,17 @@ namespace Avalonia.Controls.UnitTests
Assert.Throws<ArgumentException>(() => 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);
}
}
}

Loading…
Cancel
Save