diff --git a/demo/Ursa.Demo/Pages/MarqueeDemo.axaml b/demo/Ursa.Demo/Pages/MarqueeDemo.axaml index 77040f1..244f606 100644 --- a/demo/Ursa.Demo/Pages/MarqueeDemo.axaml +++ b/demo/Ursa.Demo/Pages/MarqueeDemo.axaml @@ -10,6 +10,7 @@ mc:Ignorable="d"> + - + diff --git a/src/Ursa/Controls/Marquee/Marquee.cs b/src/Ursa/Controls/Marquee/Marquee.cs index a09d098..fe3ac51 100644 --- a/src/Ursa/Controls/Marquee/Marquee.cs +++ b/src/Ursa/Controls/Marquee/Marquee.cs @@ -1,6 +1,7 @@ using System.Runtime.CompilerServices; using Avalonia; using Avalonia.Controls; +using Avalonia.Controls.Primitives; using Avalonia.Layout; using Avalonia.Threading; using Irihi.Avalonia.Shared.Helpers; @@ -75,6 +76,10 @@ public class Marquee : ContentControl _timer.Elapsed -= TimerOnTick; _timer.Stop(); _timer.Dispose(); + if (Presenter is not null) + { + Presenter.SizeChanged -= OnPresenterSizeChanged; + } } /// @@ -104,6 +109,22 @@ public class Marquee : ContentControl set => SetValue(SpeedProperty, value); } + protected override void OnApplyTemplate(TemplateAppliedEventArgs e) + { + base.OnApplyTemplate(e); + if (Presenter is not null) + { + Presenter.SizeChanged+= OnPresenterSizeChanged; + } + } + + private void OnPresenterSizeChanged(object sender, SizeChangedEventArgs e) + { + InvalidatePresenterPosition(); + } + + + private void TimerOnTick(object sender, System.EventArgs e) { var layoutValues = Dispatcher.UIThread.Invoke(GetLayoutValues);