diff --git a/demo/Ursa.Demo/Pages/MarqueeDemo.axaml b/demo/Ursa.Demo/Pages/MarqueeDemo.axaml
new file mode 100644
index 0000000..eb79d11
--- /dev/null
+++ b/demo/Ursa.Demo/Pages/MarqueeDemo.axaml
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/demo/Ursa.Demo/Pages/MarqueeDemo.axaml.cs b/demo/Ursa.Demo/Pages/MarqueeDemo.axaml.cs
new file mode 100644
index 0000000..0f58a44
--- /dev/null
+++ b/demo/Ursa.Demo/Pages/MarqueeDemo.axaml.cs
@@ -0,0 +1,13 @@
+using Avalonia;
+using Avalonia.Controls;
+using Avalonia.Markup.Xaml;
+
+namespace Ursa.Demo.Pages;
+
+public partial class MarqueeDemo : UserControl
+{
+ public MarqueeDemo()
+ {
+ InitializeComponent();
+ }
+}
\ No newline at end of file
diff --git a/demo/Ursa.Demo/ViewModels/MainViewViewModel.cs b/demo/Ursa.Demo/ViewModels/MainViewViewModel.cs
index 3fc9e46..b093413 100644
--- a/demo/Ursa.Demo/ViewModels/MainViewViewModel.cs
+++ b/demo/Ursa.Demo/ViewModels/MainViewViewModel.cs
@@ -54,6 +54,7 @@ public partial class MainViewViewModel : ViewModelBase
MenuKeys.MenuKeyIpBox => new IPv4BoxDemoViewModel(),
MenuKeys.MenuKeyKeyGestureInput => new KeyGestureInputDemoViewModel(),
MenuKeys.MenuKeyLoading => new LoadingDemoViewModel(),
+ MenuKeys.MenuKeyMarquee => new MarqueeDemoViewModel(),
MenuKeys.MenuKeyMessageBox => new MessageBoxDemoViewModel(),
MenuKeys.MenuKeyMultiComboBox => new MultiComboBoxDemoViewModel(),
MenuKeys.MenuKeyNavMenu => new NavMenuDemoViewModel(),
diff --git a/demo/Ursa.Demo/ViewModels/MarqueeDemoViewModel.cs b/demo/Ursa.Demo/ViewModels/MarqueeDemoViewModel.cs
new file mode 100644
index 0000000..cea4d3b
--- /dev/null
+++ b/demo/Ursa.Demo/ViewModels/MarqueeDemoViewModel.cs
@@ -0,0 +1,8 @@
+using CommunityToolkit.Mvvm.ComponentModel;
+
+namespace Ursa.Demo.ViewModels;
+
+public class MarqueeDemoViewModel: ViewModelBase
+{
+
+}
\ No newline at end of file
diff --git a/demo/Ursa.Demo/ViewModels/MenuViewModel.cs b/demo/Ursa.Demo/ViewModels/MenuViewModel.cs
index 7559eb7..9b90094 100644
--- a/demo/Ursa.Demo/ViewModels/MenuViewModel.cs
+++ b/demo/Ursa.Demo/ViewModels/MenuViewModel.cs
@@ -35,6 +35,7 @@ public class MenuViewModel : ViewModelBase
new() { MenuHeader = "IPv4Box", Key = MenuKeys.MenuKeyIpBox },
new() { MenuHeader = "KeyGestureInput", Key = MenuKeys.MenuKeyKeyGestureInput },
new() { MenuHeader = "Loading", Key = MenuKeys.MenuKeyLoading },
+ new() { MenuHeader = "Marquee", Key = MenuKeys.MenuKeyMarquee },
new() { MenuHeader = "Message Box", Key = MenuKeys.MenuKeyMessageBox },
new() { MenuHeader = "MultiComboBox", Key = MenuKeys.MenuKeyMultiComboBox, Status = "Updated" },
new() { MenuHeader = "Nav Menu", Key = MenuKeys.MenuKeyNavMenu },
@@ -89,6 +90,7 @@ public static class MenuKeys
public const string MenuKeyIpBox = "IPv4Box";
public const string MenuKeyKeyGestureInput = "KeyGestureInput";
public const string MenuKeyLoading = "Loading";
+ public const string MenuKeyMarquee = "Marquee";
public const string MenuKeyMessageBox = "MessageBox";
public const string MenuKeyMultiComboBox = "MultiComboBox";
public const string MenuKeyNavMenu = "NavMenu";
diff --git a/src/Ursa.Themes.Semi/Controls/Marquee.axaml b/src/Ursa.Themes.Semi/Controls/Marquee.axaml
new file mode 100644
index 0000000..1cf94a2
--- /dev/null
+++ b/src/Ursa.Themes.Semi/Controls/Marquee.axaml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Ursa.Themes.Semi/Controls/_index.axaml b/src/Ursa.Themes.Semi/Controls/_index.axaml
index 4129232..0c8421c 100644
--- a/src/Ursa.Themes.Semi/Controls/_index.axaml
+++ b/src/Ursa.Themes.Semi/Controls/_index.axaml
@@ -27,6 +27,7 @@
+
diff --git a/src/Ursa/Controls/Marquee/Direction.cs b/src/Ursa/Controls/Marquee/Direction.cs
new file mode 100644
index 0000000..bd00e24
--- /dev/null
+++ b/src/Ursa/Controls/Marquee/Direction.cs
@@ -0,0 +1,11 @@
+using Avalonia.Controls;
+
+namespace Ursa.Controls;
+
+public enum Direction
+{
+ Left,
+ Right,
+ Up,
+ Down,
+}
\ No newline at end of file
diff --git a/src/Ursa/Controls/Marquee/Marquee.cs b/src/Ursa/Controls/Marquee/Marquee.cs
new file mode 100644
index 0000000..4208db0
--- /dev/null
+++ b/src/Ursa/Controls/Marquee/Marquee.cs
@@ -0,0 +1,278 @@
+using System.Runtime.CompilerServices;
+using Avalonia;
+using Avalonia.Controls;
+using Avalonia.Layout;
+using Avalonia.Threading;
+using Irihi.Avalonia.Shared.Helpers;
+using Timer = System.Timers.Timer;
+
+namespace Ursa.Controls;
+
+public class Marquee : ContentControl
+{
+ ///
+ /// Defines the property.
+ ///
+ public static readonly StyledProperty IsRunningProperty = AvaloniaProperty.Register