diff --git a/src/Semi.Avalonia.Demo/MainWindow.axaml b/src/Semi.Avalonia.Demo/MainWindow.axaml
index 30d415c..034eba6 100644
--- a/src/Semi.Avalonia.Demo/MainWindow.axaml
+++ b/src/Semi.Avalonia.Demo/MainWindow.axaml
@@ -16,6 +16,9 @@
+
+
+
diff --git a/src/Semi.Avalonia.Demo/Pages/AutoCompleteBoxDemo.axaml b/src/Semi.Avalonia.Demo/Pages/AutoCompleteBoxDemo.axaml
new file mode 100644
index 0000000..8b249b9
--- /dev/null
+++ b/src/Semi.Avalonia.Demo/Pages/AutoCompleteBoxDemo.axaml
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Semi.Avalonia.Demo/Pages/AutoCompleteBoxDemo.axaml.cs b/src/Semi.Avalonia.Demo/Pages/AutoCompleteBoxDemo.axaml.cs
new file mode 100644
index 0000000..f306155
--- /dev/null
+++ b/src/Semi.Avalonia.Demo/Pages/AutoCompleteBoxDemo.axaml.cs
@@ -0,0 +1,99 @@
+using System.Collections.ObjectModel;
+using Avalonia;
+using Avalonia.Controls;
+using Avalonia.Markup.Xaml;
+using System.Collections.Generic;
+using CommunityToolkit.Mvvm.ComponentModel;
+
+namespace Semi.Avalonia.Demo.Pages;
+
+public partial class AutoCompleteBoxDemo : UserControl
+{
+ public AutoCompleteBoxDemo()
+ {
+ InitializeComponent();
+ this.DataContext = new AutoCompleteBoxDemoViewModel();
+ }
+}
+
+public class AutoCompleteBoxDemoViewModel: ObservableObject
+{
+ public ObservableCollection States { get; set; }
+
+ public AutoCompleteBoxDemoViewModel()
+ {
+ States = new ObservableCollection(GetStates());
+
+ }
+
+ private static List GetStates()
+ {
+ return new List
+ {
+ new StateData("Alabama", "AL", "Montgomery"),
+ new StateData("Alaska", "AK", "Juneau"),
+ new StateData("Arizona", "AZ", "Phoenix"),
+ new StateData("Arkansas", "AR", "Little Rock"),
+ new StateData("California", "CA", "Sacramento"),
+ new StateData("Colorado", "CO", "Denver"),
+ new StateData("Connecticut", "CT", "Hartford"),
+ new StateData("Delaware", "DE", "Dover"),
+ new StateData("Florida", "FL", "Tallahassee"),
+ new StateData("Georgia", "GA", "Atlanta"),
+ new StateData("Hawaii", "HI", "Honolulu"),
+ new StateData("Idaho", "ID", "Boise"),
+ new StateData("Illinois", "IL", "Springfield"),
+ new StateData("Indiana", "IN", "Indianapolis"),
+ new StateData("Iowa", "IA", "Des Moines"),
+ new StateData("Kansas", "KS", "Topeka"),
+ new StateData("Kentucky", "KY", "Frankfort"),
+ new StateData("Louisiana", "LA", "Baton Rouge"),
+ new StateData("Maine", "ME", "Augusta"),
+ new StateData("Maryland", "MD", "Annapolis"),
+ new StateData("Massachusetts", "MA", "Boston"),
+ new StateData("Michigan", "MI", "Lansing"),
+ new StateData("Minnesota", "MN", "St. Paul"),
+ new StateData("Mississippi", "MS", "Jackson"),
+ new StateData("Missouri", "MO", "Jefferson City"),
+ new StateData("Montana", "MT", "Helena"),
+ new StateData("Nebraska", "NE", "Lincoln"),
+ new StateData("Nevada", "NV", "Carson City"),
+ new StateData("New Hampshire", "NH", "Concord"),
+ new StateData("New Jersey", "NJ", "Trenton"),
+ new StateData("New Mexico", "NM", "Santa Fe"),
+ new StateData("New York", "NY", "Albany"),
+ new StateData("North Carolina", "NC", "Raleigh"),
+ new StateData("North Dakota", "ND", "Bismarck"),
+ new StateData("Ohio", "OH", "Columbus"),
+ new StateData("Oklahoma", "OK", "Oklahoma City"),
+ new StateData("Oregon", "OR", "Salem"),
+ new StateData("Pennsylvania", "PA", "Harrisburg"),
+ new StateData("Rhode Island", "RI", "Providence"),
+ new StateData("South Carolina", "SC", "Columbia"),
+ new StateData("South Dakota", "SD", "Pierre"),
+ new StateData("Tennessee", "TN", "Nashville"),
+ new StateData("Texas", "TX", "Austin"),
+ new StateData("Utah", "UT", "Salt Lake City"),
+ new StateData("Vermont", "VT", "Montpelier"),
+ new StateData("Virginia", "VA", "Richmond"),
+ new StateData("Washington", "WA", "Olympia"),
+ new StateData("West Virginia", "WV", "Charleston"),
+ new StateData("Wisconsin", "WI", "Madison"),
+ new StateData("Wyoming", "WY", "Cheyenne"),
+ };
+ }
+}
+
+public class StateData
+{
+ public string Name { get; private set; }
+ public string Abbreviation { get; private set; }
+ public string Capital { get; private set; }
+
+ public StateData(string name, string abbreviation, string capital)
+ {
+ Name = name;
+ Abbreviation = abbreviation;
+ Capital = capital;
+ }
+}
\ No newline at end of file
diff --git a/src/Semi.Avalonia.Demo/Semi.Avalonia.Demo.csproj b/src/Semi.Avalonia.Demo/Semi.Avalonia.Demo.csproj
index fd3a937..2b35c12 100644
--- a/src/Semi.Avalonia.Demo/Semi.Avalonia.Demo.csproj
+++ b/src/Semi.Avalonia.Demo/Semi.Avalonia.Demo.csproj
@@ -22,6 +22,7 @@
+
diff --git a/src/Semi.Avalonia/Controls/AutoCompleteBox.axaml b/src/Semi.Avalonia/Controls/AutoCompleteBox.axaml
new file mode 100644
index 0000000..5cf2c77
--- /dev/null
+++ b/src/Semi.Avalonia/Controls/AutoCompleteBox.axaml
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Semi.Avalonia/Controls/Controls.axaml b/src/Semi.Avalonia/Controls/Controls.axaml
index 9dc53b1..16d331a 100644
--- a/src/Semi.Avalonia/Controls/Controls.axaml
+++ b/src/Semi.Avalonia/Controls/Controls.axaml
@@ -1,6 +1,7 @@
+
diff --git a/src/Semi.Avalonia/Themes/Light/AutoCompleteBox.axaml b/src/Semi.Avalonia/Themes/Light/AutoCompleteBox.axaml
new file mode 100644
index 0000000..d912ebb
--- /dev/null
+++ b/src/Semi.Avalonia/Themes/Light/AutoCompleteBox.axaml
@@ -0,0 +1,12 @@
+
+
+
+ 0 0 8 0 #1A000000
+
+
+ 1
+ 0 4
+ 6
+
+
+
diff --git a/src/Semi.Avalonia/Themes/Light/Light.axaml b/src/Semi.Avalonia/Themes/Light/Light.axaml
index 017a3e2..65064e5 100644
--- a/src/Semi.Avalonia/Themes/Light/Light.axaml
+++ b/src/Semi.Avalonia/Themes/Light/Light.axaml
@@ -2,6 +2,7 @@
+
diff --git a/src/Semi.Avalonia/Themes/Light/TextBox.axaml b/src/Semi.Avalonia/Themes/Light/TextBox.axaml
index f37cbe7..6f1a2d4 100644
--- a/src/Semi.Avalonia/Themes/Light/TextBox.axaml
+++ b/src/Semi.Avalonia/Themes/Light/TextBox.axaml
@@ -4,47 +4,23 @@
xmlns:sys="clr-namespace:System;assembly=System.Runtime">
-
+
-
+
-
-
+
+
-
-
+
+
-
+
-
+
30