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