diff --git a/Directory.Packages.props b/Directory.Packages.props
index aea3e0c7f..f8369dfbb 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -14,6 +14,7 @@
+
diff --git a/src/AtomUI.Controls/AtomUI.Controls.csproj b/src/AtomUI.Controls/AtomUI.Controls.csproj
index f9efaafae..06e649c70 100644
--- a/src/AtomUI.Controls/AtomUI.Controls.csproj
+++ b/src/AtomUI.Controls/AtomUI.Controls.csproj
@@ -15,6 +15,7 @@
+
diff --git a/src/AtomUI.Controls/AtomUIOSSControlThemesProvider.axaml b/src/AtomUI.Controls/AtomUIOSSControlThemesProvider.axaml
index 52c342614..285332a81 100644
--- a/src/AtomUI.Controls/AtomUIOSSControlThemesProvider.axaml
+++ b/src/AtomUI.Controls/AtomUIOSSControlThemesProvider.axaml
@@ -43,6 +43,7 @@
+
diff --git a/src/AtomUI.Controls/QRCode/QRCode.cs b/src/AtomUI.Controls/QRCode/QRCode.cs
new file mode 100644
index 000000000..a42af4b29
--- /dev/null
+++ b/src/AtomUI.Controls/QRCode/QRCode.cs
@@ -0,0 +1,272 @@
+using System.Reactive.Disposables;
+using AtomUI.Theme;
+using AtomUI.Theme.Data;
+using AtomUI.Theme.Styling;
+using Avalonia;
+using Avalonia.Controls;
+using Avalonia.Controls.Primitives;
+using Avalonia.Controls.Templates;
+using Avalonia.Interactivity;
+using Avalonia.Media;
+using Avalonia.Media.Imaging;
+using Avalonia.Media.Immutable;
+using SkiaSharp;
+using SkiaSharp.QrCode;
+using static System.Enum;
+
+namespace AtomUI.Controls;
+
+///
+/// 二维码纠错等级
+///
+public enum QRCodeEccLevel
+{
+ L = 0,
+ M = 1,
+ Q = 2,
+ H = 3
+}
+
+///
+/// QRCode状态
+///
+public enum QRCodeStatus
+{
+ Active = 0,
+ Expired,
+ Loading,
+ Scanned,
+}
+
+public class QRCode : TemplatedControl,
+ IControlSharedTokenResourcesHost
+{
+ #region 公共属性定义
+
+ public static readonly StyledProperty ValueProperty =
+ AvaloniaProperty.Register(nameof(Value));
+
+ public static readonly StyledProperty BorderedProperty =
+ AvaloniaProperty.Register(nameof(Bordered), true);
+
+ public static readonly StyledProperty ColorProperty =
+ AvaloniaProperty.Register(nameof(Color), new ImmutableSolidColorBrush(Colors.Black));
+
+ public static readonly StyledProperty BgColorProperty =
+ AvaloniaProperty.Register(nameof(BgColor), new ImmutableSolidColorBrush(Colors.Transparent));
+
+ public static readonly StyledProperty EccLevelProperty =
+ AvaloniaProperty.Register(nameof(EccLevel), QRCodeEccLevel.M);
+
+ public static readonly StyledProperty SizeProperty =
+ AvaloniaProperty.Register(nameof(Size), 160);
+
+ public static readonly StyledProperty IconSizeProperty =
+ AvaloniaProperty.Register(nameof(IconSize), 40);
+
+ public static readonly StyledProperty IconProperty =
+ AvaloniaProperty.Register(nameof(Icon));
+
+ public static readonly StyledProperty IconBgColorProperty =
+ AvaloniaProperty.Register(nameof(IconBgColor));
+
+ public static readonly StyledProperty StatusProperty =
+ AvaloniaProperty.Register(nameof(Status));
+
+ public static readonly StyledProperty