Merge pull request #432 from irihitech/breadcrumb

Fix BreadcrumbItem :last pseudo class for dynamic added items.
This commit is contained in:
Zhang Dian
2024-10-21 11:14:27 +08:00
committed by GitHub
9 changed files with 213 additions and 3 deletions

View File

@@ -1,3 +1,4 @@
using System.Collections.Specialized;
using Avalonia;
using Avalonia.Controls;
using Avalonia.Controls.Templates;
@@ -83,9 +84,19 @@ public class Breadcrumb: ItemsControl
return new BreadcrumbItem();
}
protected override void LogicalChildrenCollectionChanged(object? sender, NotifyCollectionChangedEventArgs e)
{
base.LogicalChildrenCollectionChanged(sender, e);
var breadcrumbItems = LogicalChildren.OfType<BreadcrumbItem>().ToList();
for (var i = 0; i < breadcrumbItems.Count; i++)
{
var breadcrumbItem = breadcrumbItems[i];
breadcrumbItem.SetPseudoClassLast(i == breadcrumbItems.Count - 1);
}
}
protected override void PrepareContainerForItemOverride(Control container, object? item, int index)
{
// base.PrepareContainerForItemOverride(container, item, index);
if (container is not BreadcrumbItem breadcrumbItem) return;
if (!breadcrumbItem.IsSet(BreadcrumbItem.SeparatorProperty))
{
@@ -100,8 +111,6 @@ public class Breadcrumb: ItemsControl
});
}
PseudolassesExtensions.Set(container.Classes, BreadcrumbItem.PC_Last, index == ItemCount - 1);
if (container == item) return;
if(!breadcrumbItem.IsSet(ContentControl.ContentProperty))
{

View File

@@ -74,4 +74,9 @@ public class BreadcrumbItem: ContentControl
Command?.Execute(CommandParameter);
}
}
internal void SetPseudoClassLast(bool isLast)
{
PseudoClasses.Set(PC_Last, isLast);
}
}