diff --git a/demo/Ursa.Demo/Models/MenuKeys.cs b/demo/Ursa.Demo/Models/MenuKeys.cs
index 8faf23a..c8a73c2 100644
--- a/demo/Ursa.Demo/Models/MenuKeys.cs
+++ b/demo/Ursa.Demo/Models/MenuKeys.cs
@@ -13,6 +13,7 @@ public static class MenuKeys
public const string MenuKeyNavigation = "Navigation";
public const string MenuKeyPagination = "Pagination";
public const string MenuKeyTagInput = "TagInput";
- public const string MenuKeyTimeline = "Timeline";
+ public const string MenuKeyTimeline = "Timeline";
+ public const string MenuKeySkeleton = "Skeleton";
}
\ No newline at end of file
diff --git a/demo/Ursa.Demo/Pages/SkeletonDemo.axaml b/demo/Ursa.Demo/Pages/SkeletonDemo.axaml
new file mode 100644
index 0000000..25f8b79
--- /dev/null
+++ b/demo/Ursa.Demo/Pages/SkeletonDemo.axaml
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/demo/Ursa.Demo/Pages/SkeletonDemo.axaml.cs b/demo/Ursa.Demo/Pages/SkeletonDemo.axaml.cs
new file mode 100644
index 0000000..6d92de3
--- /dev/null
+++ b/demo/Ursa.Demo/Pages/SkeletonDemo.axaml.cs
@@ -0,0 +1,14 @@
+using Avalonia.Controls;
+using Ursa.Demo.ViewModels;
+
+namespace Ursa.Demo.Pages
+{
+ public partial class SkeletonDemo : UserControl
+ {
+ public SkeletonDemo()
+ {
+ InitializeComponent();
+ DataContext = new SkeletonDemoViewModel();
+ }
+ }
+}
diff --git a/demo/Ursa.Demo/Ursa.Demo.csproj b/demo/Ursa.Demo/Ursa.Demo.csproj
index d11b6e7..60100cf 100644
--- a/demo/Ursa.Demo/Ursa.Demo.csproj
+++ b/demo/Ursa.Demo/Ursa.Demo.csproj
@@ -26,4 +26,10 @@
+
+
+
+ SkeletonDemo.axaml
+
+
diff --git a/demo/Ursa.Demo/ViewModels/MainViewViewModel.cs b/demo/Ursa.Demo/ViewModels/MainViewViewModel.cs
index 8487910..9ea9037 100644
--- a/demo/Ursa.Demo/ViewModels/MainViewViewModel.cs
+++ b/demo/Ursa.Demo/ViewModels/MainViewViewModel.cs
@@ -36,6 +36,7 @@ public class MainViewViewModel : ViewModelBase
MenuKeys.MenuKeyPagination => new PaginationDemoViewModel(),
MenuKeys.MenuKeyTagInput => new TagInputDemoViewModel(),
MenuKeys.MenuKeyTimeline => new TimelineDemoViewModel(),
+ MenuKeys.MenuKeySkeleton => new SkeletonDemoViewModel(),
};
}
}
\ No newline at end of file
diff --git a/demo/Ursa.Demo/ViewModels/MenuViewModel.cs b/demo/Ursa.Demo/ViewModels/MenuViewModel.cs
index f55365f..4fe232e 100644
--- a/demo/Ursa.Demo/ViewModels/MenuViewModel.cs
+++ b/demo/Ursa.Demo/ViewModels/MenuViewModel.cs
@@ -23,6 +23,7 @@ public class MenuViewModel: ViewModelBase
new() { MenuHeader = "Pagination", Key = MenuKeys.MenuKeyPagination },
new() { MenuHeader = "TagInput", Key = MenuKeys.MenuKeyTagInput },
new() { MenuHeader = "Timeline", Key = MenuKeys.MenuKeyTimeline },
+ new() { MenuHeader = "Skeleton", Key = MenuKeys.MenuKeySkeleton },
};
}
}
\ No newline at end of file
diff --git a/demo/Ursa.Demo/ViewModels/SkeletonDemoViewModel.cs b/demo/Ursa.Demo/ViewModels/SkeletonDemoViewModel.cs
new file mode 100644
index 0000000..7ee4274
--- /dev/null
+++ b/demo/Ursa.Demo/ViewModels/SkeletonDemoViewModel.cs
@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Ursa.Demo.ViewModels
+{
+ public class SkeletonDemoViewModel : ViewModelBase
+ {
+ }
+}
diff --git a/src/Ursa.Themes.Semi/Controls/Skeleton.axaml b/src/Ursa.Themes.Semi/Controls/Skeleton.axaml
new file mode 100644
index 0000000..0397547
--- /dev/null
+++ b/src/Ursa.Themes.Semi/Controls/Skeleton.axaml
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Ursa.Themes.Semi/Controls/_index.axaml b/src/Ursa.Themes.Semi/Controls/_index.axaml
index 2038cd0..3704b77 100644
--- a/src/Ursa.Themes.Semi/Controls/_index.axaml
+++ b/src/Ursa.Themes.Semi/Controls/_index.axaml
@@ -13,5 +13,6 @@
+
diff --git a/src/Ursa.Themes.Semi/Themes/Dark/Skeleton.axaml b/src/Ursa.Themes.Semi/Themes/Dark/Skeleton.axaml
new file mode 100644
index 0000000..fb45bc8
--- /dev/null
+++ b/src/Ursa.Themes.Semi/Themes/Dark/Skeleton.axaml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Ursa.Themes.Semi/Themes/Dark/_index.axaml b/src/Ursa.Themes.Semi/Themes/Dark/_index.axaml
index c2ff413..95c4266 100644
--- a/src/Ursa.Themes.Semi/Themes/Dark/_index.axaml
+++ b/src/Ursa.Themes.Semi/Themes/Dark/_index.axaml
@@ -13,5 +13,6 @@
+
diff --git a/src/Ursa.Themes.Semi/Themes/Light/Skeleton.axaml b/src/Ursa.Themes.Semi/Themes/Light/Skeleton.axaml
new file mode 100644
index 0000000..fb45bc8
--- /dev/null
+++ b/src/Ursa.Themes.Semi/Themes/Light/Skeleton.axaml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Ursa.Themes.Semi/Themes/Light/_index.axaml b/src/Ursa.Themes.Semi/Themes/Light/_index.axaml
index c2ff413..95c4266 100644
--- a/src/Ursa.Themes.Semi/Themes/Light/_index.axaml
+++ b/src/Ursa.Themes.Semi/Themes/Light/_index.axaml
@@ -13,5 +13,6 @@
+
diff --git a/src/Ursa.Themes.Semi/Themes/Shared/Skeleton.axaml b/src/Ursa.Themes.Semi/Themes/Shared/Skeleton.axaml
new file mode 100644
index 0000000..ee0bf19
--- /dev/null
+++ b/src/Ursa.Themes.Semi/Themes/Shared/Skeleton.axaml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/Ursa.Themes.Semi/Themes/Shared/_index.axaml b/src/Ursa.Themes.Semi/Themes/Shared/_index.axaml
index 3d93ea5..24ca3ab 100644
--- a/src/Ursa.Themes.Semi/Themes/Shared/_index.axaml
+++ b/src/Ursa.Themes.Semi/Themes/Shared/_index.axaml
@@ -11,5 +11,6 @@
+
diff --git a/src/Ursa.Themes.Semi/Ursa.Themes.Semi.csproj b/src/Ursa.Themes.Semi/Ursa.Themes.Semi.csproj
index 88fc18f..4be105c 100644
--- a/src/Ursa.Themes.Semi/Ursa.Themes.Semi.csproj
+++ b/src/Ursa.Themes.Semi/Ursa.Themes.Semi.csproj
@@ -20,4 +20,8 @@
+
+
+
+
diff --git a/src/Ursa/Controls/Skeleton.cs b/src/Ursa/Controls/Skeleton.cs
new file mode 100644
index 0000000..6c7c64d
--- /dev/null
+++ b/src/Ursa/Controls/Skeleton.cs
@@ -0,0 +1,20 @@
+using Avalonia;
+using Avalonia.Controls;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Ursa.Controls
+{
+ public class Skeleton : ContentControl
+ {
+
+ public static readonly StyledProperty IsActiveProperty =
+ AvaloniaProperty.Register(nameof(IsActive));
+ public bool IsActive
+ {
+ get { return GetValue(IsActiveProperty); }
+ set { SetValue(IsActiveProperty, value); }
+ }
+ }
+}