fix: fix breadcrumb insertion issue.

This commit is contained in:
rabbitism
2024-11-01 12:01:38 +08:00
parent 474eb9326f
commit 1ca4a5a10a
3 changed files with 46 additions and 17 deletions

View File

@@ -5,6 +5,7 @@ using Avalonia.Controls.Templates;
using Avalonia.Data;
using Avalonia.Layout;
using Avalonia.Metadata;
using Avalonia.VisualTree;
namespace Ursa.Controls;
@@ -84,17 +85,6 @@ 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)
{
if (container is not BreadcrumbItem breadcrumbItem) return;
@@ -149,4 +139,13 @@ public class Breadcrumb: ItemsControl
ITemplate<Control?> t => t.Build(),
_ => separator.ToString()
};
internal void InvalidateContainers()
{
var breadcrumbItems = this.GetVisualDescendants().OfType<BreadcrumbItem>().ToList();
for (var i = 0; i < breadcrumbItems.Count; i++)
{
breadcrumbItems[i].SetPseudoClassLast(i == breadcrumbItems.Count - 1);
}
}
}

View File

@@ -79,4 +79,11 @@ public class BreadcrumbItem: ContentControl
{
PseudoClasses.Set(PC_Last, isLast);
}
protected override void OnAttachedToVisualTree(VisualTreeAttachmentEventArgs e)
{
base.OnAttachedToVisualTree(e);
var parent = this.Parent as Breadcrumb;
parent?.InvalidateContainers();
}
}