feat: make sure separator is from correct level.
This commit is contained in:
@@ -7,9 +7,11 @@
|
||||
d:DesignHeight="450"
|
||||
x:Class="Ursa.Demo.Pages.BreadcrumbDemo">
|
||||
<StackPanel>
|
||||
<u:Breadcrumb>
|
||||
<u:Breadcrumb >
|
||||
<TextBlock Text="Hello"></TextBlock>
|
||||
<u:BreadcrumbItem Content="World" Icon="?"></u:BreadcrumbItem>
|
||||
<u:BreadcrumbItem Icon="?" Separator="♥"></u:BreadcrumbItem>
|
||||
<TextBlock Text="Avalonia"></TextBlock>
|
||||
<TextBlock Text="Ursa"></TextBlock>
|
||||
</u:Breadcrumb>
|
||||
</StackPanel>
|
||||
</UserControl>
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<ContentPresenter Content="{TemplateBinding Icon}" />
|
||||
<ContentPresenter Name="PART_ContentPresenter" Content="{TemplateBinding Content}"/>
|
||||
<ContentPresenter Name="Separator" Content="{TemplateBinding Separator}"></ContentPresenter>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
</ControlTemplate>
|
||||
|
||||
@@ -57,6 +57,15 @@ public class Breadcrumb: ItemsControl
|
||||
get => GetValue(IconTemplateProperty);
|
||||
set => SetValue(IconTemplateProperty, value);
|
||||
}
|
||||
|
||||
public static readonly StyledProperty<int> MaxItemCountProperty = AvaloniaProperty.Register<Breadcrumb, int>(
|
||||
nameof(MaxItemCount), defaultValue: 4);
|
||||
|
||||
public int MaxItemCount
|
||||
{
|
||||
get => GetValue(MaxItemCountProperty);
|
||||
set => SetValue(MaxItemCountProperty, value);
|
||||
}
|
||||
|
||||
static Breadcrumb()
|
||||
{
|
||||
@@ -79,20 +88,35 @@ public class Breadcrumb: ItemsControl
|
||||
if (container is not BreadcrumbItem breadcrumbItem) return;
|
||||
if (!breadcrumbItem.IsSet(BreadcrumbItem.SeparatorProperty))
|
||||
{
|
||||
SeparatorProperty.Changed.AddClassHandler<Breadcrumb, object?>((o, e) =>
|
||||
if (GetSeparatorInstance(Separator) is { } a)
|
||||
{
|
||||
breadcrumbItem.Separator = e.NewValue.Value switch
|
||||
{
|
||||
string s => s,
|
||||
ITemplate<Control> t => t.Build(),
|
||||
_ => e.NewValue.Value?.ToString()
|
||||
};
|
||||
breadcrumbItem.Separator = a;
|
||||
}
|
||||
SeparatorProperty.Changed.AddClassHandler<Breadcrumb, object?>((_, args) =>
|
||||
{
|
||||
if (GetSeparatorInstance(args.NewValue.Value) is { } b)
|
||||
breadcrumbItem.Separator = b;
|
||||
});
|
||||
}
|
||||
bool b = breadcrumbItem.IsSet(BreadcrumbItem.IconProperty);
|
||||
if(!breadcrumbItem.IsSet(BreadcrumbItem.IconProperty) && IconBinding != null)
|
||||
if (!breadcrumbItem.IsSet(BreadcrumbItem.IconProperty) && IconBinding != null)
|
||||
{
|
||||
breadcrumbItem[!BreadcrumbItem.IconProperty] = IconBinding;
|
||||
}
|
||||
if (!breadcrumbItem.IsSet(BreadcrumbItem.CommandProperty) && CommandBinding != null)
|
||||
{
|
||||
breadcrumbItem[!BreadcrumbItem.CommandProperty] = CommandBinding;
|
||||
}
|
||||
if (!breadcrumbItem.IsSet(BreadcrumbItem.IconTemplateProperty) && IconTemplate != null)
|
||||
{
|
||||
breadcrumbItem.IconTemplate = IconTemplate;
|
||||
}
|
||||
}
|
||||
|
||||
private static object? GetSeparatorInstance(object? separator) => separator switch
|
||||
{
|
||||
null => null,
|
||||
string s => s,
|
||||
ITemplate<Control?> t => t.Build(),
|
||||
_ => separator.ToString()
|
||||
};
|
||||
}
|
||||
@@ -9,7 +9,7 @@ public class BreadcrumbItem: ContentControl
|
||||
{
|
||||
public static readonly StyledProperty<object?> SeparatorProperty =
|
||||
AvaloniaProperty.Register<BreadcrumbItem, object?>(
|
||||
nameof(Separator), "/");
|
||||
nameof(Separator));
|
||||
|
||||
public object? Separator
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user