feat: make sure separator is from correct level.
This commit is contained in:
@@ -7,9 +7,11 @@
|
|||||||
d:DesignHeight="450"
|
d:DesignHeight="450"
|
||||||
x:Class="Ursa.Demo.Pages.BreadcrumbDemo">
|
x:Class="Ursa.Demo.Pages.BreadcrumbDemo">
|
||||||
<StackPanel>
|
<StackPanel>
|
||||||
<u:Breadcrumb>
|
<u:Breadcrumb >
|
||||||
<TextBlock Text="Hello"></TextBlock>
|
<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>
|
</u:Breadcrumb>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</UserControl>
|
</UserControl>
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
<StackPanel Orientation="Horizontal">
|
<StackPanel Orientation="Horizontal">
|
||||||
<ContentPresenter Content="{TemplateBinding Icon}" />
|
<ContentPresenter Content="{TemplateBinding Icon}" />
|
||||||
<ContentPresenter Name="PART_ContentPresenter" Content="{TemplateBinding Content}"/>
|
<ContentPresenter Name="PART_ContentPresenter" Content="{TemplateBinding Content}"/>
|
||||||
|
<ContentPresenter Name="Separator" Content="{TemplateBinding Separator}"></ContentPresenter>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</Border>
|
</Border>
|
||||||
</ControlTemplate>
|
</ControlTemplate>
|
||||||
|
|||||||
@@ -58,6 +58,15 @@ public class Breadcrumb: ItemsControl
|
|||||||
set => SetValue(IconTemplateProperty, value);
|
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()
|
static Breadcrumb()
|
||||||
{
|
{
|
||||||
ItemsPanelProperty.OverrideDefaultValue<Breadcrumb>(_defaultPanel);
|
ItemsPanelProperty.OverrideDefaultValue<Breadcrumb>(_defaultPanel);
|
||||||
@@ -79,20 +88,35 @@ public class Breadcrumb: ItemsControl
|
|||||||
if (container is not BreadcrumbItem breadcrumbItem) return;
|
if (container is not BreadcrumbItem breadcrumbItem) return;
|
||||||
if (!breadcrumbItem.IsSet(BreadcrumbItem.SeparatorProperty))
|
if (!breadcrumbItem.IsSet(BreadcrumbItem.SeparatorProperty))
|
||||||
{
|
{
|
||||||
SeparatorProperty.Changed.AddClassHandler<Breadcrumb, object?>((o, e) =>
|
if (GetSeparatorInstance(Separator) is { } a)
|
||||||
{
|
{
|
||||||
breadcrumbItem.Separator = e.NewValue.Value switch
|
breadcrumbItem.Separator = a;
|
||||||
{
|
}
|
||||||
string s => s,
|
SeparatorProperty.Changed.AddClassHandler<Breadcrumb, object?>((_, args) =>
|
||||||
ITemplate<Control> t => t.Build(),
|
{
|
||||||
_ => e.NewValue.Value?.ToString()
|
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;
|
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 =
|
public static readonly StyledProperty<object?> SeparatorProperty =
|
||||||
AvaloniaProperty.Register<BreadcrumbItem, object?>(
|
AvaloniaProperty.Register<BreadcrumbItem, object?>(
|
||||||
nameof(Separator), "/");
|
nameof(Separator));
|
||||||
|
|
||||||
public object? Separator
|
public object? Separator
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user