feat: start/end effect.

This commit is contained in:
rabbitism
2023-12-27 01:36:15 +08:00
parent 3e95f191a0
commit d5b5792870
3 changed files with 13 additions and 5 deletions

View File

@@ -32,9 +32,9 @@
> >
</u:Timeline> </u:Timeline>
<u:Timeline> <u:Timeline>
<u:TimelineItem Header="第一步" Content="Step 1"></u:TimelineItem> <u:TimelineItem Header="第一步" Content="Step 1" Type="Default"></u:TimelineItem>
<u:TimelineItem Header="第二步" Content="Step 2"></u:TimelineItem> <u:TimelineItem Header="第二步" Content="Step 2" Type="Default"></u:TimelineItem>
<u:TimelineItem Header="第三步" Content="Step 3"></u:TimelineItem> <u:TimelineItem Header="第三步" Content="Step 3" Type="Default"></u:TimelineItem>
</u:Timeline> </u:Timeline>
</StackPanel> </StackPanel>
</UserControl> </UserControl>

View File

@@ -83,6 +83,9 @@ public class Timeline: ItemsControl
base.PrepareContainerForItemOverride(container, item, index); base.PrepareContainerForItemOverride(container, item, index);
if (container is TimelineItem t) if (container is TimelineItem t)
{ {
bool start = index == 0;
bool end = index == ItemCount - 1;
t.SetEnd(start, end);
if (IconMemberBinding != null) if (IconMemberBinding != null)
{ {
t.Bind(TimelineItem.IconProperty, IconMemberBinding); t.Bind(TimelineItem.IconProperty, IconMemberBinding);

View File

@@ -8,6 +8,7 @@ using Avalonia.Media;
namespace Ursa.Controls; namespace Ursa.Controls;
[PseudoClasses(":first", ":last")]
public class TimelineItem: HeaderedContentControl public class TimelineItem: HeaderedContentControl
{ {
public static readonly StyledProperty<object?> IconProperty = AvaloniaProperty.Register<TimelineItem, object?>( public static readonly StyledProperty<object?> IconProperty = AvaloniaProperty.Register<TimelineItem, object?>(
@@ -36,6 +37,10 @@ public class TimelineItem: HeaderedContentControl
get => GetValue(TypeProperty); get => GetValue(TypeProperty);
set => SetValue(TypeProperty, value); set => SetValue(TypeProperty, value);
} }
internal void SetEnd(bool start, bool end)
{
PseudoClasses.Set(":first", start);
PseudoClasses.Set(":last", end);
}
} }