diff --git a/demo/Semi.Avalonia.Demo/Pages/CarouselDemo.axaml b/demo/Semi.Avalonia.Demo/Pages/CarouselDemo.axaml
new file mode 100644
index 0000000..0388518
--- /dev/null
+++ b/demo/Semi.Avalonia.Demo/Pages/CarouselDemo.axaml
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/demo/Semi.Avalonia.Demo/Pages/CarouselDemo.axaml.cs b/demo/Semi.Avalonia.Demo/Pages/CarouselDemo.axaml.cs
new file mode 100644
index 0000000..1f96477
--- /dev/null
+++ b/demo/Semi.Avalonia.Demo/Pages/CarouselDemo.axaml.cs
@@ -0,0 +1,26 @@
+using Avalonia;
+using Avalonia.Controls;
+using Avalonia.Interactivity;
+using Avalonia.Markup.Xaml;
+
+namespace Semi.Avalonia.Demo.Pages;
+
+public partial class CarouselDemo : UserControl
+{
+ public CarouselDemo()
+ {
+ InitializeComponent();
+ Previous.Click += OnPreviousClick;
+ Next.Click += OnNextClick;
+ }
+
+ private void OnPreviousClick(object sender, RoutedEventArgs args)
+ {
+ carousel.Previous();
+ }
+
+ private void OnNextClick(object sender, RoutedEventArgs args)
+ {
+ carousel.Next();
+ }
+}
\ No newline at end of file
diff --git a/demo/Semi.Avalonia.Demo/Pages/TabControlDemo.axaml b/demo/Semi.Avalonia.Demo/Pages/TabControlDemo.axaml
index 569c522..7b2fde7 100644
--- a/demo/Semi.Avalonia.Demo/Pages/TabControlDemo.axaml
+++ b/demo/Semi.Avalonia.Demo/Pages/TabControlDemo.axaml
@@ -1,8 +1,12 @@
+ x:Class="Semi.Avalonia.Demo.Pages.TabControlDemo"
+ xmlns="https://github.com/avaloniaui"
+ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+ xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+ d:DesignHeight="450"
+ d:DesignWidth="800"
+ mc:Ignorable="d">
@@ -11,7 +15,8 @@
@@ -22,7 +27,8 @@
@@ -33,7 +39,8 @@
@@ -44,9 +51,16 @@
+
+
+ Tab 1
+ Tab 2
+
+
diff --git a/demo/Semi.Avalonia.Demo/Views/MainView.axaml b/demo/Semi.Avalonia.Demo/Views/MainView.axaml
index e0db770..4936ae5 100644
--- a/demo/Semi.Avalonia.Demo/Views/MainView.axaml
+++ b/demo/Semi.Avalonia.Demo/Views/MainView.axaml
@@ -27,6 +27,9 @@
+
+
+
diff --git a/src/Semi.Avalonia/Controls/Carousel.axaml b/src/Semi.Avalonia/Controls/Carousel.axaml
new file mode 100644
index 0000000..7ea121b
--- /dev/null
+++ b/src/Semi.Avalonia/Controls/Carousel.axaml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Semi.Avalonia/Controls/Controls.axaml b/src/Semi.Avalonia/Controls/Controls.axaml
index 8df5e08..f0f76bc 100644
--- a/src/Semi.Avalonia/Controls/Controls.axaml
+++ b/src/Semi.Avalonia/Controls/Controls.axaml
@@ -5,6 +5,7 @@
+
@@ -29,11 +30,13 @@
+
+
diff --git a/src/Semi.Avalonia/Controls/Popup.axaml b/src/Semi.Avalonia/Controls/Popup.axaml
index c643e4a..60d461f 100644
--- a/src/Semi.Avalonia/Controls/Popup.axaml
+++ b/src/Semi.Avalonia/Controls/Popup.axaml
@@ -20,4 +20,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Semi.Avalonia/Controls/SelectableTextBlock.axaml b/src/Semi.Avalonia/Controls/SelectableTextBlock.axaml
index e548da5..9cca943 100644
--- a/src/Semi.Avalonia/Controls/SelectableTextBlock.axaml
+++ b/src/Semi.Avalonia/Controls/SelectableTextBlock.axaml
@@ -1,4 +1,14 @@
+
+
+
+
+
@@ -34,6 +44,10 @@
+
-
+ IsVisible="True"
+ UseLayoutRounding="False" />
-
-
-
@@ -99,7 +98,7 @@
-
@@ -122,7 +121,7 @@
-
diff --git a/src/Semi.Avalonia/Controls/TabStrip.axaml b/src/Semi.Avalonia/Controls/TabStrip.axaml
new file mode 100644
index 0000000..5e73f96
--- /dev/null
+++ b/src/Semi.Avalonia/Controls/TabStrip.axaml
@@ -0,0 +1,111 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Semi.Avalonia/Controls/TransitioningContentControl.axaml b/src/Semi.Avalonia/Controls/TransitioningContentControl.axaml
new file mode 100644
index 0000000..ef9e87f
--- /dev/null
+++ b/src/Semi.Avalonia/Controls/TransitioningContentControl.axaml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+