diff --git a/demo/Ursa.Demo/Pages/TimelineDemo.axaml b/demo/Ursa.Demo/Pages/TimelineDemo.axaml index 1906f87..39e428a 100644 --- a/demo/Ursa.Demo/Pages/TimelineDemo.axaml +++ b/demo/Ursa.Demo/Pages/TimelineDemo.axaml @@ -32,9 +32,9 @@ > - - - + + + diff --git a/src/Ursa/Controls/Timeline/Timeline.cs b/src/Ursa/Controls/Timeline/Timeline.cs index e6d25f3..1586733 100644 --- a/src/Ursa/Controls/Timeline/Timeline.cs +++ b/src/Ursa/Controls/Timeline/Timeline.cs @@ -83,6 +83,9 @@ public class Timeline: ItemsControl base.PrepareContainerForItemOverride(container, item, index); if (container is TimelineItem t) { + bool start = index == 0; + bool end = index == ItemCount - 1; + t.SetEnd(start, end); if (IconMemberBinding != null) { t.Bind(TimelineItem.IconProperty, IconMemberBinding); diff --git a/src/Ursa/Controls/Timeline/TimelineItem.cs b/src/Ursa/Controls/Timeline/TimelineItem.cs index 9fe8af4..20e57d6 100644 --- a/src/Ursa/Controls/Timeline/TimelineItem.cs +++ b/src/Ursa/Controls/Timeline/TimelineItem.cs @@ -8,6 +8,7 @@ using Avalonia.Media; namespace Ursa.Controls; +[PseudoClasses(":first", ":last")] public class TimelineItem: HeaderedContentControl { public static readonly StyledProperty IconProperty = AvaloniaProperty.Register( @@ -36,6 +37,10 @@ public class TimelineItem: HeaderedContentControl get => GetValue(TypeProperty); set => SetValue(TypeProperty, value); } - - + + internal void SetEnd(bool start, bool end) + { + PseudoClasses.Set(":first", start); + PseudoClasses.Set(":last", end); + } } \ No newline at end of file