From c6bc631e0d31b2fdde3ed4979bdbc6e9d7b6ea51 Mon Sep 17 00:00:00 2001 From: rabbitism Date: Fri, 5 Jan 2024 00:08:15 +0800 Subject: [PATCH] feat: improve demo. --- demo/Ursa.Demo/Pages/TimelineDemo.axaml | 61 ++++----- .../TimelineIconTemplateSelector.cs | 6 +- src/Ursa.Themes.Semi/Controls/Timeline.axaml | 120 +++++++++--------- src/Ursa/Controls/Timeline/Timeline.cs | 69 ++++++++-- src/Ursa/Controls/Timeline/TimelinePanel.cs | 5 - 5 files changed, 161 insertions(+), 100 deletions(-) diff --git a/demo/Ursa.Demo/Pages/TimelineDemo.axaml b/demo/Ursa.Demo/Pages/TimelineDemo.axaml index 70bccc0..e8f66b0 100644 --- a/demo/Ursa.Demo/Pages/TimelineDemo.axaml +++ b/demo/Ursa.Demo/Pages/TimelineDemo.axaml @@ -14,45 +14,48 @@ mc:Ignorable="d"> - - - - - - + + + + + + - + TimeMemberBinding="{ReflectionBinding Time}" > + + + + + + + - - + + - + + Foreground="{DynamicResource SemiGrey9}" /> + ContentTemplate="{TemplateBinding ContentTemplate}" + TextElement.FontSize="12" + TextElement.Foreground="Gray" /> + Foreground="Gray" + TextWrapping="Wrap"> - - + + @@ -117,62 +120,65 @@ diff --git a/src/Ursa/Controls/Timeline/Timeline.cs b/src/Ursa/Controls/Timeline/Timeline.cs index bcb6cfb..467237f 100644 --- a/src/Ursa/Controls/Timeline/Timeline.cs +++ b/src/Ursa/Controls/Timeline/Timeline.cs @@ -37,15 +37,15 @@ public class Timeline: ItemsControl set => SetValue(HeaderMemberBindingProperty, value); } - public static readonly StyledProperty DescriptionMemberBindingProperty = AvaloniaProperty.Register( - nameof(DescriptionMemberBinding)); + public static readonly StyledProperty ContentMemberBindingProperty = AvaloniaProperty.Register( + nameof(ContentMemberBinding)); [AssignBinding] [InheritDataTypeFromItems(nameof(ItemsSource))] - public IBinding? DescriptionMemberBinding + public IBinding? ContentMemberBinding { - get => GetValue(DescriptionMemberBindingProperty); - set => SetValue(DescriptionMemberBindingProperty, value); + get => GetValue(ContentMemberBindingProperty); + set => SetValue(ContentMemberBindingProperty, value); } @@ -110,6 +110,7 @@ public class Timeline: ItemsControl if (this.ItemsPanelRoot is TimelinePanel panel) { panel.Mode = e.NewValue.Value; + SetItemMode(); } } @@ -133,7 +134,7 @@ public class Timeline: ItemsControl bool start = index == 0; bool end = index == ItemCount - 1; t.SetEnd(start, end); - if (IconMemberBinding != null) + if (IconMemberBinding is not null) { t.Bind(TimelineItem.IconProperty, IconMemberBinding); } @@ -141,9 +142,9 @@ public class Timeline: ItemsControl { t.Bind(HeaderedContentControl.HeaderProperty, HeaderMemberBinding); } - if (DescriptionMemberBinding != null) + if (ContentMemberBinding != null) { - t.Bind(ContentControl.ContentProperty, DescriptionMemberBinding); + t.Bind(ContentControl.ContentProperty, ContentMemberBinding); } if (TimeMemberBinding != null) { @@ -161,6 +162,58 @@ public class Timeline: ItemsControl { var panel = this.ItemsPanelRoot as TimelinePanel; panel.Mode = this.Mode; + SetItemMode(); return base.ArrangeOverride(finalSize); } + + private void SetItemMode() + { + if (ItemsPanelRoot is TimelinePanel panel) + { + var items = panel.Children.OfType(); + if (Mode == TimelineDisplayMode.Left) + { + foreach (var item in items) + { + SetIfUnset(item, TimelineItem.ModeProperty, TimelineItemDisplayMode.Left); + } + } + else if (Mode == TimelineDisplayMode.Right) + { + foreach (var item in items) + { + SetIfUnset(item, TimelineItem.ModeProperty, TimelineItemDisplayMode.Right); + } + } + else if (Mode == TimelineDisplayMode.Center) + { + foreach (var item in items) + { + SetIfUnset(item, TimelineItem.ModeProperty, TimelineItemDisplayMode.Separate); + } + } + else if (Mode == TimelineDisplayMode.Alternate) + { + bool left = false; + foreach (var item in items) + { + if (left) + { + SetIfUnset(item, TimelineItem.ModeProperty, TimelineItemDisplayMode.Left); + } + else + { + SetIfUnset(item, TimelineItem.ModeProperty, TimelineItemDisplayMode.Right); + } + left = !left; + } + } + } + } + + private void SetIfUnset(AvaloniaObject target, StyledProperty property, T value) + { + if (!target.IsSet(property)) + target.SetCurrentValue(property, value); + } } \ No newline at end of file diff --git a/src/Ursa/Controls/Timeline/TimelinePanel.cs b/src/Ursa/Controls/Timeline/TimelinePanel.cs index 8e0992e..f1028b7 100644 --- a/src/Ursa/Controls/Timeline/TimelinePanel.cs +++ b/src/Ursa/Controls/Timeline/TimelinePanel.cs @@ -74,9 +74,4 @@ public class TimelinePanel: Panel //return base.ArrangeOverride(finalSize); return new Size(left + mid + right, height); } - - public override void ApplyTemplate() - { - base.ApplyTemplate(); - } } \ No newline at end of file