diff --git a/.gitignore b/.gitignore
index e1616b05..b88e2620 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,8 +7,11 @@
/DockBoxResearch/bin
/DockBoxResearch/obj
/HandyControl.sln.DotSettings.user
-/Net35/.vs
Net35/HandyControlDemo_Net35/bin
Net35/HandyControlDemo_Net35/obj
Net35/HandyControl_Net35/bin
-Net35/HandyControl_Net35/obj
\ No newline at end of file
+Net35/HandyControl_Net35/obj
+Net40/HandyControlDemo_Net40/bin
+Net40/HandyControlDemo_Net40/obj
+Net40/HandyControl_Net40/bin
+Net40/HandyControl_Net40/obj
\ No newline at end of file
diff --git a/HandyControl/Controls/CoverFlow/CoverFlowItem.cs b/HandyControl/Controls/CoverFlow/CoverFlowItem.cs
index 634911a9..2d3c1805 100644
--- a/HandyControl/Controls/CoverFlow/CoverFlowItem.cs
+++ b/HandyControl/Controls/CoverFlow/CoverFlowItem.cs
@@ -116,11 +116,7 @@ namespace HandyControl.Controls
private double GetAngleByPos(int index) => Math.Sign(Index - index) * -90;
- private double GetXByPos(int index)
- {
- Console.WriteLine(Index * Interval + Math.Sign(Index - index) * 1.5);
- return Index * Interval + Math.Sign(Index - index) * 1.5;
- }
+ private double GetXByPos(int index) => Index * Interval + Math.Sign(Index - index) * 1.5;
private double GetZByPos(int index) => Index == index ? 1 : 0;
diff --git a/HandyControl/HandyControl.csproj b/HandyControl/HandyControl.csproj
index 06a12963..282d82e9 100644
--- a/HandyControl/HandyControl.csproj
+++ b/HandyControl/HandyControl.csproj
@@ -743,7 +743,6 @@
TextTemplatingFileGenerator
ResourceToken.cs
-
@@ -751,7 +750,7 @@
- echo > $(ProjectDir)Themes\Styles\Window.xaml
-$(ProjectDir)TextTransform.exe -out $(ProjectDir)Themes\Styles\Window.xaml $(ProjectDir)Themes\Styles\Window-netgt40.tt
+
+
\ No newline at end of file
diff --git a/HandyControl/TextTransform.exe b/HandyControl/TextTransform.exe
deleted file mode 100644
index 5fe66a07..00000000
Binary files a/HandyControl/TextTransform.exe and /dev/null differ
diff --git a/HandyControl/Themes/Styles/Window-net40.tt b/HandyControl/Themes/Styles/Window-net40.tt
deleted file mode 100644
index 67327d0f..00000000
--- a/HandyControl/Themes/Styles/Window-net40.tt
+++ /dev/null
@@ -1,219 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/HandyControl/Themes/Styles/Window-netgt40.tt b/HandyControl/Themes/Styles/Window-netgt40.tt
deleted file mode 100644
index 82eda9f8..00000000
--- a/HandyControl/Themes/Styles/Window-netgt40.tt
+++ /dev/null
@@ -1,218 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/HandyControl/Themes/Styles/Window.xaml b/HandyControl/Themes/Styles/Window.xaml
index 82eda9f8..f41d26ac 100644
--- a/HandyControl/Themes/Styles/Window.xaml
+++ b/HandyControl/Themes/Styles/Window.xaml
@@ -1,218 +1,218 @@
-
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
+
-
+
-
+
-
+
-
+
+
\ No newline at end of file
diff --git a/HandyControl_Net40.sln b/HandyControl_Net40.sln
index 9b285f34..75ef70cb 100644
--- a/HandyControl_Net40.sln
+++ b/HandyControl_Net40.sln
@@ -3,21 +3,24 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.27703.2000
MinimumVisualStudioVersion = 10.0.40219.1
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HandyControl_Net40", "HandyControl\HandyControl_Net40.csproj", "{DC966E3D-BCFF-4652-98CF-070E5494749A}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HandyControl_Net40", "Net40\HandyControl_Net40\HandyControl_Net40.csproj", "{DC966E3D-BCFF-4652-98CF-070E5494749A}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HandyControlDemo_Net40", "Net40\HandyControlDemo_Net40\HandyControlDemo_Net40.csproj", "{9A7B52E6-94BB-4E7E-BB6A-7CF6761B79A7}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
- Release-Net47|Any CPU = Release-Net47|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{DC966E3D-BCFF-4652-98CF-070E5494749A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DC966E3D-BCFF-4652-98CF-070E5494749A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DC966E3D-BCFF-4652-98CF-070E5494749A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DC966E3D-BCFF-4652-98CF-070E5494749A}.Release|Any CPU.Build.0 = Release|Any CPU
- {DC966E3D-BCFF-4652-98CF-070E5494749A}.Release-Net47|Any CPU.ActiveCfg = Release|Any CPU
- {DC966E3D-BCFF-4652-98CF-070E5494749A}.Release-Net47|Any CPU.Build.0 = Release|Any CPU
+ {9A7B52E6-94BB-4E7E-BB6A-7CF6761B79A7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {9A7B52E6-94BB-4E7E-BB6A-7CF6761B79A7}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {9A7B52E6-94BB-4E7E-BB6A-7CF6761B79A7}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {9A7B52E6-94BB-4E7E-BB6A-7CF6761B79A7}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/Net35/HandyControlDemo_Net35/HandyControlDemo_Net35.csproj b/Net35/HandyControlDemo_Net35/HandyControlDemo_Net35.csproj
index 766bd352..a22f3d4a 100644
--- a/Net35/HandyControlDemo_Net35/HandyControlDemo_Net35.csproj
+++ b/Net35/HandyControlDemo_Net35/HandyControlDemo_Net35.csproj
@@ -711,7 +711,9 @@
-
+
+ Designer
+
\ No newline at end of file
diff --git a/Net40/HandyControlDemo_Net40/App.xaml b/Net40/HandyControlDemo_Net40/App.xaml
new file mode 100644
index 00000000..dea6f894
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/App.xaml
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Net40/HandyControlDemo_Net40/App.xaml.cs b/Net40/HandyControlDemo_Net40/App.xaml.cs
new file mode 100644
index 00000000..4be12a85
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/App.xaml.cs
@@ -0,0 +1,59 @@
+using System;
+using System.Globalization;
+using System.Threading;
+using System.Windows;
+using HandyControl.Controls;
+using HandyControl.Data;
+using HandyControl.Tools;
+using HandyControlDemo.Data;
+using HandyControlDemo.Tools;
+
+namespace HandyControlDemo
+{
+ ///
+ /// App.xaml 的交互逻辑
+ ///
+ public partial class App
+ {
+ protected override void OnStartup(StartupEventArgs e)
+ {
+ base.OnStartup(e);
+
+ GlobalData.Init();
+ Thread.CurrentThread.CurrentUICulture = new CultureInfo(GlobalData.Config.Lang);
+
+ if (GlobalData.Config.Skin != SkinType.Default)
+ {
+ UpdateSkin(GlobalData.Config.Skin);
+ }
+
+ BlurWindow.SystemVersionInfo = CommonHelper.GetSystemVersionInfo();
+ }
+
+ protected override void OnExit(ExitEventArgs e)
+ {
+ base.OnExit(e);
+ GlobalData.Save();
+ }
+
+ internal void UpdateSkin(SkinType skin)
+ {
+ var skins0 = Resources.MergedDictionaries[0];
+ skins0.MergedDictionaries.Clear();
+ skins0.MergedDictionaries.Add(ResourceHelper.GetSkin(skin));
+ skins0.MergedDictionaries.Add(ResourceHelper.GetSkin(typeof(App).Assembly, "Resources/Themes", skin));
+
+ var skins1 = Resources.MergedDictionaries[1];
+ skins1.MergedDictionaries.Clear();
+ skins1.MergedDictionaries.Add(new ResourceDictionary
+ {
+ Source = new Uri("pack://application:,,,/HandyControl;component/Themes/Theme.xaml")
+ });
+ skins1.MergedDictionaries.Add(new ResourceDictionary
+ {
+ Source = new Uri("pack://application:,,,/HandyControlDemo;component/Resources/Themes/Theme.xaml")
+ });
+ Current.MainWindow?.OnApplyTemplate();
+ }
+ }
+}
diff --git a/Net40/HandyControlDemo_Net40/Data/AppConfig.cs b/Net40/HandyControlDemo_Net40/Data/AppConfig.cs
new file mode 100644
index 00000000..1768fb96
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/Data/AppConfig.cs
@@ -0,0 +1,14 @@
+using System;
+using HandyControl.Data;
+
+namespace HandyControlDemo.Data
+{
+ internal class AppConfig
+ {
+ public static string SavePath = $"{AppDomain.CurrentDomain.BaseDirectory}AppConfig.json";
+
+ public string Lang { get; set; } = "zh-cn";
+
+ public SkinType Skin { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/Net40/HandyControlDemo_Net40/Data/Enum/DemoType.cs b/Net40/HandyControlDemo_Net40/Data/Enum/DemoType.cs
new file mode 100644
index 00000000..09c3039c
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/Data/Enum/DemoType.cs
@@ -0,0 +1,13 @@
+
+namespace HandyControlDemo.Data
+{
+ public enum DemoType
+ {
+ Type1 = 1,
+ Type2,
+ Type3,
+ Type4,
+ Type5,
+ Type6
+ }
+}
\ No newline at end of file
diff --git a/Net40/HandyControlDemo_Net40/Data/GlobalData.cs b/Net40/HandyControlDemo_Net40/Data/GlobalData.cs
new file mode 100644
index 00000000..0846ca13
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/Data/GlobalData.cs
@@ -0,0 +1,37 @@
+using System;
+using System.IO;
+using Newtonsoft.Json;
+
+namespace HandyControlDemo.Data
+{
+ internal class GlobalData
+ {
+ public static void Init()
+ {
+ if (File.Exists(AppConfig.SavePath))
+ {
+ try
+ {
+ var json = File.ReadAllText(AppConfig.SavePath);
+ Config = JsonConvert.DeserializeObject(json);
+ }
+ catch
+ {
+ Config = new AppConfig();
+ }
+ }
+ else
+ {
+ Config = new AppConfig();
+ }
+ }
+
+ public static void Save()
+ {
+ var json = JsonConvert.SerializeObject(Config);
+ File.WriteAllText(AppConfig.SavePath, json);
+ }
+
+ public static AppConfig Config { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/Net40/HandyControlDemo_Net40/Data/MessageToken.cs b/Net40/HandyControlDemo_Net40/Data/MessageToken.cs
new file mode 100644
index 00000000..739b20bb
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/Data/MessageToken.cs
@@ -0,0 +1,143 @@
+namespace HandyControlDemo.Data
+{
+ public class MessageToken
+ {
+ public static readonly string GrowlDemoCtl = nameof(GrowlDemoCtl);
+
+ public static readonly string LoadingDemoCtl = nameof(LoadingDemoCtl);
+
+ public static readonly string ImageBrowserDemoCtl = nameof(ImageBrowserDemoCtl);
+
+ public static readonly string ColorPickerDemoCtl = nameof(ColorPickerDemoCtl);
+
+ public static readonly string CarouselDemoCtl = nameof(CarouselDemoCtl);
+
+ public static readonly string CompareSliderDemoCtl = nameof(CompareSliderDemoCtl);
+
+ public static readonly string TimeBarDemoCtl = nameof(TimeBarDemoCtl);
+
+ public static readonly string PaginationDemoCtl = nameof(PaginationDemoCtl);
+
+ public static readonly string AnimationPathDemoCtl = nameof(AnimationPathDemoCtl);
+
+ public static readonly string StepBarDemoCtl = nameof(StepBarDemoCtl);
+
+ public static readonly string ClockDemoCtl = nameof(ClockDemoCtl);
+
+ public static readonly string TimePickerDemoCtl = nameof(TimePickerDemoCtl);
+
+ public static readonly string CirclePanelDemoCtl = nameof(CirclePanelDemoCtl);
+
+ public static readonly string NumericUpDownDemoCtl = nameof(NumericUpDownDemoCtl);
+
+ public static readonly string WindowDemoCtl = nameof(WindowDemoCtl);
+
+ public static readonly string ScrollViewerDemoCtl = nameof(ScrollViewerDemoCtl);
+
+ public static readonly string PreviewSliderDemoCtl = nameof(PreviewSliderDemoCtl);
+
+ public static readonly string CircleProgressBarDemoCtl = nameof(CircleProgressBarDemoCtl);
+
+ public static readonly string TextBoxDemoCtl = nameof(TextBoxDemoCtl);
+
+ public static readonly string ComboBoxDemoCtl = nameof(ComboBoxDemoCtl);
+
+ public static readonly string PasswordBoxDemoCtl = nameof(PasswordBoxDemoCtl);
+
+ public static readonly string DatePickerDemoCtl = nameof(DatePickerDemoCtl);
+
+ public static readonly string DateTimePickerDemoCtl = nameof(DateTimePickerDemoCtl);
+
+ public static readonly string CalendarWithClockDemoCtl = nameof(CalendarWithClockDemoCtl);
+
+ public static readonly string SearchBarDemoCtl = nameof(SearchBarDemoCtl);
+
+ public static readonly string TagDemoCtl = nameof(TagDemoCtl);
+
+ public static readonly string GifImageDemoCtl = nameof(GifImageDemoCtl);
+
+ public static readonly string OutlineTextDemoCtl = nameof(OutlineTextDemoCtl);
+
+ public static readonly string FlipClockDemoCtl = nameof(FlipClockDemoCtl);
+
+ public static readonly string QQGroupView = nameof(QQGroupView);
+
+ public static readonly string BlurWindow = nameof(BlurWindow);
+
+ public static readonly string NoNonClientAreaDragableWindow = nameof(NoNonClientAreaDragableWindow);
+
+ public static readonly string RateDemoCtl = nameof(RateDemoCtl);
+
+ public static readonly string ShieldDemoCtl = nameof(ShieldDemoCtl);
+
+ public static readonly string WaterfallPanelDemoCtl = nameof(WaterfallPanelDemoCtl);
+
+ public static readonly string CoverViewDemoCtl = nameof(CoverViewDemoCtl);
+
+ public static readonly string CoverFlowDemoCtl = nameof(CoverFlowDemoCtl);
+
+ public static readonly string ButtonDemoCtl = nameof(ButtonDemoCtl);
+
+ public static readonly string ToggleButtonDemoCtl = nameof(ToggleButtonDemoCtl);
+
+ public static readonly string ExpanderDemoCtl = nameof(ExpanderDemoCtl);
+
+ public static readonly string ProgressBarDemoCtl = nameof(ProgressBarDemoCtl);
+
+ public static readonly string TabControlDemoCtl = nameof(TabControlDemoCtl);
+
+ public static readonly string CalendarDemoCtl = nameof(CalendarDemoCtl);
+
+ public static readonly string NaiveDatePickerDemoCtl = nameof(NaiveDatePickerDemoCtl);
+
+ public static readonly string NaiveTextBoxDemoCtl = nameof(NaiveTextBoxDemoCtl);
+
+ public static readonly string TextBlockDemoCtl = nameof(TextBlockDemoCtl);
+
+ public static readonly string NaiveComboBoxDemoCtl = nameof(NaiveComboBoxDemoCtl);
+
+ public static readonly string NaivePasswordBoxDemoCtl = nameof(NaivePasswordBoxDemoCtl);
+
+ public static readonly string NaiveTabControlDemoCtl = nameof(NaiveTabControlDemoCtl);
+
+ public static readonly string DataGridDemoCtl = nameof(DataGridDemoCtl);
+
+ public static readonly string CheckBoxDemoCtl = nameof(CheckBoxDemoCtl);
+
+ public static readonly string ListBoxDemoCtl = nameof(ListBoxDemoCtl);
+
+ public static readonly string MenuDemoCtl = nameof(MenuDemoCtl);
+
+ public static readonly string TreeViewDemoCtl = nameof(TreeViewDemoCtl);
+
+ public static readonly string BorderDemoCtl = nameof(BorderDemoCtl);
+
+ public static readonly string RadioButtonDemoCtl = nameof(RadioButtonDemoCtl);
+
+ public static readonly string NaiveScrollViewerDemoCtl = nameof(NaiveScrollViewerDemoCtl);
+
+ public static readonly string BrushDemoCtl = nameof(BrushDemoCtl);
+
+ public static readonly string SliderDemoCtl = nameof(SliderDemoCtl);
+
+ public static readonly string GroupBoxDemoCtl = nameof(GroupBoxDemoCtl);
+
+ public static readonly string ListViewDemoCtl = nameof(ListViewDemoCtl);
+
+ public static readonly string RichTextBoxDemoCtl = nameof(RichTextBoxDemoCtl);
+
+ public static readonly string ToolBarDemoCtl = nameof(ToolBarDemoCtl);
+
+ public static readonly string CommonWindow = nameof(CommonWindow);
+
+ public static readonly string CustomNonClientAreaWindow = nameof(CustomNonClientAreaWindow);
+
+ public static readonly string LoadShowContent = nameof(LoadShowContent);
+
+ public static readonly string FullSwitch = nameof(FullSwitch);
+
+ public static readonly string ContributorsView = nameof(ContributorsView);
+
+ public static readonly string ClearLeftSelected = nameof(ClearLeftSelected);
+ }
+}
\ No newline at end of file
diff --git a/Net40/HandyControlDemo_Net40/Data/MessageToken.tt b/Net40/HandyControlDemo_Net40/Data/MessageToken.tt
new file mode 100644
index 00000000..4962b589
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/Data/MessageToken.tt
@@ -0,0 +1,104 @@
+<#@ template debug="false" hostspecific="false" language="C#" #>
+<#@ import namespace="System.Collections.Generic"#>
+<#@ output extension=".cs" #>
+<#
+var controlList = new List
+{
+ "GrowlDemoCtl",
+ "LoadingDemoCtl",
+ "ImageBrowserDemoCtl",
+ "ColorPickerDemoCtl",
+ "CarouselDemoCtl",
+ "CompareSliderDemoCtl",
+ "TimeBarDemoCtl",
+ "PaginationDemoCtl",
+ "AnimationPathDemoCtl",
+ "StepBarDemoCtl",
+ "ClockDemoCtl",
+ "TimePickerDemoCtl",
+ "CirclePanelDemoCtl",
+ "NumericUpDownDemoCtl",
+ "WindowDemoCtl",
+ "ScrollViewerDemoCtl",
+ "PreviewSliderDemoCtl",
+ "CircleProgressBarDemoCtl",
+ "TextBoxDemoCtl",
+ "ComboBoxDemoCtl",
+ "PasswordBoxDemoCtl",
+ "DatePickerDemoCtl",
+ "DateTimePickerDemoCtl",
+ "CalendarWithClockDemoCtl",
+ "SearchBarDemoCtl",
+ "TagDemoCtl",
+ "GifImageDemoCtl",
+ "OutlineTextDemoCtl",
+ "FlipClockDemoCtl",
+ "QQGroupView",
+ "BlurWindow",
+ "NoNonClientAreaDragableWindow",
+ "RateDemoCtl",
+ "ShieldDemoCtl",
+ "WaterfallPanelDemoCtl",
+ "CoverViewDemoCtl",
+ "CoverFlowDemoCtl"
+};
+var styleList = new List
+{
+ "ButtonDemoCtl",
+ "ToggleButtonDemoCtl",
+ "ExpanderDemoCtl",
+ "ProgressBarDemoCtl",
+ "TabControlDemoCtl",
+ "CalendarDemoCtl",
+ "NaiveDatePickerDemoCtl",
+ "NaiveTextBoxDemoCtl",
+ "TextBlockDemoCtl",
+ "NaiveComboBoxDemoCtl",
+ "NaivePasswordBoxDemoCtl",
+ "NaiveTabControlDemoCtl",
+ "DataGridDemoCtl",
+ "CheckBoxDemoCtl",
+ "ListBoxDemoCtl",
+ "MenuDemoCtl",
+ "TreeViewDemoCtl",
+ "BorderDemoCtl",
+ "RadioButtonDemoCtl",
+ "NaiveScrollViewerDemoCtl",
+ "BrushDemoCtl",
+ "SliderDemoCtl",
+ "GroupBoxDemoCtl",
+ "ListViewDemoCtl",
+ "RichTextBoxDemoCtl",
+ "ToolBarDemoCtl"
+};
+var windowList = new List
+{
+ "CommonWindow",
+ "CustomNonClientAreaWindow"
+};
+#>
+namespace HandyControlDemo.Data
+{
+ public class MessageToken
+ {
+ <#foreach(var item in controlList){#>
+ public static readonly string <#=item#> = nameof(<#=item#>);
+
+ <#}#>
+<#foreach(var item in styleList){#>
+ public static readonly string <#=item#> = nameof(<#=item#>);
+
+ <#}#>
+<#foreach(var item in windowList){#>
+ public static readonly string <#=item#> = nameof(<#=item#>);
+
+ <#}#>
+ public static readonly string LoadShowContent = nameof(LoadShowContent);
+
+ public static readonly string FullSwitch = nameof(FullSwitch);
+
+ public static readonly string ContributorsView = nameof(ContributorsView);
+
+ public static readonly string ClearLeftSelected = nameof(ClearLeftSelected);
+ }
+}
\ No newline at end of file
diff --git a/Net40/HandyControlDemo_Net40/Data/Model/ContributorModel.cs b/Net40/HandyControlDemo_Net40/Data/Model/ContributorModel.cs
new file mode 100644
index 00000000..8fe9934f
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/Data/Model/ContributorModel.cs
@@ -0,0 +1,12 @@
+
+namespace HandyControlDemo.Data
+{
+ public class ContributorModel
+ {
+ public string UserName { get; set; }
+
+ public string Link { get; set; }
+
+ public string AvatarUri { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/Net40/HandyControlDemo_Net40/Data/Model/DemoDataModel.cs b/Net40/HandyControlDemo_Net40/Data/Model/DemoDataModel.cs
new file mode 100644
index 00000000..9be6e383
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/Data/Model/DemoDataModel.cs
@@ -0,0 +1,22 @@
+using System.Collections.Generic;
+
+
+namespace HandyControlDemo.Data
+{
+ public class DemoDataModel
+ {
+ public int Index { get; set; }
+
+ public string Name { get; set; }
+
+ public bool IsSelected { get; set; }
+
+ public string Remark { get; set; }
+
+ public DemoType Type { get; set; }
+
+ public string ImgPath { get; set; }
+
+ public List DataList { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/Net40/HandyControlDemo_Net40/Data/Model/StepBarDemoModel.cs b/Net40/HandyControlDemo_Net40/Data/Model/StepBarDemoModel.cs
new file mode 100644
index 00000000..7cd77a20
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/Data/Model/StepBarDemoModel.cs
@@ -0,0 +1,9 @@
+namespace HandyControlDemo.Data
+{
+ public class StepBarDemoModel
+ {
+ public string Header { get; set; }
+
+ public string Content { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/Net40/HandyControlDemo_Net40/HandyControlDemo_Net40.csproj b/Net40/HandyControlDemo_Net40/HandyControlDemo_Net40.csproj
new file mode 100644
index 00000000..6bda4e34
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/HandyControlDemo_Net40.csproj
@@ -0,0 +1,784 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {9A7B52E6-94BB-4E7E-BB6A-7CF6761B79A7}
+ WinExe
+ HandyControlDemo
+ HandyControlDemo
+ 512
+ {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+ 4
+ true
+
+
+
+
+
+ AnyCPU
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+ v4.0
+
+
+ AnyCPU
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+ v4.0
+
+
+ Resources\Img\icon.ico
+
+
+
+ ..\..\packages\CommonServiceLocator.2.0.2\lib\net40\CommonServiceLocator.dll
+
+
+ ..\..\packages\MvvmLightLibs.5.4.1\lib\net40\GalaSoft.MvvmLight.dll
+
+
+ ..\..\packages\MvvmLightLibs.5.4.1\lib\net40\GalaSoft.MvvmLight.Extras.dll
+
+
+
+ ..\..\packages\Microsoft.Windows.Shell.3.0.1.0\lib\net40\Microsoft.Windows.Shell.dll
+
+
+ ..\..\packages\Newtonsoft.Json.11.0.2\lib\net40\Newtonsoft.Json.dll
+
+
+
+
+
+ ..\..\packages\MvvmLightLibs.5.4.1\lib\net40\System.Windows.Interactivity.dll
+
+
+ 4.0
+
+
+
+
+
+
+ MSBuild:Compile
+ Designer
+
+
+
+
+
+ True
+ True
+ MessageToken.tt
+
+
+
+
+
+ True
+ True
+ Lang.resx
+
+
+ True
+ True
+ Lang.en.resx
+
+
+
+
+
+
+ Avatar.xaml
+
+
+ AnimationPathDemoCtl.xaml
+
+
+ CalendarWithClockDemoCtl.xaml
+
+
+ CarouselDemoCtl.xaml
+
+
+ CirclePanelDemoCtl.xaml
+
+
+ CircleProgressBarDemoCtl.xaml
+
+
+ ClockDemoCtl.xaml
+
+
+ ColorPickerDemoCtl.xaml
+
+
+ ComboBoxDemoCtl.xaml
+
+
+ CompareSliderDemoCtl.xaml
+
+
+ CoverFlowDemoCtl.xaml
+
+
+ CoverViewDemoCtl.xaml
+
+
+ DatePickerDemoCtl.xaml
+
+
+ DateTimePickerDemoCtl.xaml
+
+
+ FlipClockDemoCtl.xaml
+
+
+ OutlineTextDemoCtl.xaml
+
+
+ GifImageDemoCtl.xaml
+
+
+ GrowlDemoCtl.xaml
+
+
+ ImageBrowserDemoCtl.xaml
+
+
+ LoadingDemoCtl.xaml
+
+
+ NumericUpDownDemoCtl.xaml
+
+
+ PasswordBoxDemoCtl.xaml
+
+
+ PreviewSliderDemoCtl.xaml
+
+
+ RateDemoCtl.xaml
+
+
+ ScrollViewerDemoCtl.xaml
+
+
+ SearchBarDemoCtl.xaml
+
+
+ ShieldDemoCtl.xaml
+
+
+ StepBarDemoCtl.xaml
+
+
+ TagDemoCtl.xaml
+
+
+ TextBoxDemoCtl.xaml
+
+
+ TimePickerDemoCtl.xaml
+
+
+ WaterfallPanelDemoCtl.xaml
+
+
+ WindowDemoCtl.xaml
+
+
+ ContributorsView.xaml
+
+
+ NoUserContent.xaml
+
+
+ QQGroupView.xaml
+
+
+ BorderDemoCtl.xaml
+
+
+ BrushDemoCtl.xaml
+
+
+ ButtonDemoCtl.xaml
+
+
+ CalendarDemoCtl.xaml
+
+
+ CheckBoxDemoCtl.xaml
+
+
+ GroupBoxDemoCtl.xaml
+
+
+ ListViewDemoCtl.xaml
+
+
+ NaiveComboBoxDemoCtl.xaml
+
+
+ DataGridDemoCtl.xaml
+
+
+ NaiveDatePickerDemoCtl.xaml
+
+
+ ExpanderDemoCtl.xaml
+
+
+ LeftMainContent.xaml
+
+
+ MainContent.xaml
+
+
+ PaginationDemoCtl.xaml
+
+
+ TimeBarDemoCtl.xaml
+
+
+ ListBoxDemoCtl.xaml
+
+
+ MenuDemoCtl.xaml
+
+
+ NaiveScrollViewerDemoCtl.xaml
+
+
+ NaiveTabControlDemoCtl.xaml
+
+
+ NaivePasswordBoxDemoCtl.xaml
+
+
+ ProgressBarDemoCtl.xaml
+
+
+ TabControlDemoCtl.xaml
+
+
+ RadioButtonDemoCtl.xaml
+
+
+ RichTextBoxDemoCtl.xaml
+
+
+ SliderDemoCtl.xaml
+
+
+ TextBlockDemoCtl.xaml
+
+
+ NaiveTextBoxDemoCtl.xaml
+
+
+ ToggleButtonDemoCtl.xaml
+
+
+ ToolBarDemoCtl.xaml
+
+
+ TreeViewDemoCtl.xaml
+
+
+
+
+
+
+
+
+
+
+
+ AboutWindow.xaml
+
+
+ BlurWindow.xaml
+
+
+ CommonWindow.xaml
+
+
+ CustomNonClientAreaWindow.xaml
+
+
+ NoNonClientAreaDragableWindow.xaml
+
+
+ MSBuild:Compile
+ Designer
+
+
+ App.xaml
+ Code
+
+
+ MainWindow.xaml
+ Code
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ MSBuild:Compile
+ Designer
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+
+
+ Code
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ TextTemplatingFileGenerator
+ MessageToken.cs
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PublicResXFileCodeGenerator
+ Lang.en.Designer.cs
+
+
+ PublicResXFileCodeGenerator
+ Lang.Designer.cs
+ Designer
+
+
+
+
+ {dc966e3d-bcff-4652-98cf-070e5494749a}
+ HandyControl_Net40
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Net40/HandyControlDemo_Net40/MainWindow.xaml b/Net40/HandyControlDemo_Net40/MainWindow.xaml
new file mode 100644
index 00000000..8688db0c
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/MainWindow.xaml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Net40/HandyControlDemo_Net40/MainWindow.xaml.cs b/Net40/HandyControlDemo_Net40/MainWindow.xaml.cs
new file mode 100644
index 00000000..1287253a
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/MainWindow.xaml.cs
@@ -0,0 +1,10 @@
+namespace HandyControlDemo
+{
+ public partial class MainWindow
+ {
+ public MainWindow()
+ {
+ InitializeComponent();
+ }
+ }
+}
\ No newline at end of file
diff --git a/Net40/HandyControlDemo_Net40/Properties/AssemblyInfo.cs b/Net40/HandyControlDemo_Net40/Properties/AssemblyInfo.cs
new file mode 100644
index 00000000..99a70f73
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/Properties/AssemblyInfo.cs
@@ -0,0 +1,15 @@
+using System.Reflection;
+using System.Runtime.InteropServices;
+using System.Windows;
+
+[assembly: AssemblyTitle("HandyControlDemo")]
+[assembly: AssemblyDescription("HandyControlDemo")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HandyControlDemo")]
+[assembly: AssemblyCopyright("Copyright © NaBian 2018-2019")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+[assembly: ComVisible(false)]
+[assembly: ThemeInfo(ResourceDictionaryLocation.None, ResourceDictionaryLocation.SourceAssembly)]
+[assembly: AssemblyVersion("1.5.2.*")]
diff --git a/Net40/HandyControlDemo_Net40/Properties/Langs/Lang.Designer.cs b/Net40/HandyControlDemo_Net40/Properties/Langs/Lang.Designer.cs
new file mode 100644
index 00000000..a19f2900
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/Properties/Langs/Lang.Designer.cs
@@ -0,0 +1,1134 @@
+//------------------------------------------------------------------------------
+//
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+//
+//------------------------------------------------------------------------------
+
+namespace HandyControlDemo.Properties.Langs {
+ using System;
+
+
+ ///
+ /// 一个强类型的资源类,用于查找本地化的字符串等。
+ ///
+ // 此类是由 StronglyTypedResourceBuilder
+ // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
+ // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
+ // (以 /str 作为命令选项),或重新生成 VS 项目。
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ public class Lang {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Lang() {
+ }
+
+ ///
+ /// 返回此类使用的缓存的 ResourceManager 实例。
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ public static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if (object.ReferenceEquals(resourceMan, null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("HandyControlDemo.Properties.Langs.Lang", typeof(Lang).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// 重写当前线程的 CurrentUICulture 属性
+ /// 重写当前线程的 CurrentUICulture 属性。
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ public static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+
+ ///
+ /// 查找类似 关于 的本地化字符串。
+ ///
+ public static string About {
+ get {
+ return ResourceManager.GetString("About", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 动画路径 的本地化字符串。
+ ///
+ public static string AnimationPath {
+ get {
+ return ResourceManager.GetString("AnimationPath", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 询问 的本地化字符串。
+ ///
+ public static string Ask {
+ get {
+ return ResourceManager.GetString("Ask", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 填写基本信息 的本地化字符串。
+ ///
+ public static string BasicInfo {
+ get {
+ return ResourceManager.GetString("BasicInfo", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 博客 的本地化字符串。
+ ///
+ public static string Blog {
+ get {
+ return ResourceManager.GetString("Blog", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 边框 的本地化字符串。
+ ///
+ public static string Border1 {
+ get {
+ return ResourceManager.GetString("Border1", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 画刷 的本地化字符串。
+ ///
+ public static string Brush {
+ get {
+ return ResourceManager.GetString("Brush", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 按钮 的本地化字符串。
+ ///
+ public static string Button {
+ get {
+ return ResourceManager.GetString("Button", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 透明按钮 的本地化字符串。
+ ///
+ public static string ButtonOpacity {
+ get {
+ return ResourceManager.GetString("ButtonOpacity", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 日历 的本地化字符串。
+ ///
+ public static string Calendar {
+ get {
+ return ResourceManager.GetString("Calendar", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 带时钟的日历 的本地化字符串。
+ ///
+ public static string CalendarWithClock {
+ get {
+ return ResourceManager.GetString("CalendarWithClock", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 轮播 的本地化字符串。
+ ///
+ public static string Carousel {
+ get {
+ return ResourceManager.GetString("Carousel", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 是否重启以更改语言? 的本地化字符串。
+ ///
+ public static string ChangeLangAsk {
+ get {
+ return ResourceManager.GetString("ChangeLangAsk", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 讨论室 的本地化字符串。
+ ///
+ public static string Chatroom {
+ get {
+ return ResourceManager.GetString("Chatroom", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 复选框 的本地化字符串。
+ ///
+ public static string CheckBox {
+ get {
+ return ResourceManager.GetString("CheckBox", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 圆形布局 的本地化字符串。
+ ///
+ public static string CirclePanel {
+ get {
+ return ResourceManager.GetString("CirclePanel", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 圆形进度条 的本地化字符串。
+ ///
+ public static string CircleProgressBar {
+ get {
+ return ResourceManager.GetString("CircleProgressBar", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 清空 的本地化字符串。
+ ///
+ public static string Clear {
+ get {
+ return ResourceManager.GetString("Clear", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 时钟 的本地化字符串。
+ ///
+ public static string Clock {
+ get {
+ return ResourceManager.GetString("Clock", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 颜色拾取器 的本地化字符串。
+ ///
+ public static string ColorPicker {
+ get {
+ return ResourceManager.GetString("ColorPicker", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 组合框 的本地化字符串。
+ ///
+ public static string ComboBox {
+ get {
+ return ResourceManager.GetString("ComboBox", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 一般 的本地化字符串。
+ ///
+ public static string Common {
+ get {
+ return ResourceManager.GetString("Common", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 对比滑块 的本地化字符串。
+ ///
+ public static string CompareSlider {
+ get {
+ return ResourceManager.GetString("CompareSlider", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 完成 的本地化字符串。
+ ///
+ public static string Complete {
+ get {
+ return ResourceManager.GetString("Complete", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 这是内容 的本地化字符串。
+ ///
+ public static string ContentDemoStr {
+ get {
+ return ResourceManager.GetString("ContentDemoStr", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 贡献者 的本地化字符串。
+ ///
+ public static string Contributors {
+ get {
+ return ResourceManager.GetString("Contributors", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 控件 的本地化字符串。
+ ///
+ public static string Controls {
+ get {
+ return ResourceManager.GetString("Controls", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 封面流 的本地化字符串。
+ ///
+ public static string CoverFlow {
+ get {
+ return ResourceManager.GetString("CoverFlow", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 封面视图 的本地化字符串。
+ ///
+ public static string CoverView {
+ get {
+ return ResourceManager.GetString("CoverView", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 危险 的本地化字符串。
+ ///
+ public static string Danger {
+ get {
+ return ResourceManager.GetString("Danger", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 数据表格 的本地化字符串。
+ ///
+ public static string DataGrid {
+ get {
+ return ResourceManager.GetString("DataGrid", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 日期选择器 的本地化字符串。
+ ///
+ public static string DatePicker {
+ get {
+ return ResourceManager.GetString("DatePicker", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 日期时间选择器 的本地化字符串。
+ ///
+ public static string DateTimePicker {
+ get {
+ return ResourceManager.GetString("DateTimePicker", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 默认 的本地化字符串。
+ ///
+ public static string Default {
+ get {
+ return ResourceManager.GetString("Default", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 在这里拖拽 的本地化字符串。
+ ///
+ public static string DragHere {
+ get {
+ return ResourceManager.GetString("DragHere", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 邮箱 的本地化字符串。
+ ///
+ public static string Email {
+ get {
+ return ResourceManager.GetString("Email", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 错误 的本地化字符串。
+ ///
+ public static string Error {
+ get {
+ return ResourceManager.GetString("Error", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 展开框 的本地化字符串。
+ ///
+ public static string Expander {
+ get {
+ return ResourceManager.GetString("Expander", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 严重 的本地化字符串。
+ ///
+ public static string Fatal {
+ get {
+ return ResourceManager.GetString("Fatal", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 翻页时钟 的本地化字符串。
+ ///
+ public static string FlipClock {
+ get {
+ return ResourceManager.GetString("FlipClock", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 Gif图片 的本地化字符串。
+ ///
+ public static string GifImage {
+ get {
+ return ResourceManager.GetString("GifImage", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 分组框 的本地化字符串。
+ ///
+ public static string GroupBox {
+ get {
+ return ResourceManager.GetString("GroupBox", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 组数 的本地化字符串。
+ ///
+ public static string Groups {
+ get {
+ return ResourceManager.GetString("Groups", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 信息通知 的本地化字符串。
+ ///
+ public static string Growl {
+ get {
+ return ResourceManager.GetString("Growl", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 检测到有新版本!是否更新? 的本地化字符串。
+ ///
+ public static string GrowlAsk {
+ get {
+ return ResourceManager.GetString("GrowlAsk", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 连接失败,请检查网络! 的本地化字符串。
+ ///
+ public static string GrowlError {
+ get {
+ return ResourceManager.GetString("GrowlError", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 程序已崩溃~~~ 的本地化字符串。
+ ///
+ public static string GrowlFatal {
+ get {
+ return ResourceManager.GetString("GrowlFatal", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 今天的天气不错~~~ 的本地化字符串。
+ ///
+ public static string GrowlInfo {
+ get {
+ return ResourceManager.GetString("GrowlInfo", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 文件保存成功! 的本地化字符串。
+ ///
+ public static string GrowlSuccess {
+ get {
+ return ResourceManager.GetString("GrowlSuccess", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 磁盘空间快要满了! 的本地化字符串。
+ ///
+ public static string GrowlWarning {
+ get {
+ return ResourceManager.GetString("GrowlWarning", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 忽略 的本地化字符串。
+ ///
+ public static string Ignore {
+ get {
+ return ResourceManager.GetString("Ignore", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 图片浏览器 的本地化字符串。
+ ///
+ public static string ImageBrowser {
+ get {
+ return ResourceManager.GetString("ImageBrowser", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 索引 的本地化字符串。
+ ///
+ public static string Index {
+ get {
+ return ResourceManager.GetString("Index", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 信息 的本地化字符串。
+ ///
+ public static string Info {
+ get {
+ return ResourceManager.GetString("Info", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 不是手机号码 的本地化字符串。
+ ///
+ public static string IsNotPhone {
+ get {
+ return ResourceManager.GetString("IsNotPhone", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 列表框 的本地化字符串。
+ ///
+ public static string ListBox {
+ get {
+ return ResourceManager.GetString("ListBox", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 列表视图 的本地化字符串。
+ ///
+ public static string ListView {
+ get {
+ return ResourceManager.GetString("ListView", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 加载条 的本地化字符串。
+ ///
+ public static string Loading {
+ get {
+ return ResourceManager.GetString("Loading", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 菜单 的本地化字符串。
+ ///
+ public static string Menu {
+ get {
+ return ResourceManager.GetString("Menu", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 消息框 的本地化字符串。
+ ///
+ public static string MessageBox {
+ get {
+ return ResourceManager.GetString("MessageBox", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 名称 的本地化字符串。
+ ///
+ public static string Name {
+ get {
+ return ResourceManager.GetString("Name", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 下一步 的本地化字符串。
+ ///
+ public static string Next {
+ get {
+ return ResourceManager.GetString("Next", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 数值选择控件 的本地化字符串。
+ ///
+ public static string NumericUpDown {
+ get {
+ return ResourceManager.GetString("NumericUpDown", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 点击打开背景模糊窗口 的本地化字符串。
+ ///
+ public static string OpenBlurWindow {
+ get {
+ return ResourceManager.GetString("OpenBlurWindow", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 点击打开常规窗口 的本地化字符串。
+ ///
+ public static string OpenCommonWindow {
+ get {
+ return ResourceManager.GetString("OpenCommonWindow", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 点击打开自定义内容窗口 的本地化字符串。
+ ///
+ public static string OpenCustomContentWindow {
+ get {
+ return ResourceManager.GetString("OpenCustomContentWindow", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 点击打开自定义非客户端区域窗口 的本地化字符串。
+ ///
+ public static string OpenCustomNonClientAreaWindow {
+ get {
+ return ResourceManager.GetString("OpenCustomNonClientAreaWindow", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 点击打开图片浏览器 的本地化字符串。
+ ///
+ public static string OpenImageBrowser {
+ get {
+ return ResourceManager.GetString("OpenImageBrowser", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 点击打开消息窗口 的本地化字符串。
+ ///
+ public static string OpenMessageWindow {
+ get {
+ return ResourceManager.GetString("OpenMessageWindow", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 点击打开鼠标跟随窗口 的本地化字符串。
+ ///
+ public static string OpenMouseFollowWindow {
+ get {
+ return ResourceManager.GetString("OpenMouseFollowWindow", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 打开无非客户端区域可拖拽窗口 的本地化字符串。
+ ///
+ public static string OpenNoNonClientAreaDragableWindow {
+ get {
+ return ResourceManager.GetString("OpenNoNonClientAreaDragableWindow", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 轮廓文本 的本地化字符串。
+ ///
+ public static string OutlineText {
+ get {
+ return ResourceManager.GetString("OutlineText", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 页码条 的本地化字符串。
+ ///
+ public static string Pagination {
+ get {
+ return ResourceManager.GetString("Pagination", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 密码框 的本地化字符串。
+ ///
+ public static string PasswordBox {
+ get {
+ return ResourceManager.GetString("PasswordBox", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 请输入内容 的本地化字符串。
+ ///
+ public static string PlsEnterContent {
+ get {
+ return ResourceManager.GetString("PlsEnterContent", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 请输入邮箱 的本地化字符串。
+ ///
+ public static string PlsEnterEmail {
+ get {
+ return ResourceManager.GetString("PlsEnterEmail", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 请输入关键字 的本地化字符串。
+ ///
+ public static string PlsEnterKey {
+ get {
+ return ResourceManager.GetString("PlsEnterKey", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 上一步 的本地化字符串。
+ ///
+ public static string Prev {
+ get {
+ return ResourceManager.GetString("Prev", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 预览滑块 的本地化字符串。
+ ///
+ public static string PreviewSlider {
+ get {
+ return ResourceManager.GetString("PreviewSlider", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 主要 的本地化字符串。
+ ///
+ public static string Primary {
+ get {
+ return ResourceManager.GetString("Primary", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 进度条 的本地化字符串。
+ ///
+ public static string ProgressBar {
+ get {
+ return ResourceManager.GetString("ProgressBar", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 QQ群 的本地化字符串。
+ ///
+ public static string QQGroup {
+ get {
+ return ResourceManager.GetString("QQGroup", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 单选按钮 的本地化字符串。
+ ///
+ public static string RadioButton {
+ get {
+ return ResourceManager.GetString("RadioButton", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 评分 的本地化字符串。
+ ///
+ public static string Rate {
+ get {
+ return ResourceManager.GetString("Rate", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 注册 的本地化字符串。
+ ///
+ public static string Register {
+ get {
+ return ResourceManager.GetString("Register", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 备注 的本地化字符串。
+ ///
+ public static string Remark {
+ get {
+ return ResourceManager.GetString("Remark", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 代码仓库 的本地化字符串。
+ ///
+ public static string Repository {
+ get {
+ return ResourceManager.GetString("Repository", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 富文本框 的本地化字符串。
+ ///
+ public static string RichTextBox {
+ get {
+ return ResourceManager.GetString("RichTextBox", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 在这里右击 的本地化字符串。
+ ///
+ public static string RightClickHere {
+ get {
+ return ResourceManager.GetString("RightClickHere", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 滚动视图 的本地化字符串。
+ ///
+ public static string ScrollViewer {
+ get {
+ return ResourceManager.GetString("ScrollViewer", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 搜索栏 的本地化字符串。
+ ///
+ public static string SearchBar {
+ get {
+ return ResourceManager.GetString("SearchBar", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 选中 的本地化字符串。
+ ///
+ public static string Selected {
+ get {
+ return ResourceManager.GetString("Selected", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 徽章 的本地化字符串。
+ ///
+ public static string Shield {
+ get {
+ return ResourceManager.GetString("Shield", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 显示行号 的本地化字符串。
+ ///
+ public static string ShowRowNumber {
+ get {
+ return ResourceManager.GetString("ShowRowNumber", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 滑块 的本地化字符串。
+ ///
+ public static string Slider {
+ get {
+ return ResourceManager.GetString("Slider", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 步骤 的本地化字符串。
+ ///
+ public static string Step {
+ get {
+ return ResourceManager.GetString("Step", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 步骤条 的本地化字符串。
+ ///
+ public static string StepBar {
+ get {
+ return ResourceManager.GetString("StepBar", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 样式模板 的本地化字符串。
+ ///
+ public static string Styles {
+ get {
+ return ResourceManager.GetString("Styles", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 子标题 的本地化字符串。
+ ///
+ public static string SubTitle {
+ get {
+ return ResourceManager.GetString("SubTitle", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 成功 的本地化字符串。
+ ///
+ public static string Success {
+ get {
+ return ResourceManager.GetString("Success", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 选项卡控件 的本地化字符串。
+ ///
+ public static string TabControl {
+ get {
+ return ResourceManager.GetString("TabControl", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 标签 的本地化字符串。
+ ///
+ public static string Tag {
+ get {
+ return ResourceManager.GetString("Tag", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 正文 的本地化字符串。
+ ///
+ public static string Text {
+ get {
+ return ResourceManager.GetString("Text", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 文本块 的本地化字符串。
+ ///
+ public static string TextBlock {
+ get {
+ return ResourceManager.GetString("TextBlock", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 文本框 的本地化字符串。
+ ///
+ public static string TextBox {
+ get {
+ return ResourceManager.GetString("TextBox", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 时间条 的本地化字符串。
+ ///
+ public static string TimeBar {
+ get {
+ return ResourceManager.GetString("TimeBar", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 时间选择器 的本地化字符串。
+ ///
+ public static string TimePicker {
+ get {
+ return ResourceManager.GetString("TimePicker", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 标题 的本地化字符串。
+ ///
+ public static string Title {
+ get {
+ return ResourceManager.GetString("Title", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 这是标题 的本地化字符串。
+ ///
+ public static string TitleDemoStr1 {
+ get {
+ return ResourceManager.GetString("TitleDemoStr1", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 此项必填 的本地化字符串。
+ ///
+ public static string TitleDemoStr2 {
+ get {
+ return ResourceManager.GetString("TitleDemoStr2", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 标题在左侧 的本地化字符串。
+ ///
+ public static string TitleDemoStr3 {
+ get {
+ return ResourceManager.GetString("TitleDemoStr3", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 切换按钮 的本地化字符串。
+ ///
+ public static string ToggleButton {
+ get {
+ return ResourceManager.GetString("ToggleButton", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 工具条 的本地化字符串。
+ ///
+ public static string ToolBar {
+ get {
+ return ResourceManager.GetString("ToolBar", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 树视图 的本地化字符串。
+ ///
+ public static string TreeView {
+ get {
+ return ResourceManager.GetString("TreeView", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 类型 的本地化字符串。
+ ///
+ public static string Type {
+ get {
+ return ResourceManager.GetString("Type", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 上传文件 的本地化字符串。
+ ///
+ public static string UploadFile {
+ get {
+ return ResourceManager.GetString("UploadFile", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 警告 的本地化字符串。
+ ///
+ public static string Warning {
+ get {
+ return ResourceManager.GetString("Warning", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 瀑布流 的本地化字符串。
+ ///
+ public static string WaterfallPanel {
+ get {
+ return ResourceManager.GetString("WaterfallPanel", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 窗口 的本地化字符串。
+ ///
+ public static string Window {
+ get {
+ return ResourceManager.GetString("Window", resourceCulture);
+ }
+ }
+ }
+}
diff --git a/Net40/HandyControlDemo_Net40/Properties/Langs/Lang.en.Designer.cs b/Net40/HandyControlDemo_Net40/Properties/Langs/Lang.en.Designer.cs
new file mode 100644
index 00000000..e69de29b
diff --git a/Net40/HandyControlDemo_Net40/Properties/Langs/Lang.en.resx b/Net40/HandyControlDemo_Net40/Properties/Langs/Lang.en.resx
new file mode 100644
index 00000000..3db23d8b
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/Properties/Langs/Lang.en.resx
@@ -0,0 +1,477 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Controls
+
+
+ Styles
+
+
+ Growl
+
+
+ It's a nice day today~~~
+
+
+ File saved successfully!
+
+
+ Disk space is running out!
+
+
+ Connection failed. please check your network!
+
+
+ The program has crashed~~~
+
+
+ A new version has been detected!Do you want to update?
+
+
+ Loading
+
+
+ ImageBrowser
+
+
+ ColorPicker
+
+
+ Carousel
+
+
+ CompareSlider
+
+
+ TimeBar
+
+
+ Expander
+
+
+ Pagination
+
+
+ Click to open image browser
+
+
+ ProgressBar
+
+
+ AnimationPath
+
+
+ Button
+
+
+ ToggleButton
+
+
+ TabControl
+
+
+ CheckBox
+
+
+ TextBlock
+
+
+ Default
+
+
+ Primary
+
+
+ Success
+
+
+ Info
+
+
+ Warning
+
+
+ Danger
+
+
+ Opacity button
+
+
+ Title
+
+
+ StepBar
+
+
+ Prev
+
+
+ Next
+
+
+ Register
+
+
+ Fill in the basic information
+
+
+ Upload file
+
+
+ Complete
+
+
+ Clock
+
+
+ Calendar
+
+
+ DatePicker
+
+
+ TimePicker
+
+
+ TextBox
+
+
+ This is the content
+
+
+ This is the title
+
+
+ This item must be filled in
+
+
+ Please enter content
+
+
+ The title is on the left
+
+
+ Text
+
+
+ Subtitle
+
+
+ PasswordBox
+
+
+ CirclePanel
+
+
+ ComboBox
+
+
+ NumericUpDown
+
+
+ DataGrid
+
+
+ Index
+
+
+ Name
+
+
+ Type
+
+
+ Remark
+
+
+ Selected
+
+
+ ListBox
+
+
+ TreeView
+
+
+ Border
+
+
+ ScrollViewer
+
+
+ Window
+
+
+ Menu
+
+
+ Right click here
+
+
+ RadioButton
+
+
+ open message window
+
+
+ open common window
+
+
+ open custom Non-client Area window
+
+
+ open mouse follow window
+
+
+ open custom content window
+
+
+ Ignore
+
+
+ Error
+
+
+ Ask
+
+
+ Fatal
+
+
+ Clear
+
+
+ Whether to restart to change the language?
+
+
+ About
+
+
+ Repository
+
+
+ Email
+
+
+ Chatroom
+
+
+ Blog
+
+
+ Brush
+
+
+ PreviewSlider
+
+
+ Contributors
+
+
+ Slider
+
+
+ CircleProgressBar
+
+
+ It's not a phone number
+
+
+ please enter email
+
+
+ Step
+
+
+ CalendarWithClock
+
+
+ DateTimePicker
+
+
+ GroupBox
+
+
+ ListView
+
+
+ RichTextBox
+
+
+ ToolBar
+
+
+ Common
+
+
+ ShowRowNumber
+
+
+ SearchBar
+
+
+ Tag
+
+
+ GifImage
+
+
+ OutlineText
+
+
+ QQ Group
+
+
+ FlipClock
+
+
+ open blur window
+
+
+ Rate
+
+
+ Shield
+
+
+ WaterfallPanel
+
+
+ Groups
+
+
+ CoverView
+
+
+ CoverFlow
+
+
+ Please input a keyword
+
+
+ open no Non-client Area dragable window
+
+
+ Drag here
+
+
+ MessageBox
+
+
diff --git a/Net40/HandyControlDemo_Net40/Properties/Langs/Lang.resx b/Net40/HandyControlDemo_Net40/Properties/Langs/Lang.resx
new file mode 100644
index 00000000..37ee53dc
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/Properties/Langs/Lang.resx
@@ -0,0 +1,477 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 控件
+
+
+ 样式模板
+
+
+ 信息通知
+
+
+ 今天的天气不错~~~
+
+
+ 文件保存成功!
+
+
+ 磁盘空间快要满了!
+
+
+ 连接失败,请检查网络!
+
+
+ 程序已崩溃~~~
+
+
+ 检测到有新版本!是否更新?
+
+
+ 加载条
+
+
+ 图片浏览器
+
+
+ 颜色拾取器
+
+
+ 轮播
+
+
+ 对比滑块
+
+
+ 时间条
+
+
+ 展开框
+
+
+ 页码条
+
+
+ 点击打开图片浏览器
+
+
+ 进度条
+
+
+ 动画路径
+
+
+ 按钮
+
+
+ 切换按钮
+
+
+ 选项卡控件
+
+
+ 复选框
+
+
+ 文本块
+
+
+ 默认
+
+
+ 主要
+
+
+ 成功
+
+
+ 信息
+
+
+ 警告
+
+
+ 危险
+
+
+ 透明按钮
+
+
+ 标题
+
+
+ 步骤条
+
+
+ 上一步
+
+
+ 下一步
+
+
+ 注册
+
+
+ 填写基本信息
+
+
+ 上传文件
+
+
+ 完成
+
+
+ 时钟
+
+
+ 日历
+
+
+ 日期选择器
+
+
+ 时间选择器
+
+
+ 文本框
+
+
+ 这是内容
+
+
+ 这是标题
+
+
+ 此项必填
+
+
+ 请输入内容
+
+
+ 标题在左侧
+
+
+ 正文
+
+
+ 子标题
+
+
+ 密码框
+
+
+ 圆形布局
+
+
+ 组合框
+
+
+ 数值选择控件
+
+
+ 数据表格
+
+
+ 索引
+
+
+ 名称
+
+
+ 类型
+
+
+ 备注
+
+
+ 选中
+
+
+ 列表框
+
+
+ 树视图
+
+
+ 边框
+
+
+ 滚动视图
+
+
+ 窗口
+
+
+ 菜单
+
+
+ 在这里右击
+
+
+ 单选按钮
+
+
+ 点击打开消息窗口
+
+
+ 点击打开常规窗口
+
+
+ 点击打开自定义非客户端区域窗口
+
+
+ 点击打开鼠标跟随窗口
+
+
+ 点击打开自定义内容窗口
+
+
+ 忽略
+
+
+ 错误
+
+
+ 询问
+
+
+ 严重
+
+
+ 清空
+
+
+ 是否重启以更改语言?
+
+
+ 关于
+
+
+ 代码仓库
+
+
+ 邮箱
+
+
+ 讨论室
+
+
+ 博客
+
+
+ 画刷
+
+
+ 预览滑块
+
+
+ 贡献者
+
+
+ 滑块
+
+
+ 圆形进度条
+
+
+ 不是手机号码
+
+
+ 请输入邮箱
+
+
+ 步骤
+
+
+ 带时钟的日历
+
+
+ 日期时间选择器
+
+
+ 分组框
+
+
+ 列表视图
+
+
+ 富文本框
+
+
+ 工具条
+
+
+ 一般
+
+
+ 显示行号
+
+
+ 搜索栏
+
+
+ 标签
+
+
+ Gif图片
+
+
+ 轮廓文本
+
+
+ QQ群
+
+
+ 翻页时钟
+
+
+ 点击打开背景模糊窗口
+
+
+ 评分
+
+
+ 徽章
+
+
+ 瀑布流
+
+
+ 组数
+
+
+ 封面视图
+
+
+ 封面流
+
+
+ 请输入关键字
+
+
+ 打开无非客户端区域可拖拽窗口
+
+
+ 在这里拖拽
+
+
+ 消息框
+
+
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/1.jpg b/Net40/HandyControlDemo_Net40/Resources/Img/1.jpg
new file mode 100644
index 00000000..99de4db2
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/1.jpg differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/2.jpg b/Net40/HandyControlDemo_Net40/Resources/Img/2.jpg
new file mode 100644
index 00000000..8ed37abf
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/2.jpg differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/3.jpg b/Net40/HandyControlDemo_Net40/Resources/Img/3.jpg
new file mode 100644
index 00000000..2ca0aa4a
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/3.jpg differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/4.jpg b/Net40/HandyControlDemo_Net40/Resources/Img/4.jpg
new file mode 100644
index 00000000..0c219afe
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/4.jpg differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/5.jpg b/Net40/HandyControlDemo_Net40/Resources/Img/5.jpg
new file mode 100644
index 00000000..1b633ff8
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/5.jpg differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/Album/1.jpg b/Net40/HandyControlDemo_Net40/Resources/Img/Album/1.jpg
new file mode 100644
index 00000000..d2130c4b
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/Album/1.jpg differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/Album/10.jpg b/Net40/HandyControlDemo_Net40/Resources/Img/Album/10.jpg
new file mode 100644
index 00000000..198ed9ae
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/Album/10.jpg differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/Album/2.jpg b/Net40/HandyControlDemo_Net40/Resources/Img/Album/2.jpg
new file mode 100644
index 00000000..aac4ecda
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/Album/2.jpg differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/Album/3.jpg b/Net40/HandyControlDemo_Net40/Resources/Img/Album/3.jpg
new file mode 100644
index 00000000..535b7255
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/Album/3.jpg differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/Album/4.jpg b/Net40/HandyControlDemo_Net40/Resources/Img/Album/4.jpg
new file mode 100644
index 00000000..575fa6dd
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/Album/4.jpg differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/Album/5.jpg b/Net40/HandyControlDemo_Net40/Resources/Img/Album/5.jpg
new file mode 100644
index 00000000..fc2960ef
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/Album/5.jpg differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/Album/6.jpg b/Net40/HandyControlDemo_Net40/Resources/Img/Album/6.jpg
new file mode 100644
index 00000000..0435b4fe
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/Album/6.jpg differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/Album/7.jpg b/Net40/HandyControlDemo_Net40/Resources/Img/Album/7.jpg
new file mode 100644
index 00000000..bbfa016d
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/Album/7.jpg differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/Album/8.jpg b/Net40/HandyControlDemo_Net40/Resources/Img/Album/8.jpg
new file mode 100644
index 00000000..bea683db
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/Album/8.jpg differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/Album/9.jpg b/Net40/HandyControlDemo_Net40/Resources/Img/Album/9.jpg
new file mode 100644
index 00000000..64dbad18
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/Album/9.jpg differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/Avatar/avatar1.png b/Net40/HandyControlDemo_Net40/Resources/Img/Avatar/avatar1.png
new file mode 100644
index 00000000..444207f7
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/Avatar/avatar1.png differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/Avatar/avatar2.png b/Net40/HandyControlDemo_Net40/Resources/Img/Avatar/avatar2.png
new file mode 100644
index 00000000..69f3002d
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/Avatar/avatar2.png differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/Avatar/avatar3.png b/Net40/HandyControlDemo_Net40/Resources/Img/Avatar/avatar3.png
new file mode 100644
index 00000000..8fbe9fc2
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/Avatar/avatar3.png differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/Avatar/avatar4.png b/Net40/HandyControlDemo_Net40/Resources/Img/Avatar/avatar4.png
new file mode 100644
index 00000000..aae79101
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/Avatar/avatar4.png differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/Avatar/avatar5.png b/Net40/HandyControlDemo_Net40/Resources/Img/Avatar/avatar5.png
new file mode 100644
index 00000000..1ed49ed7
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/Avatar/avatar5.png differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/Avatar/avatar6.png b/Net40/HandyControlDemo_Net40/Resources/Img/Avatar/avatar6.png
new file mode 100644
index 00000000..d0c9f90e
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/Avatar/avatar6.png differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/Flag/cn.png b/Net40/HandyControlDemo_Net40/Resources/Img/Flag/cn.png
new file mode 100644
index 00000000..63267f70
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/Flag/cn.png differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/Flag/en.png b/Net40/HandyControlDemo_Net40/Resources/Img/Flag/en.png
new file mode 100644
index 00000000..18425bc6
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/Flag/en.png differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/Animation_16x.png b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/Animation_16x.png
new file mode 100644
index 00000000..e4b21749
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/Animation_16x.png differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/BorderElement_16x.png b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/BorderElement_16x.png
new file mode 100644
index 00000000..d1d7331a
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/BorderElement_16x.png differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/Brush_16x.png b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/Brush_16x.png
new file mode 100644
index 00000000..5da71961
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/Brush_16x.png differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/ButtonClick_16x.png b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/ButtonClick_16x.png
new file mode 100644
index 00000000..b2e0d5cd
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/ButtonClick_16x.png differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/Calendar_16x.png b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/Calendar_16x.png
new file mode 100644
index 00000000..a2dbfeaa
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/Calendar_16x.png differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/Carousel_16x.png b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/Carousel_16x.png
new file mode 100644
index 00000000..670eab97
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/Carousel_16x.png differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/CheckBox_16x.png b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/CheckBox_16x.png
new file mode 100644
index 00000000..06044dac
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/CheckBox_16x.png differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/ColorPalette_16x.png b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/ColorPalette_16x.png
new file mode 100644
index 00000000..7ca52621
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/ColorPalette_16x.png differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/ColorWheel_16x.png b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/ColorWheel_16x.png
new file mode 100644
index 00000000..d438bd04
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/ColorWheel_16x.png differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/ComboBox_16x.png b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/ComboBox_16x.png
new file mode 100644
index 00000000..24eb2a84
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/ComboBox_16x.png differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/ContextMenu_16x.png b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/ContextMenu_16x.png
new file mode 100644
index 00000000..18fad3e0
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/ContextMenu_16x.png differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/DataGrid_16x.png b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/DataGrid_16x.png
new file mode 100644
index 00000000..49071e13
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/DataGrid_16x.png differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/DatePicker_16x.png b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/DatePicker_16x.png
new file mode 100644
index 00000000..53418b70
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/DatePicker_16x.png differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/DetailDataView_16x.png b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/DetailDataView_16x.png
new file mode 100644
index 00000000..64f2bcd0
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/DetailDataView_16x.png differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/Expander_16x.png b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/Expander_16x.png
new file mode 100644
index 00000000..da4dead8
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/Expander_16x.png differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/FlipVertical_16x.png b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/FlipVertical_16x.png
new file mode 100644
index 00000000..07c890cd
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/FlipVertical_16x.png differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/Flow_16x.png b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/Flow_16x.png
new file mode 100644
index 00000000..08c388d6
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/Flow_16x.png differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/GroupBox_16x.png b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/GroupBox_16x.png
new file mode 100644
index 00000000..fe5d1ce5
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/GroupBox_16x.png differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/HoverMenu_16x.png b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/HoverMenu_16x.png
new file mode 100644
index 00000000..4b2c276e
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/HoverMenu_16x.png differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/ImageBrowser_16x.png b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/ImageBrowser_16x.png
new file mode 100644
index 00000000..5a3088ff
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/ImageBrowser_16x.png differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/LinearCarousel_16x.png b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/LinearCarousel_16x.png
new file mode 100644
index 00000000..c52a21c2
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/LinearCarousel_16x.png differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/ListBox_16x.png b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/ListBox_16x.png
new file mode 100644
index 00000000..4bde75e3
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/ListBox_16x.png differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/ListView_16x.png b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/ListView_16x.png
new file mode 100644
index 00000000..acb4e747
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/ListView_16x.png differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/Loading_Blue_16x.png b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/Loading_Blue_16x.png
new file mode 100644
index 00000000..6f48361f
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/Loading_Blue_16x.png differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/Message_16x.png b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/Message_16x.png
new file mode 100644
index 00000000..7d06b199
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/Message_16x.png differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/NumericListBox_16x.png b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/NumericListBox_16x.png
new file mode 100644
index 00000000..455b6a23
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/NumericListBox_16x.png differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/Paginator_16x.png b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/Paginator_16x.png
new file mode 100644
index 00000000..88a22536
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/Paginator_16x.png differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/Panel_16x.png b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/Panel_16x.png
new file mode 100644
index 00000000..5c87bed2
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/Panel_16x.png differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/PasswordBox_16x.png b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/PasswordBox_16x.png
new file mode 100644
index 00000000..8f1bc5ed
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/PasswordBox_16x.png differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/Path_16x.png b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/Path_16x.png
new file mode 100644
index 00000000..bf46dd2f
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/Path_16x.png differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/ProgressBar_16x.png b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/ProgressBar_16x.png
new file mode 100644
index 00000000..d3e89853
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/ProgressBar_16x.png differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/RadioButton_16x.png b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/RadioButton_16x.png
new file mode 100644
index 00000000..6f118079
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/RadioButton_16x.png differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/RichTextBox_16x.png b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/RichTextBox_16x.png
new file mode 100644
index 00000000..c8770340
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/RichTextBox_16x.png differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/ScrollBox_16x.png b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/ScrollBox_16x.png
new file mode 100644
index 00000000..0ba07632
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/ScrollBox_16x.png differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/Search_16x.png b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/Search_16x.png
new file mode 100644
index 00000000..042a1c42
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/Search_16x.png differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/ShapeArcRing_16x.png b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/ShapeArcRing_16x.png
new file mode 100644
index 00000000..64f52301
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/ShapeArcRing_16x.png differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/Shield_16x.png b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/Shield_16x.png
new file mode 100644
index 00000000..9b30ef16
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/Shield_16x.png differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/Slider_16x.png b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/Slider_16x.png
new file mode 100644
index 00000000..268fe222
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/Slider_16x.png differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/SortAscending_grey_16x.png b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/SortAscending_grey_16x.png
new file mode 100644
index 00000000..150a8703
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/SortAscending_grey_16x.png differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/SplitterControl_16x.png b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/SplitterControl_16x.png
new file mode 100644
index 00000000..a059b084
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/SplitterControl_16x.png differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/Star.png b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/Star.png
new file mode 100644
index 00000000..da69341b
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/Star.png differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/TabPage_16x.png b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/TabPage_16x.png
new file mode 100644
index 00000000..2bcb7fce
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/TabPage_16x.png differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/Tag_16x.png b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/Tag_16x.png
new file mode 100644
index 00000000..08110ef5
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/Tag_16x.png differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/TextBlock_16x.png b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/TextBlock_16x.png
new file mode 100644
index 00000000..768924b9
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/TextBlock_16x.png differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/TextBox_16x.png b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/TextBox_16x.png
new file mode 100644
index 00000000..503a808b
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/TextBox_16x.png differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/TimePicker_16x.png b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/TimePicker_16x.png
new file mode 100644
index 00000000..244c6fdd
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/TimePicker_16x.png differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/Time_color_16x.png b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/Time_color_16x.png
new file mode 100644
index 00000000..42f08e1c
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/Time_color_16x.png differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/Timeline_16x.png b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/Timeline_16x.png
new file mode 100644
index 00000000..793d5011
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/Timeline_16x.png differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/Toggle_16x.png b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/Toggle_16x.png
new file mode 100644
index 00000000..70f202dc
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/Toggle_16x.png differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/ToolBar_16x.png b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/ToolBar_16x.png
new file mode 100644
index 00000000..bb4d2459
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/ToolBar_16x.png differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/TreeView_16x.png b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/TreeView_16x.png
new file mode 100644
index 00000000..e944d293
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/TreeView_16x.png differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/WindowsForm_16x.png b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/WindowsForm_16x.png
new file mode 100644
index 00000000..764adcb2
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/LeftMainContent/WindowsForm_16x.png differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/b1.jpg b/Net40/HandyControlDemo_Net40/Resources/Img/b1.jpg
new file mode 100644
index 00000000..5675b30d
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/b1.jpg differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/b2.jpg b/Net40/HandyControlDemo_Net40/Resources/Img/b2.jpg
new file mode 100644
index 00000000..a221a30d
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/b2.jpg differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/car_chase.gif b/Net40/HandyControlDemo_Net40/Resources/Img/car_chase.gif
new file mode 100644
index 00000000..ff9290f2
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/car_chase.gif differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/icon-white.png b/Net40/HandyControlDemo_Net40/Resources/Img/icon-white.png
new file mode 100644
index 00000000..d0bb4776
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/icon-white.png differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/icon.ico b/Net40/HandyControlDemo_Net40/Resources/Img/icon.ico
new file mode 100644
index 00000000..719edf88
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/icon.ico differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Img/qq-group.jpg b/Net40/HandyControlDemo_Net40/Resources/Img/qq-group.jpg
new file mode 100644
index 00000000..ad37b866
Binary files /dev/null and b/Net40/HandyControlDemo_Net40/Resources/Img/qq-group.jpg differ
diff --git a/Net40/HandyControlDemo_Net40/Resources/Themes/Basic/Basic.xaml b/Net40/HandyControlDemo_Net40/Resources/Themes/Basic/Basic.xaml
new file mode 100644
index 00000000..6b2fbe74
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/Resources/Themes/Basic/Basic.xaml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Net40/HandyControlDemo_Net40/Resources/Themes/Basic/Brushes.xaml b/Net40/HandyControlDemo_Net40/Resources/Themes/Basic/Brushes.xaml
new file mode 100644
index 00000000..23505a2b
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/Resources/Themes/Basic/Brushes.xaml
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Net40/HandyControlDemo_Net40/Resources/Themes/Basic/Colors/Colors.xaml b/Net40/HandyControlDemo_Net40/Resources/Themes/Basic/Colors/Colors.xaml
new file mode 100644
index 00000000..d6b46dbc
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/Resources/Themes/Basic/Colors/Colors.xaml
@@ -0,0 +1,8 @@
+
+
+ #262e2f
+ #FFF0F0F0
+ #FFF5F5F5
+
+
\ No newline at end of file
diff --git a/Net40/HandyControlDemo_Net40/Resources/Themes/Basic/Colors/ColorsDark.xaml b/Net40/HandyControlDemo_Net40/Resources/Themes/Basic/Colors/ColorsDark.xaml
new file mode 100644
index 00000000..512e444d
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/Resources/Themes/Basic/Colors/ColorsDark.xaml
@@ -0,0 +1,8 @@
+
+
+ #262e2f
+ #FF1A1A1A
+ #FF1C1C1C
+
+
\ No newline at end of file
diff --git a/Net40/HandyControlDemo_Net40/Resources/Themes/Basic/Converters.xaml b/Net40/HandyControlDemo_Net40/Resources/Themes/Basic/Converters.xaml
new file mode 100644
index 00000000..f979cb7f
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/Resources/Themes/Basic/Converters.xaml
@@ -0,0 +1,7 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/Net40/HandyControlDemo_Net40/Resources/Themes/Basic/Geometries.xaml b/Net40/HandyControlDemo_Net40/Resources/Themes/Basic/Geometries.xaml
new file mode 100644
index 00000000..de1ea0c5
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/Resources/Themes/Basic/Geometries.xaml
@@ -0,0 +1,19 @@
+
+
+ M512 0h1216a512 512 0 1 1 0 1024H512A512 512 0 1 1 512 0zM420.16 311.04V768h74.88V433.92h2.56l228.48 334.08h72.96V311.04h-75.52v329.6h-2.56l-225.92-329.6h-74.88z m468.48 0V768h340.48v-64h-265.6V565.76h239.36v-64h-239.36V375.04h254.72v-64h-329.6z m369.28 0l131.2 456.96h80l89.6-343.68h2.56l88.96 343.68h79.36l131.84-456.96h-84.48l-85.76 347.52h-2.56l-90.24-347.52h-77.44l-90.24 347.52h-2.56l-85.76-347.52h-84.48z
+ M40.493382,19.001303 C36.637875,19.06448 33.938568,21.421986 33.948524,25.271919 L34.068279,71.56765 34.066906,71.598007 34.068745,71.747833 34.18895,118.21758 C34.202225,123.35083 39.026951,129.19344 44.965271,131.2674 50.903587,133.34137 55.706783,130.86133 55.693504,125.72808 L55.589508,85.524513 93.866371,85.524513 93.950943,118.21758 C93.964218,123.35083 98.788948,129.19344 104.72726,131.2674 110.66558,133.34137 115.46878,130.86133 115.4555,125.72808 L115.33575,79.432381 115.33712,79.401993 115.33528,79.252007 115.21507,32.782413 C115.2018,27.64917 110.37708,21.806566 104.43876,19.732603 98.500435,17.658638 93.697243,20.138674 93.710518,25.271919 L93.814514,65.475487 55.537647,65.475487 55.453079,32.782413 C55.439804,27.64917 50.615082,21.806566 44.676762,19.732603 43.192181,19.214111 41.778549,18.980244 40.493382,19.001303 z M9.999999,0 L140,0 C145.52284,0 150,4.4771523 150,9.999999 L150,140 C150,145.52284 145.52284,150 140,150 L9.999999,150 C4.4771523,150 0,145.52284 0,140 L0,9.999999 C0,4.4771523 4.4771523,0 9.999999,0 z
+ M28.677037,-2.2499313E-22 C38.75065,24.740243 38.50705,52.437974 27.999852,77.000001 L-1.7053028E-13,65.206651 C7.3550318,48.013234 7.5255431,28.624822 0.4740567,11.306663 z
+ M267.287478 892.162257c0 45.149912 59.597884 71.336861 93.008818 37.925926L740.458554 549.925926c21.671958-21.671958 21.671958-54.179894 0-75.851852L360.296296 93.911817c-33.410935-33.410935-93.008818-5.417989-93.008818 38.828924v759.421516z m0 0
+ M512 0C229.12 0 0 229.12 0 512c0 226.56 146.56 417.92 350.08 485.76 25.6 4.48 35.2-10.88 35.2-24.32 0-12.16-0.64-52.48-0.64-95.36-128.64 23.68-161.92-31.36-172.16-60.16-5.76-14.72-30.72-60.16-52.48-72.32-17.92-9.6-43.52-33.28-0.64-33.92 40.32-0.64 69.12 37.12 78.72 52.48 46.08 77.44 119.68 55.68 149.12 42.24 4.48-33.28 17.92-55.68 32.64-68.48-113.92-12.8-232.96-56.96-232.96-252.8 0-55.68 19.84-101.76 52.48-137.6-5.12-12.8-23.04-65.28 5.12-135.68 0 0 42.88-13.44 140.8 52.48 40.96-11.52 84.48-17.28 128-17.28 43.52 0 87.04 5.76 128 17.28 97.92-66.56 140.8-52.48 140.8-52.48 28.16 70.4 10.24 122.88 5.12 135.68 32.64 35.84 52.48 81.28 52.48 137.6 0 196.48-119.68 240-233.6 252.8 18.56 16 34.56 46.72 34.56 94.72 0 68.48-0.64 123.52-0.64 140.8 0 13.44 9.6 29.44 35.2 24.32A512.832 512.832 0 0 0 1024 512c0-282.88-229.12-512-512-512z
+ M449.722947 199.412211H706.021053c130.967579 0 237.136842 106.169263 237.136842 237.136842v256.298105c0 130.967579-106.169263 237.136842-237.136842 237.136842H449.722947c-130.965895 0-237.136842-106.169263-237.136842-237.136842V436.549053c0-130.967579 106.170947-237.136842 237.136842-237.136842z m-201.205894-21.557895c0-64.299789-70.085053-104.704-125.850948-72.55579s-55.764211 112.96 0 145.111579 125.850947-8.257684 125.850948-72.555789z m239.528421 234.74021c0-68.003368-74.088421-110.736842-133.037474-76.734315s-58.950737 119.467789 0 153.470315 133.039158-8.730947 133.039158-76.736zM835.368421 692.847158c0-117.596632-128.154947-191.494737-230.123789-132.695579s-101.970526 206.593684 0 265.391158S835.368421 810.443789 835.368421 692.847158z
+ M430.079734 481.464543c45.196365 45.596478 118.486578 45.596478 163.68499 0l360.684736-324.939627c0.547469 3.751441 1.13894 7.490601 1.13894 11.401678l0 404.753417 0 116.754121c0 42.995233-34.547841 77.838809-77.145008 77.838809L145.397996 767.272941c-42.597167 0-77.145008-34.844599-77.145008-77.838809L68.252988 494.839155 68.252988 167.926594c0-3.911076 0.593518-7.65126 1.139963-11.401678L430.079734 481.464543zM910.960992 74.226538 562.044278 387.28558c-38.470173 38.811957-62.276369 38.811957-100.770078 0L112.538611 74.408687c10.011005-4.789073 21.069875-7.673773 32.859385-7.673773l733.044372 0C890.095779 66.735937 901.065622 69.539796 910.960992 74.226538z
+ M260.8 645H160V0h100.8v645zM461.8 152.2h-100.8V1024h100.8V152.2z m201.2 0h-100.8V1024h100.8V152.2zM864 152h-100.8v494H864V152z
+ M890.2 208.2c-91.8-91.9-242.1-91.9-334 0L544.4 220c-18.2 18.2-47.6 18.2-65.8 0l-11.8-11.8c-91.9-91.9-242.1-91.9-334 0C41 300 24.7 533.9 203.6 722.1 304 827.8 412.4 882.3 470 905.9c26.6 10.9 56.5 10.9 83 0 57.6-23.6 166-78.1 266.4-183.8 178.9-188.2 162.6-422 70.8-513.9z
+ M512 0C229.234472 0 0 229.226146 0 512 0 794.765528 229.234472 1024 512 1024S1024 794.765528 1024 512C1024 229.226146 794.765528 0 512 0zM228.776585 836.066862c-63.163317 0-114.371642-51.208325-114.371642-114.371642S165.613268 607.323577 228.776585 607.323577s114.371642 51.208325 114.371643 114.371643c0 63.171642-51.208325 114.371642-114.371643 114.371642z m420.555968-89.612488a391.867317 391.867317 0 0 1-1.989724 16.975089c-7.259577 30.203837-33.950179 52.898341-66.376845 52.898342-38.104455 0-68.990959-34.158309-68.99096-72.204488 0-5.877593 0.81587-11.463805 2.206179-16.775284-1.756618-131.096976-103.981789-237.867707-233.205593-246.883903l-6.343805-0.740943-1.015675-0.041626c-5.453008-0.216455-10.930992-0.732618-16.142569-2.331057a67.958634 67.958634 0 0 1-47.91987-65.078114c0-37.604943 30.245463-68.091837 67.550699-68.091837 0.299707 0 0.591089 0.041626 0.890797 0.049951l0.124878-0.049951c205.707447 2.139577 371.836878 169.484488 371.836878 375.699772 0 7.717463-0.341333 15.34335-0.824195 22.94426 0.066602 1.207154 0.19148 2.397659 0.199805 3.629789z m254.085203-63.329821c-10.856065 45.172553-25.80813 104.114992-74.310764 104.114992-56.994341 0-48.236228-66.085463-48.236228-122.996553 0-8.791415 1.223805-17.149919 3.296781-25.100488-2.639089-196.108488-169.834146-387.812943-363.137041-401.291447l-35.806699-5.827642c-42.117203-7.492683-111.715902-3.255154-111.715903-49.193626 0-56.253398 50.234276-81.861724 106.038114-81.861724 0.449561 0 0.882472 0.058276 1.332033 0.066602l0.183154-0.066602c307.724488 3.180228 526.252748 208.546341 526.252748 517.028423a538.474146 538.474146 0 0 1-1.23213 34.316488c0.108228 1.806569 0.291382 3.596488 0.308033 5.428032a542.72 542.72 0 0 1-2.972098 25.383545z
+ M827.904 541.184a278.592 278.592 0 0 0 0-58.368l73.728-58.368c15.872-13.056 20.224-35.584 9.728-53.504l-78.592-137.728c-9.984-17.408-31.232-25.856-51.712-18.176l-86.528 35.072c-15.872-11.52-32.512-21.248-49.664-29.184l-12.8-92.928c-3.072-20.224-20.736-35.584-41.216-35.584h-157.44c-20.736 0-38.144 14.848-41.216 35.84L378.88 221.44c-17.152 7.936-33.792 17.92-49.664 29.184L242.688 215.296c-18.688-7.168-41.216 0.768-51.2 18.176L112.64 371.2c-10.24 17.92-6.144 40.448 10.24 53.76l73.472 58.112c-1.024 9.472-1.536 19.2-1.536 29.184 0 9.728 0.512 19.456 1.536 29.184l-73.984 58.368c-15.872 13.056-19.968 35.584-9.728 53.248l78.848 137.728c9.984 17.408 32 25.856 51.456 17.92l86.528-35.072c15.872 11.52 32.512 21.248 49.664 29.184l13.056 93.696c3.328 20.48 20.48 35.328 41.216 35.328h157.44c20.48 0 38.144-15.36 41.216-35.84l13.056-93.184c17.152-7.936 33.792-17.664 49.664-29.184l86.784 35.328c4.864 1.792 9.984 2.816 15.104 2.816 14.848 0 28.672-7.936 36.096-20.992l78.592-137.728c10.24-17.664 6.4-40.192-9.984-53.76l-73.472-58.112z m-25.344 231.168l-99.584-40.448c-7.424-3.072-15.872-1.792-22.272 3.072-19.712 15.36-40.704 27.648-62.464 36.608-7.424 3.072-12.544 9.728-13.568 17.664l-14.592 104.96-155.392 2.304-15.104-107.264c-1.024-7.936-6.4-14.592-13.568-17.664-21.76-8.96-42.752-21.504-62.464-36.608-4.096-3.072-8.96-4.608-13.824-4.608-2.816 0-5.888 0.512-8.448 1.536l-96.256 41.472-80.896-137.216 84.48-66.816c6.144-4.864 9.472-12.8 8.448-20.48-1.536-12.032-2.56-24.32-2.56-36.608 0-12.288 1.024-24.576 2.56-36.608 1.024-7.936-2.048-15.616-8.448-20.48l-83.712-64 76.544-139.264 99.584 40.448c7.424 3.072 15.872 1.792 22.272-3.072 19.712-15.36 40.96-27.648 62.72-36.864 7.424-3.072 12.544-9.728 13.568-17.664l12.544-104.704 157.696-2.304 15.104 107.264c1.024 7.936 6.4 14.592 13.568 17.664 21.76 8.96 42.752 21.504 62.464 36.864 6.4 4.864 14.848 6.144 22.272 3.072l96.256-41.472 80.896 137.216-84.48 66.816c-6.144 4.864-9.472 12.544-8.448 20.48 1.536 12.032 2.56 24.32 2.56 36.608 0 12.288-1.024 24.576-2.56 36.608-1.024 7.936 2.304 15.616 8.448 20.48l83.712 63.744-77.056 139.264zM512 345.6c-91.136 0-165.12 74.752-165.12 166.4s73.984 166.4 165.12 166.4 165.12-74.752 165.12-166.4-73.984-166.4-165.12-166.4z m0 297.216c-71.168 0-129.28-58.624-129.28-130.816 0-72.192 58.112-130.816 129.28-130.816s129.28 58.624 129.28 130.816c0 72.192-57.856 130.816-129.28 130.816z
+ M657.486769 287.744c5.671385 0 11.264-5.671385 16.935385-5.671385l186.289231-124.140307c5.592615-5.592615 16.935385-16.935385 16.935384-28.199385V73.334154A74.673231 74.673231 0 0 0 804.233846 0H606.680615v220.002462c0 22.606769-16.935385 33.870769-39.463384 33.870769H454.262154c-22.528 0-39.463385-16.935385-39.463385-33.870769V5.671385H222.838154c-45.134769 0-79.005538 33.870769-79.005539 73.255384v56.477539c0 11.264 5.671385 22.528 16.935385 28.199384l186.289231 124.140308h16.935384C200.310154 349.735385 98.697846 507.746462 121.304615 693.878154c22.528 169.275077 169.353846 310.350769 344.221539 327.207384 237.095385 28.199385 440.32-152.339692 440.32-377.934769 0-158.011077-101.612308-299.008-248.359385-355.406769z m-146.747077 671.271385C335.793231 959.015385 189.046154 818.018462 189.046154 643.150769c0-174.867692 146.747077-310.350769 321.693538-310.350769 174.946462 0 321.693538 141.075692 321.693539 315.943385s-146.747077 310.350769-321.693539 310.350769zM670.798769 572.967385l-68.371692-11.185231a31.507692 31.507692 0 0 1-28.514462-16.777846l-28.514461-55.926154c-17.092923-27.963077-51.278769-27.963077-68.371692 0l-28.514462 55.926154a31.507692 31.507692 0 0 1-28.514462 16.777846l-68.371692 11.185231c-28.514462 5.592615-39.936 39.148308-17.092923 61.44l45.528615 39.227077c5.750154 11.185231 17.171692 22.370462 11.421539 33.555692l-11.421539 67.111384c-5.671385 27.963077 28.514462 50.333538 51.357539 33.555693l62.700308-27.963077a37.021538 37.021538 0 0 1 34.185846 0l62.700307 33.555692c28.514462 16.777846 57.028923-5.592615 51.27877-33.555692l-11.421539-67.111385c0-16.777846 5.750154-27.963077 11.421539-33.555692l51.278769-44.740923a38.596923 38.596923 0 0 0-22.843077-61.518769z
+ M1185.92 769.92h-1.28c0.576 0 0.96 0.64 1.536 0.704h0.384l-0.64-0.64z m0.256 0.704c-5.952 0.064-20.928 3.2-36.736 3.2-49.92 0-67.2-23.04-67.2-53.12V520.32h101.76c5.76 0 10.24-5.12 10.24-12.16v-108.8c0-5.76-5.12-10.88-10.24-10.88h-101.76V253.44c0-5.12-3.2-8.32-8.96-8.32h-138.24c-5.76 0-8.96 3.2-8.96 8.32v138.88s-69.76 17.28-74.24 17.92c-5.12 1.28-8.32 5.76-8.32 10.88v87.04c0 7.04 5.12 12.16 10.88 12.16h71.04v209.92c0 156.16 108.8 172.16 183.04 172.16 33.92 0 74.88-10.88 81.28-14.08 3.84-1.28 5.76-5.76 5.76-10.24v-96a11.328 11.328 0 0 0-9.344-11.52z m1516.544-140.8c0-115.84-46.72-131.2-96-126.08-38.4 2.56-69.12 21.76-69.12 21.76v225.28s31.36 21.76 78.08 23.04c65.92 1.92 87.04-21.76 87.04-144z m155.52-10.24c0 219.52-71.04 282.24-195.2 282.24-104.96 0-161.28-53.12-161.28-53.12s-2.56 29.44-5.76 33.28c-1.92 3.84-5.12 5.12-8.96 5.12h-94.72c-6.4 0-12.16-5.12-12.16-10.88l1.28-711.04c0-5.76 5.12-10.88 10.88-10.88h136.32c5.76 0 10.88 5.12 10.88 10.88v241.28s52.48-33.92 129.28-33.92l-0.64-1.28c76.8 0 190.08 28.8 190.08 248.32z m-558.08-231.04H2165.76c-7.04 0-10.88 5.12-10.88 12.16v348.16s-35.2 24.96-83.2 24.96-62.08-21.76-62.08-69.76V400c0-5.76-5.12-10.88-10.88-10.88h-136.96c-5.76 0-10.88 5.12-10.88 10.88v327.04c0 140.8 78.72 176 186.88 176 88.96 0 161.28-49.28 161.28-49.28s3.2 24.96 5.12 28.8c1.28 3.2 5.76 5.76 10.24 5.76h85.76c7.04 0 10.88-5.12 10.88-10.88l1.28-478.08c0-5.76-5.12-10.88-12.16-10.88z m-1516.8-0.64h-136.32c-5.76 0-10.88 5.76-10.88 12.8v469.76c0 12.8 8.32 17.28 19.2 17.28h122.88c12.8 0 16-5.76 16-17.28V398.72c0-5.76-5.12-10.88-10.88-10.88z m-67.2-216.32c-49.28 0-88.32 39.04-88.32 88.32 0 49.28 39.04 88.32 88.32 88.32 48 0 87.04-39.04 87.04-88.32 0-49.28-39.04-88.32-87.04-88.32z m1055.36-16h-135.04c-5.76 0-10.88 5.12-10.88 10.88v261.76h-211.84V166.4c0-5.76-5.12-10.88-10.88-10.88h-136.32c-5.76 0-10.88 5.12-10.88 10.88v711.04c0 5.76 5.76 10.88 10.88 10.88h136.32c5.76 0 10.88-5.12 10.88-10.88V573.44h211.84l-1.28 304c0 5.76 5.12 10.88 10.88 10.88h136.32c5.76 0 10.88-5.12 10.88-10.88V166.4c0-5.76-5.12-10.88-10.88-10.88zM563.84 470.4v367.36c0 2.56-0.64 7.04-3.84 8.32 0 0-80 56.96-211.84 56.96-159.36 0-348.16-49.92-348.16-378.88S165.12 127.36 326.4 128c139.52 0 195.84 31.36 204.8 37.12 2.56 3.2 3.84 5.76 3.84 8.96L508.16 288c0 5.76-5.76 12.8-12.8 10.88-23.04-7.04-57.6-21.12-138.88-21.12-94.08 0-195.2 26.88-195.2 238.72s96 236.8 165.12 236.8c58.88 0 80-7.04 80-7.04v-147.2H312.32c-7.04 0-12.16-5.12-12.16-10.88V470.4c0-5.76 5.12-10.88 12.16-10.88h239.36c7.04 0 12.16 5.12 12.16 10.88z
+ M936.194300839506 691.6934192494618c-5.891587367822223-94.26540047423211-70.69904970840491-170.8560375504593-106.04857520987652-212.09715041975304 5.891587367822223-11.783174735644446 17.674762103466666-79.53643140740742-29.457938133649378-126.66913164452346V349.981342854005c0-182.63921228610366-129.61492468116543-315.1999312984493-294.57937486380246-315.1999312984493s-294.57937615834066 132.5607190123457-294.57937615834066 315.1999312984493v2.9457943311802466c-47.132700237116055 47.132700237116055-35.349525501471604 114.885956908879-29.45793683911111 126.66913164452346-35.349525501471604 41.24111286929382-100.15698784205432 117.83174994552098-106.04857520987652 212.09715041975304 0 23.56634947128889 2.9457943311802466 58.91587497276049 14.728969066824689 76.59063707622718 14.728969066824689 20.62055643464691 55.97008193611851-2.9457943311802466 82.48222444404936-64.80746234058272 8.837381699002469 29.457938133649378 26.51214380246913 73.64484403958517 67.75325667176295 126.66913164452346-70.69904970840491 14.728969066824689-88.37381310640988 85.42801877522965-64.80746234058272 123.72333731334321 17.674762103466666 26.51214380246913 53.02428760493826 47.132700237116055 120.77754298216297 47.132700237116055 114.885956908879 0 167.9102445138173-32.40373117029136 191.4765952796444-53.02428760493826 5.891587367822223-5.891587367822223 11.783174735644446-5.891587367822223 20.620555140108642-5.891587367822223 8.837381699002469 0 14.728969066824689 2.9457943311802466 20.62055643464691 5.891587367822223 23.56634947128889 20.62055643464691 73.64484403958517 53.02428760493826 191.4765939851062 53.02428760493826 64.80746234058272 0 103.10278087869627-20.62055643464691 120.77754427670124-47.132700237116055 23.56634947128889-38.29531853811359 2.9457943311802466-106.04857520987652-64.80746234058272-123.72333731334321 41.24111286929382-55.97008193611851 58.91587497276049-100.15698784205432 67.75325667176295-126.66913164452346 29.457938133649378 61.86166930394074 67.75325667176295 85.42801877522965 82.48222444404936 64.80746234058272 5.891587367822223-17.674762103466666 11.783174735644446-53.02428760493826 8.837381699002469-76.59063707622718z m0 0
+
+
\ No newline at end of file
diff --git a/Net40/HandyControlDemo_Net40/Resources/Themes/SkinDark.xaml b/Net40/HandyControlDemo_Net40/Resources/Themes/SkinDark.xaml
new file mode 100644
index 00000000..32b78055
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/Resources/Themes/SkinDark.xaml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Net40/HandyControlDemo_Net40/Resources/Themes/SkinDefault.xaml b/Net40/HandyControlDemo_Net40/Resources/Themes/SkinDefault.xaml
new file mode 100644
index 00000000..825e8dbd
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/Resources/Themes/SkinDefault.xaml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Net40/HandyControlDemo_Net40/Resources/Themes/Style.xaml b/Net40/HandyControlDemo_Net40/Resources/Themes/Style.xaml
new file mode 100644
index 00000000..ea95bea7
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/Resources/Themes/Style.xaml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Net40/HandyControlDemo_Net40/Resources/Themes/Styles/Style.xaml b/Net40/HandyControlDemo_Net40/Resources/Themes/Styles/Style.xaml
new file mode 100644
index 00000000..11cd7a5e
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/Resources/Themes/Styles/Style.xaml
@@ -0,0 +1,93 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Net40/HandyControlDemo_Net40/Resources/Themes/Styles/StyleDark.xaml b/Net40/HandyControlDemo_Net40/Resources/Themes/Styles/StyleDark.xaml
new file mode 100644
index 00000000..cd3f55cd
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/Resources/Themes/Styles/StyleDark.xaml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Net40/HandyControlDemo_Net40/Resources/Themes/Theme.xaml b/Net40/HandyControlDemo_Net40/Resources/Themes/Theme.xaml
new file mode 100644
index 00000000..93d641b3
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/Resources/Themes/Theme.xaml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Net40/HandyControlDemo_Net40/Service/DataService.cs b/Net40/HandyControlDemo_Net40/Service/DataService.cs
new file mode 100644
index 00000000..c3752620
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/Service/DataService.cs
@@ -0,0 +1,129 @@
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.Linq;
+using System.Net;
+using HandyControlDemo.Data;
+using HandyControlDemo.Tools.Converter;
+using Newtonsoft.Json;
+
+namespace HandyControlDemo.Service
+{
+ public class DataService
+ {
+ internal List GetDemoDataList()
+ {
+ var list = new List();
+ for (var i = 1; i <= 6; i++)
+ {
+ var dataList = new List();
+ for (int j = 0; j < 3; j++)
+ {
+ dataList.Add(new DemoDataModel
+ {
+ Index = j,
+ IsSelected = j % 2 == 0,
+ Name = $"SubName{j}",
+ Type = (DemoType)j
+ });
+ }
+ var model = new DemoDataModel
+ {
+ Index = i,
+ IsSelected = i % 2 == 0,
+ Name = $"Name{i}",
+ Type = (DemoType)i,
+ DataList = dataList,
+ ImgPath = $"/HandyControlDemo;component/Resources/Img/Avatar/avatar{i}.png",
+ Remark = new string(i.ToString()[0], 10)
+ };
+ list.Add(model);
+ }
+
+ return list;
+ }
+
+ public List GetDemoDataList(int count)
+ {
+ var list = new List();
+ for (var i = 1; i <= count; i++)
+ {
+ var index = i % 6 + 1;
+ var model = new DemoDataModel
+ {
+ Index = i,
+ IsSelected = i % 2 == 0,
+ Name = $"Name{i}",
+ Type = (DemoType)index,
+ ImgPath = $"/HandyControlDemo;component/Resources/Img/Avatar/avatar{index}.png",
+ Remark = new string(i.ToString()[0], 10)
+ };
+ list.Add(model);
+ }
+
+ return list;
+ }
+
+ internal List GetComboBoxDemoDataList()
+ {
+ var converter = new StringRepeatConverter();
+ var list = new List();
+ for (var i = 1; i <= 9; i++)
+ {
+ list.Add(converter.Convert(Properties.Langs.Lang.Text, null, i, CultureInfo.CurrentCulture)?.ToString());
+ }
+
+ return list;
+ }
+
+ internal List GetContributorDataList()
+ {
+ var client = new WebClient();
+ client.Headers.Add("User-Agent", "request");
+ var list = new List();
+ try
+ {
+ var json = client.DownloadString(new Uri("https://api.github.com/repos/nabian/handycontrol/contributors"));
+ var objList = JsonConvert.DeserializeObject>(json);
+ list.AddRange(objList.Select(item => new ContributorModel
+ {
+ UserName = item.login,
+ AvatarUri = item.avatar_url,
+ Link = item.html_url
+ }));
+ }
+ catch
+ {
+ // ignored
+ }
+ return list;
+ }
+
+ internal List GetStepBarDemoDataList()
+ {
+ return new List
+ {
+ new StepBarDemoModel
+ {
+ Header = $"{Properties.Langs.Lang.Step}1",
+ Content = Properties.Langs.Lang.Register
+ },
+ new StepBarDemoModel
+ {
+ Header = $"{Properties.Langs.Lang.Step}2",
+ Content = Properties.Langs.Lang.BasicInfo
+ },
+ new StepBarDemoModel
+ {
+ Header = $"{Properties.Langs.Lang.Step}3",
+ Content = Properties.Langs.Lang.UploadFile
+ },
+ new StepBarDemoModel
+ {
+ Header = $"{Properties.Langs.Lang.Step}4",
+ Content = Properties.Langs.Lang.Complete
+ }
+ };
+ }
+ }
+}
\ No newline at end of file
diff --git a/Net40/HandyControlDemo_Net40/Tools/AssemblyHelper.cs b/Net40/HandyControlDemo_Net40/Tools/AssemblyHelper.cs
new file mode 100644
index 00000000..ae55a7ee
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/Tools/AssemblyHelper.cs
@@ -0,0 +1,22 @@
+using System;
+
+namespace HandyControlDemo.Tools
+{
+ public class AssemblyHelper
+ {
+ private static readonly string NameSpaceStr = typeof(AssemblyHelper).Assembly.GetName().Name;
+
+ public static object CreateInternalInstance(string className)
+ {
+ try
+ {
+ var type = Type.GetType($"{NameSpaceStr}.{className}");
+ return type == null ? null : Activator.CreateInstance(type);
+ }
+ catch
+ {
+ return null;
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Net40/HandyControlDemo_Net40/Tools/CommonHelper.cs b/Net40/HandyControlDemo_Net40/Tools/CommonHelper.cs
new file mode 100644
index 00000000..a9daea11
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/Tools/CommonHelper.cs
@@ -0,0 +1,25 @@
+using System.Linq;
+using System.Management;
+using HandyControl.Data;
+
+namespace HandyControlDemo.Tools
+{
+ public class CommonHelper
+ {
+ public static SystemVersionInfo GetSystemVersionInfo()
+ {
+ var managementClass = new ManagementClass("Win32_OperatingSystem");
+ var instances = managementClass.GetInstances();
+ foreach (var instance in instances)
+ {
+ if (instance["Version"] is string version)
+ {
+ var nums = version.Split('.').Select(int.Parse).ToList();
+ var info = new SystemVersionInfo(nums[0], nums[1], nums[2]);
+ return info;
+ }
+ }
+ return default(SystemVersionInfo);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Net40/HandyControlDemo_Net40/Tools/Converter/StringRepeatConverter.cs b/Net40/HandyControlDemo_Net40/Tools/Converter/StringRepeatConverter.cs
new file mode 100644
index 00000000..ab297231
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/Tools/Converter/StringRepeatConverter.cs
@@ -0,0 +1,45 @@
+using System;
+using System.Globalization;
+using System.Text;
+using System.Windows.Data;
+
+namespace HandyControlDemo.Tools.Converter
+{
+ public class StringRepeatConverter : IValueConverter
+ {
+ public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ if (value is string strValue)
+ {
+ var builder = new StringBuilder();
+ int num;
+ if (parameter is string numStr)
+ {
+ if (!int.TryParse(numStr, out num))
+ {
+ return strValue;
+ }
+ }
+ else if(parameter is int intValue)
+ {
+ num = intValue;
+ }
+ else
+ {
+ return strValue;
+ }
+ for (var i = 0; i < num; i++)
+ {
+ builder.Append(strValue);
+ }
+ return builder.ToString();
+ }
+ return string.Empty;
+ }
+
+ public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ throw new NotImplementedException();
+ }
+ }
+}
\ No newline at end of file
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Basic/Avatar.xaml b/Net40/HandyControlDemo_Net40/UserControl/Basic/Avatar.xaml
new file mode 100644
index 00000000..915ee832
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Basic/Avatar.xaml
@@ -0,0 +1,22 @@
+
+
+
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Basic/Avatar.xaml.cs b/Net40/HandyControlDemo_Net40/UserControl/Basic/Avatar.xaml.cs
new file mode 100644
index 00000000..88727b94
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Basic/Avatar.xaml.cs
@@ -0,0 +1,44 @@
+using System.Diagnostics;
+using System.Windows;
+using System.Windows.Media.Imaging;
+
+
+namespace HandyControlDemo.UserControl
+{
+ public partial class Avatar
+ {
+ public Avatar()
+ {
+ InitializeComponent();
+ }
+
+ public static readonly DependencyProperty SourceProperty = DependencyProperty.Register(
+ "Source", typeof(BitmapFrame), typeof(Avatar), new PropertyMetadata(default(BitmapFrame)));
+
+ public BitmapFrame Source
+ {
+ get => (BitmapFrame) GetValue(SourceProperty);
+ set => SetValue(SourceProperty, value);
+ }
+
+ public static readonly DependencyProperty UserNameProperty = DependencyProperty.Register(
+ "UserName", typeof(string), typeof(Avatar), new PropertyMetadata(default(string)));
+
+ public string UserName
+ {
+ get => (string) GetValue(UserNameProperty);
+ set => SetValue(UserNameProperty, value);
+ }
+
+ public static readonly DependencyProperty LinkProperty = DependencyProperty.Register(
+ "Link", typeof(string), typeof(Avatar), new PropertyMetadata(default(string)));
+
+ public string Link
+ {
+ get => (string) GetValue(LinkProperty);
+ set => SetValue(LinkProperty, value);
+ }
+
+ private void ButtonAvatar_OnClick(object sender, RoutedEventArgs e) => Process.Start(Link);
+ }
+}
\ No newline at end of file
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/AnimationPathDemoCtl.xaml b/Net40/HandyControlDemo_Net40/UserControl/Controls/AnimationPathDemoCtl.xaml
new file mode 100644
index 00000000..378c4c43
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/AnimationPathDemoCtl.xaml
@@ -0,0 +1,9 @@
+
+
+
+
+
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/AnimationPathDemoCtl.xaml.cs b/Net40/HandyControlDemo_Net40/UserControl/Controls/AnimationPathDemoCtl.xaml.cs
new file mode 100644
index 00000000..0b63c95e
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/AnimationPathDemoCtl.xaml.cs
@@ -0,0 +1,11 @@
+
+namespace HandyControlDemo.UserControl
+{
+ public partial class AnimationPathDemoCtl
+ {
+ public AnimationPathDemoCtl()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/CalendarWithClockDemoCtl.xaml b/Net40/HandyControlDemo_Net40/UserControl/Controls/CalendarWithClockDemoCtl.xaml
new file mode 100644
index 00000000..69eb771d
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/CalendarWithClockDemoCtl.xaml
@@ -0,0 +1,9 @@
+
+
+
+
+
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/CalendarWithClockDemoCtl.xaml.cs b/Net40/HandyControlDemo_Net40/UserControl/Controls/CalendarWithClockDemoCtl.xaml.cs
new file mode 100644
index 00000000..ec65eb73
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/CalendarWithClockDemoCtl.xaml.cs
@@ -0,0 +1,10 @@
+namespace HandyControlDemo.UserControl
+{
+ public partial class CalendarWithClockDemoCtl
+ {
+ public CalendarWithClockDemoCtl()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/CarouselDemoCtl.xaml b/Net40/HandyControlDemo_Net40/UserControl/Controls/CarouselDemoCtl.xaml
new file mode 100644
index 00000000..e78b2e07
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/CarouselDemoCtl.xaml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/CarouselDemoCtl.xaml.cs b/Net40/HandyControlDemo_Net40/UserControl/Controls/CarouselDemoCtl.xaml.cs
new file mode 100644
index 00000000..51545d68
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/CarouselDemoCtl.xaml.cs
@@ -0,0 +1,11 @@
+
+namespace HandyControlDemo.UserControl
+{
+ public partial class CarouselDemoCtl
+ {
+ public CarouselDemoCtl()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/CirclePanelDemoCtl.xaml b/Net40/HandyControlDemo_Net40/UserControl/Controls/CirclePanelDemoCtl.xaml
new file mode 100644
index 00000000..84eae51d
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/CirclePanelDemoCtl.xaml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/CirclePanelDemoCtl.xaml.cs b/Net40/HandyControlDemo_Net40/UserControl/Controls/CirclePanelDemoCtl.xaml.cs
new file mode 100644
index 00000000..62bee1d5
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/CirclePanelDemoCtl.xaml.cs
@@ -0,0 +1,10 @@
+namespace HandyControlDemo.UserControl
+{
+ public partial class CirclePanelDemoCtl
+ {
+ public CirclePanelDemoCtl()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/CircleProgressBarDemoCtl.xaml b/Net40/HandyControlDemo_Net40/UserControl/Controls/CircleProgressBarDemoCtl.xaml
new file mode 100644
index 00000000..1d89bbbc
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/CircleProgressBarDemoCtl.xaml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/CircleProgressBarDemoCtl.xaml.cs b/Net40/HandyControlDemo_Net40/UserControl/Controls/CircleProgressBarDemoCtl.xaml.cs
new file mode 100644
index 00000000..3190976f
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/CircleProgressBarDemoCtl.xaml.cs
@@ -0,0 +1,11 @@
+
+namespace HandyControlDemo.UserControl
+{
+ public partial class CircleProgressBarDemoCtl
+ {
+ public CircleProgressBarDemoCtl()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/ClockDemoCtl.xaml b/Net40/HandyControlDemo_Net40/UserControl/Controls/ClockDemoCtl.xaml
new file mode 100644
index 00000000..43122db0
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/ClockDemoCtl.xaml
@@ -0,0 +1,9 @@
+
+
+
+
+
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/ClockDemoCtl.xaml.cs b/Net40/HandyControlDemo_Net40/UserControl/Controls/ClockDemoCtl.xaml.cs
new file mode 100644
index 00000000..2f4b2dcc
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/ClockDemoCtl.xaml.cs
@@ -0,0 +1,11 @@
+
+namespace HandyControlDemo.UserControl
+{
+ public partial class ClockDemoCtl
+ {
+ public ClockDemoCtl()
+ {
+ InitializeComponent();
+ }
+ }
+}
\ No newline at end of file
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/ColorPickerDemoCtl.xaml b/Net40/HandyControlDemo_Net40/UserControl/Controls/ColorPickerDemoCtl.xaml
new file mode 100644
index 00000000..9d253efe
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/ColorPickerDemoCtl.xaml
@@ -0,0 +1,8 @@
+
+
+
+
+
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/ColorPickerDemoCtl.xaml.cs b/Net40/HandyControlDemo_Net40/UserControl/Controls/ColorPickerDemoCtl.xaml.cs
new file mode 100644
index 00000000..16863a27
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/ColorPickerDemoCtl.xaml.cs
@@ -0,0 +1,11 @@
+
+namespace HandyControlDemo.UserControl
+{
+ public partial class ColorPickerDemoCtl
+ {
+ public ColorPickerDemoCtl()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/ComboBoxDemoCtl.xaml b/Net40/HandyControlDemo_Net40/UserControl/Controls/ComboBoxDemoCtl.xaml
new file mode 100644
index 00000000..045e2025
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/ComboBoxDemoCtl.xaml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/ComboBoxDemoCtl.xaml.cs b/Net40/HandyControlDemo_Net40/UserControl/Controls/ComboBoxDemoCtl.xaml.cs
new file mode 100644
index 00000000..95f82acf
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/ComboBoxDemoCtl.xaml.cs
@@ -0,0 +1,10 @@
+namespace HandyControlDemo.UserControl
+{
+ public partial class ComboBoxDemoCtl
+ {
+ public ComboBoxDemoCtl()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/CompareSliderDemoCtl.xaml b/Net40/HandyControlDemo_Net40/UserControl/Controls/CompareSliderDemoCtl.xaml
new file mode 100644
index 00000000..c375b4bc
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/CompareSliderDemoCtl.xaml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/CompareSliderDemoCtl.xaml.cs b/Net40/HandyControlDemo_Net40/UserControl/Controls/CompareSliderDemoCtl.xaml.cs
new file mode 100644
index 00000000..4ae9ffa1
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/CompareSliderDemoCtl.xaml.cs
@@ -0,0 +1,11 @@
+
+namespace HandyControlDemo.UserControl
+{
+ public partial class CompareSliderDemoCtl
+ {
+ public CompareSliderDemoCtl()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/CoverFlowDemoCtl.xaml b/Net40/HandyControlDemo_Net40/UserControl/Controls/CoverFlowDemoCtl.xaml
new file mode 100644
index 00000000..bd203b9c
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/CoverFlowDemoCtl.xaml
@@ -0,0 +1,9 @@
+
+
+
+
+
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/CoverFlowDemoCtl.xaml.cs b/Net40/HandyControlDemo_Net40/UserControl/Controls/CoverFlowDemoCtl.xaml.cs
new file mode 100644
index 00000000..dc020673
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/CoverFlowDemoCtl.xaml.cs
@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+
+namespace HandyControlDemo.UserControl
+{
+ public partial class CoverFlowDemoCtl
+ {
+ public CoverFlowDemoCtl()
+ {
+ InitializeComponent();
+
+ CoverFlowMain.AddRange(new List
+ {
+ new Uri(@"pack://application:,,,/Resources/Img/Album/1.jpg"),
+ new Uri(@"pack://application:,,,/Resources/Img/Album/2.jpg"),
+ new Uri(@"pack://application:,,,/Resources/Img/Album/3.jpg"),
+ new Uri(@"pack://application:,,,/Resources/Img/Album/4.jpg"),
+ new Uri(@"pack://application:,,,/Resources/Img/Album/5.jpg"),
+ new Uri(@"pack://application:,,,/Resources/Img/Album/6.jpg"),
+ new Uri(@"pack://application:,,,/Resources/Img/Album/7.jpg"),
+ new Uri(@"pack://application:,,,/Resources/Img/Album/8.jpg"),
+ new Uri(@"pack://application:,,,/Resources/Img/Album/9.jpg"),
+ new Uri(@"pack://application:,,,/Resources/Img/Album/10.jpg")
+ });
+ CoverFlowMain.JumpTo(2);
+ }
+ }
+}
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/CoverViewDemoCtl.xaml b/Net40/HandyControlDemo_Net40/UserControl/Controls/CoverViewDemoCtl.xaml
new file mode 100644
index 00000000..8d52fb5f
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/CoverViewDemoCtl.xaml
@@ -0,0 +1,91 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/CoverViewDemoCtl.xaml.cs b/Net40/HandyControlDemo_Net40/UserControl/Controls/CoverViewDemoCtl.xaml.cs
new file mode 100644
index 00000000..32f1adf9
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/CoverViewDemoCtl.xaml.cs
@@ -0,0 +1,10 @@
+namespace HandyControlDemo.UserControl
+{
+ public partial class CoverViewDemoCtl
+ {
+ public CoverViewDemoCtl()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/DatePickerDemoCtl.xaml b/Net40/HandyControlDemo_Net40/UserControl/Controls/DatePickerDemoCtl.xaml
new file mode 100644
index 00000000..39e23fed
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/DatePickerDemoCtl.xaml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/DatePickerDemoCtl.xaml.cs b/Net40/HandyControlDemo_Net40/UserControl/Controls/DatePickerDemoCtl.xaml.cs
new file mode 100644
index 00000000..a7f7a755
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/DatePickerDemoCtl.xaml.cs
@@ -0,0 +1,10 @@
+namespace HandyControlDemo.UserControl
+{
+ public partial class DatePickerDemoCtl
+ {
+ public DatePickerDemoCtl()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/DateTimePickerDemoCtl.xaml b/Net40/HandyControlDemo_Net40/UserControl/Controls/DateTimePickerDemoCtl.xaml
new file mode 100644
index 00000000..d47ea7a3
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/DateTimePickerDemoCtl.xaml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/DateTimePickerDemoCtl.xaml.cs b/Net40/HandyControlDemo_Net40/UserControl/Controls/DateTimePickerDemoCtl.xaml.cs
new file mode 100644
index 00000000..2ddac486
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/DateTimePickerDemoCtl.xaml.cs
@@ -0,0 +1,10 @@
+namespace HandyControlDemo.UserControl
+{
+ public partial class DateTimePickerDemoCtl
+ {
+ public DateTimePickerDemoCtl()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/FlipClockDemoCtl.xaml b/Net40/HandyControlDemo_Net40/UserControl/Controls/FlipClockDemoCtl.xaml
new file mode 100644
index 00000000..e5e902a9
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/FlipClockDemoCtl.xaml
@@ -0,0 +1,9 @@
+
+
+
+
+
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/FlipClockDemoCtl.xaml.cs b/Net40/HandyControlDemo_Net40/UserControl/Controls/FlipClockDemoCtl.xaml.cs
new file mode 100644
index 00000000..01474c10
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/FlipClockDemoCtl.xaml.cs
@@ -0,0 +1,10 @@
+namespace HandyControlDemo.UserControl
+{
+ public partial class FlipClockDemoCtl
+ {
+ public FlipClockDemoCtl()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/GifImageDemoCtl.xaml b/Net40/HandyControlDemo_Net40/UserControl/Controls/GifImageDemoCtl.xaml
new file mode 100644
index 00000000..7efbaaae
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/GifImageDemoCtl.xaml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/GifImageDemoCtl.xaml.cs b/Net40/HandyControlDemo_Net40/UserControl/Controls/GifImageDemoCtl.xaml.cs
new file mode 100644
index 00000000..315e0296
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/GifImageDemoCtl.xaml.cs
@@ -0,0 +1,17 @@
+using System;
+
+namespace HandyControlDemo.UserControl
+{
+ public partial class GifImageDemoCtl : IDisposable
+ {
+ public GifImageDemoCtl()
+ {
+ InitializeComponent();
+ }
+
+ public void Dispose()
+ {
+ GifImageMain.Dispose();
+ }
+ }
+}
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/GrowlDemoCtl.xaml b/Net40/HandyControlDemo_Net40/UserControl/Controls/GrowlDemoCtl.xaml
new file mode 100644
index 00000000..7f5b6932
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/GrowlDemoCtl.xaml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/GrowlDemoCtl.xaml.cs b/Net40/HandyControlDemo_Net40/UserControl/Controls/GrowlDemoCtl.xaml.cs
new file mode 100644
index 00000000..cbf99957
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/GrowlDemoCtl.xaml.cs
@@ -0,0 +1,14 @@
+
+namespace HandyControlDemo.UserControl
+{
+ ///
+ /// GrowlDemoGrid.xaml 的交互逻辑
+ ///
+ public partial class GrowlDemoCtl
+ {
+ public GrowlDemoCtl()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/ImageBrowserDemoCtl.xaml b/Net40/HandyControlDemo_Net40/UserControl/Controls/ImageBrowserDemoCtl.xaml
new file mode 100644
index 00000000..224355dc
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/ImageBrowserDemoCtl.xaml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/ImageBrowserDemoCtl.xaml.cs b/Net40/HandyControlDemo_Net40/UserControl/Controls/ImageBrowserDemoCtl.xaml.cs
new file mode 100644
index 00000000..d40e1b88
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/ImageBrowserDemoCtl.xaml.cs
@@ -0,0 +1,14 @@
+
+namespace HandyControlDemo.UserControl
+{
+ ///
+ /// ImageBrowserDemoCtl.xaml 的交互逻辑
+ ///
+ public partial class ImageBrowserDemoCtl
+ {
+ public ImageBrowserDemoCtl()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/LoadingDemoCtl.xaml b/Net40/HandyControlDemo_Net40/UserControl/Controls/LoadingDemoCtl.xaml
new file mode 100644
index 00000000..ee2c5dc0
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/LoadingDemoCtl.xaml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/LoadingDemoCtl.xaml.cs b/Net40/HandyControlDemo_Net40/UserControl/Controls/LoadingDemoCtl.xaml.cs
new file mode 100644
index 00000000..005ed41a
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/LoadingDemoCtl.xaml.cs
@@ -0,0 +1,11 @@
+
+namespace HandyControlDemo.UserControl
+{
+ public partial class LoadingDemoCtl
+ {
+ public LoadingDemoCtl()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/NumericUpDownDemoCtl.xaml b/Net40/HandyControlDemo_Net40/UserControl/Controls/NumericUpDownDemoCtl.xaml
new file mode 100644
index 00000000..181773f5
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/NumericUpDownDemoCtl.xaml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/NumericUpDownDemoCtl.xaml.cs b/Net40/HandyControlDemo_Net40/UserControl/Controls/NumericUpDownDemoCtl.xaml.cs
new file mode 100644
index 00000000..ae0e08bf
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/NumericUpDownDemoCtl.xaml.cs
@@ -0,0 +1,19 @@
+using HandyControl.Data;
+
+
+namespace HandyControlDemo.UserControl
+{
+ public partial class NumericUpDownDemoCtl
+ {
+ public NumericUpDownDemoCtl()
+ {
+ InitializeComponent();
+
+ NumericUpDownCustomVerify.VerifyFunc = str => double.TryParse(str, out var v)
+ ? v % 2 < 1e-06
+ ? OperationResult.Failed(Properties.Langs.Lang.Error)
+ : OperationResult.Success()
+ : OperationResult.Failed(Properties.Langs.Lang.Error);
+ }
+ }
+}
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/OutlineTextDemoCtl.xaml b/Net40/HandyControlDemo_Net40/UserControl/Controls/OutlineTextDemoCtl.xaml
new file mode 100644
index 00000000..c0872fd0
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/OutlineTextDemoCtl.xaml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/OutlineTextDemoCtl.xaml.cs b/Net40/HandyControlDemo_Net40/UserControl/Controls/OutlineTextDemoCtl.xaml.cs
new file mode 100644
index 00000000..1e637136
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/OutlineTextDemoCtl.xaml.cs
@@ -0,0 +1,10 @@
+namespace HandyControlDemo.UserControl
+{
+ public partial class OutlineTextDemoCtl
+ {
+ public OutlineTextDemoCtl()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/PaginationDemoCtl.xaml b/Net40/HandyControlDemo_Net40/UserControl/Controls/PaginationDemoCtl.xaml
new file mode 100644
index 00000000..ac0ead50
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/PaginationDemoCtl.xaml
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/PaginationDemoCtl.xaml.cs b/Net40/HandyControlDemo_Net40/UserControl/Controls/PaginationDemoCtl.xaml.cs
new file mode 100644
index 00000000..054499d8
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/PaginationDemoCtl.xaml.cs
@@ -0,0 +1,11 @@
+
+namespace HandyControlDemo.UserControl
+{
+ public partial class PaginationDemoCtl
+ {
+ public PaginationDemoCtl()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/PasswordBoxDemoCtl.xaml b/Net40/HandyControlDemo_Net40/UserControl/Controls/PasswordBoxDemoCtl.xaml
new file mode 100644
index 00000000..2765e826
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/PasswordBoxDemoCtl.xaml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/PasswordBoxDemoCtl.xaml.cs b/Net40/HandyControlDemo_Net40/UserControl/Controls/PasswordBoxDemoCtl.xaml.cs
new file mode 100644
index 00000000..8e750253
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/PasswordBoxDemoCtl.xaml.cs
@@ -0,0 +1,10 @@
+namespace HandyControlDemo.UserControl
+{
+ public partial class PasswordBoxDemoCtl
+ {
+ public PasswordBoxDemoCtl()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/PreviewSliderDemoCtl.xaml b/Net40/HandyControlDemo_Net40/UserControl/Controls/PreviewSliderDemoCtl.xaml
new file mode 100644
index 00000000..f18f784e
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/PreviewSliderDemoCtl.xaml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/PreviewSliderDemoCtl.xaml.cs b/Net40/HandyControlDemo_Net40/UserControl/Controls/PreviewSliderDemoCtl.xaml.cs
new file mode 100644
index 00000000..9869b2ca
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/PreviewSliderDemoCtl.xaml.cs
@@ -0,0 +1,11 @@
+
+namespace HandyControlDemo.UserControl
+{
+ public partial class PreviewSliderDemoCtl
+ {
+ public PreviewSliderDemoCtl()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/RateDemoCtl.xaml b/Net40/HandyControlDemo_Net40/UserControl/Controls/RateDemoCtl.xaml
new file mode 100644
index 00000000..5f4cd7eb
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/RateDemoCtl.xaml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/RateDemoCtl.xaml.cs b/Net40/HandyControlDemo_Net40/UserControl/Controls/RateDemoCtl.xaml.cs
new file mode 100644
index 00000000..5f5c2bb6
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/RateDemoCtl.xaml.cs
@@ -0,0 +1,10 @@
+namespace HandyControlDemo.UserControl
+{
+ public partial class RateDemoCtl
+ {
+ public RateDemoCtl()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/ScrollViewerDemoCtl.xaml b/Net40/HandyControlDemo_Net40/UserControl/Controls/ScrollViewerDemoCtl.xaml
new file mode 100644
index 00000000..12abfc01
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/ScrollViewerDemoCtl.xaml
@@ -0,0 +1,79 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/ScrollViewerDemoCtl.xaml.cs b/Net40/HandyControlDemo_Net40/UserControl/Controls/ScrollViewerDemoCtl.xaml.cs
new file mode 100644
index 00000000..56df29a7
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/ScrollViewerDemoCtl.xaml.cs
@@ -0,0 +1,11 @@
+
+namespace HandyControlDemo.UserControl
+{
+ public partial class ScrollViewerDemoCtl
+ {
+ public ScrollViewerDemoCtl()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/SearchBarDemoCtl.xaml b/Net40/HandyControlDemo_Net40/UserControl/Controls/SearchBarDemoCtl.xaml
new file mode 100644
index 00000000..3159c30f
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/SearchBarDemoCtl.xaml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/SearchBarDemoCtl.xaml.cs b/Net40/HandyControlDemo_Net40/UserControl/Controls/SearchBarDemoCtl.xaml.cs
new file mode 100644
index 00000000..0375fd53
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/SearchBarDemoCtl.xaml.cs
@@ -0,0 +1,10 @@
+namespace HandyControlDemo.UserControl
+{
+ public partial class SearchBarDemoCtl
+ {
+ public SearchBarDemoCtl()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/ShieldDemoCtl.xaml b/Net40/HandyControlDemo_Net40/UserControl/Controls/ShieldDemoCtl.xaml
new file mode 100644
index 00000000..6676c3ef
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/ShieldDemoCtl.xaml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/ShieldDemoCtl.xaml.cs b/Net40/HandyControlDemo_Net40/UserControl/Controls/ShieldDemoCtl.xaml.cs
new file mode 100644
index 00000000..6cfbc669
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/ShieldDemoCtl.xaml.cs
@@ -0,0 +1,10 @@
+namespace HandyControlDemo.UserControl
+{
+ public partial class ShieldDemoCtl
+ {
+ public ShieldDemoCtl()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/StepBarDemoCtl.xaml b/Net40/HandyControlDemo_Net40/UserControl/Controls/StepBarDemoCtl.xaml
new file mode 100644
index 00000000..581718ca
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/StepBarDemoCtl.xaml
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/StepBarDemoCtl.xaml.cs b/Net40/HandyControlDemo_Net40/UserControl/Controls/StepBarDemoCtl.xaml.cs
new file mode 100644
index 00000000..cadb827f
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/StepBarDemoCtl.xaml.cs
@@ -0,0 +1,14 @@
+
+namespace HandyControlDemo.UserControl
+{
+ ///
+ /// StepBarDemoCtl.xaml 的交互逻辑
+ ///
+ public partial class StepBarDemoCtl
+ {
+ public StepBarDemoCtl()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/TabControlDemoCtl.xaml b/Net40/HandyControlDemo_Net40/UserControl/Controls/TabControlDemoCtl.xaml
new file mode 100644
index 00000000..cb441647
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/TabControlDemoCtl.xaml
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/TabControlDemoCtl.xaml.cs b/Net40/HandyControlDemo_Net40/UserControl/Controls/TabControlDemoCtl.xaml.cs
new file mode 100644
index 00000000..32d10ea9
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/TabControlDemoCtl.xaml.cs
@@ -0,0 +1,11 @@
+
+namespace HandyControlDemo.UserControl
+{
+ public partial class TabControlDemoCtl
+ {
+ public TabControlDemoCtl()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/TagDemoCtl.xaml b/Net40/HandyControlDemo_Net40/UserControl/Controls/TagDemoCtl.xaml
new file mode 100644
index 00000000..8d499982
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/TagDemoCtl.xaml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/TagDemoCtl.xaml.cs b/Net40/HandyControlDemo_Net40/UserControl/Controls/TagDemoCtl.xaml.cs
new file mode 100644
index 00000000..08630f47
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/TagDemoCtl.xaml.cs
@@ -0,0 +1,24 @@
+using System;
+using HandyControl.Controls;
+
+namespace HandyControlDemo.UserControl
+{
+ public partial class TagDemoCtl
+ {
+ public TagDemoCtl()
+ {
+ InitializeComponent();
+ }
+
+ private void TagPanel_OnAddTagButtonClick(object sender, EventArgs e)
+ {
+ if (sender is TagPanel panel)
+ {
+ panel.Children.Add(new Tag
+ {
+ Content = Properties.Langs.Lang.SubTitle
+ });
+ }
+ }
+ }
+}
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/TextBoxDemoCtl.xaml b/Net40/HandyControlDemo_Net40/UserControl/Controls/TextBoxDemoCtl.xaml
new file mode 100644
index 00000000..3f111f30
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/TextBoxDemoCtl.xaml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/TextBoxDemoCtl.xaml.cs b/Net40/HandyControlDemo_Net40/UserControl/Controls/TextBoxDemoCtl.xaml.cs
new file mode 100644
index 00000000..f68246b0
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/TextBoxDemoCtl.xaml.cs
@@ -0,0 +1,10 @@
+namespace HandyControlDemo.UserControl
+{
+ public partial class TextBoxDemoCtl
+ {
+ public TextBoxDemoCtl()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/TimeBarDemoCtl.xaml b/Net40/HandyControlDemo_Net40/UserControl/Controls/TimeBarDemoCtl.xaml
new file mode 100644
index 00000000..af1a3915
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/TimeBarDemoCtl.xaml
@@ -0,0 +1,9 @@
+
+
+
+
+
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/TimeBarDemoCtl.xaml.cs b/Net40/HandyControlDemo_Net40/UserControl/Controls/TimeBarDemoCtl.xaml.cs
new file mode 100644
index 00000000..5b91583c
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/TimeBarDemoCtl.xaml.cs
@@ -0,0 +1,11 @@
+
+namespace HandyControlDemo.UserControl
+{
+ public partial class TimeBarDemoCtl
+ {
+ public TimeBarDemoCtl()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/TimePickerDemoCtl.xaml b/Net40/HandyControlDemo_Net40/UserControl/Controls/TimePickerDemoCtl.xaml
new file mode 100644
index 00000000..840acbb5
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/TimePickerDemoCtl.xaml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/TimePickerDemoCtl.xaml.cs b/Net40/HandyControlDemo_Net40/UserControl/Controls/TimePickerDemoCtl.xaml.cs
new file mode 100644
index 00000000..235af412
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/TimePickerDemoCtl.xaml.cs
@@ -0,0 +1,10 @@
+namespace HandyControlDemo.UserControl
+{
+ public partial class TimePickerDemoCtl
+ {
+ public TimePickerDemoCtl()
+ {
+ InitializeComponent();
+ }
+ }
+}
\ No newline at end of file
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/WaterfallPanelDemoCtl.xaml b/Net40/HandyControlDemo_Net40/UserControl/Controls/WaterfallPanelDemoCtl.xaml
new file mode 100644
index 00000000..9a631afa
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/WaterfallPanelDemoCtl.xaml
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/WaterfallPanelDemoCtl.xaml.cs b/Net40/HandyControlDemo_Net40/UserControl/Controls/WaterfallPanelDemoCtl.xaml.cs
new file mode 100644
index 00000000..3e9c2468
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/WaterfallPanelDemoCtl.xaml.cs
@@ -0,0 +1,10 @@
+namespace HandyControlDemo.UserControl
+{
+ public partial class WaterfallPanelDemoCtl
+ {
+ public WaterfallPanelDemoCtl()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/WindowDemoCtl.xaml b/Net40/HandyControlDemo_Net40/UserControl/Controls/WindowDemoCtl.xaml
new file mode 100644
index 00000000..a79f0c29
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/WindowDemoCtl.xaml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Controls/WindowDemoCtl.xaml.cs b/Net40/HandyControlDemo_Net40/UserControl/Controls/WindowDemoCtl.xaml.cs
new file mode 100644
index 00000000..c24022b7
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Controls/WindowDemoCtl.xaml.cs
@@ -0,0 +1,51 @@
+using System.Windows;
+using HandyControl.Controls;
+using HandyControl.Tools;
+using MessageBox = HandyControl.Controls.MessageBox;
+
+
+namespace HandyControlDemo.UserControl
+{
+ public partial class WindowDemoCtl
+ {
+ public WindowDemoCtl()
+ {
+ InitializeComponent();
+ }
+
+ private void ButtonMessage_OnClick(object sender, RoutedEventArgs e)
+ {
+ MessageBox.Show(Properties.Langs.Lang.GrowlAsk, Properties.Langs.Lang.Title, MessageBoxButton.YesNo, MessageBoxImage.Question);
+ }
+
+ private void ButtonMouseFollow_OnClick(object sender, RoutedEventArgs e)
+ {
+ var picker = SingleOpenHelper.CreateControl();
+ var window = new PopupWindow
+ {
+ PopupElement = picker
+ };
+ picker.SelectedColorChanged += delegate { window.Close(); };
+ picker.Canceled += delegate { window.Close(); };
+ window.Show(ButtonMouseFollow, false);
+ }
+
+ private void ButtonCustomContent_OnClick(object sender, RoutedEventArgs e)
+ {
+ var picker = SingleOpenHelper.CreateControl();
+ var window = new PopupWindow
+ {
+ PopupElement = picker,
+ WindowStartupLocation = WindowStartupLocation.CenterScreen,
+ AllowsTransparency = true,
+ WindowStyle = WindowStyle.None,
+ MinWidth = 0,
+ MinHeight = 0,
+ Title = Properties.Langs.Lang.ColorPicker
+ };
+ picker.SelectedColorChanged += delegate { window.Close(); };
+ picker.Canceled += delegate { window.Close(); };
+ window.Show();
+ }
+ }
+}
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Main/ContributorsView.xaml b/Net40/HandyControlDemo_Net40/UserControl/Main/ContributorsView.xaml
new file mode 100644
index 00000000..198f0dfe
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Main/ContributorsView.xaml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Main/ContributorsView.xaml.cs b/Net40/HandyControlDemo_Net40/UserControl/Main/ContributorsView.xaml.cs
new file mode 100644
index 00000000..435b5770
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Main/ContributorsView.xaml.cs
@@ -0,0 +1,11 @@
+
+namespace HandyControlDemo.UserControl
+{
+ public partial class ContributorsView
+ {
+ public ContributorsView()
+ {
+ InitializeComponent();
+ }
+ }
+}
\ No newline at end of file
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Main/LeftMainContent.xaml b/Net40/HandyControlDemo_Net40/UserControl/Main/LeftMainContent.xaml
new file mode 100644
index 00000000..7f1b2552
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Main/LeftMainContent.xaml
@@ -0,0 +1,364 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Main/LeftMainContent.xaml.cs b/Net40/HandyControlDemo_Net40/UserControl/Main/LeftMainContent.xaml.cs
new file mode 100644
index 00000000..6b0b9d2e
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Main/LeftMainContent.xaml.cs
@@ -0,0 +1,79 @@
+using System.ComponentModel;
+using System.Linq;
+using System.Windows;
+using System.Windows.Controls;
+using HandyControl.Data;
+using HandyControl.Tools.Extension;
+
+
+namespace HandyControlDemo.UserControl
+{
+ ///
+ /// 左侧主内容
+ ///
+ public partial class LeftMainContent
+ {
+ public LeftMainContent()
+ {
+ InitializeComponent();
+ }
+
+ private void TabControl_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
+ {
+ if (e.AddedItems.Count == 0) return;
+ if (e.AddedItems[0] is TabItem tabItem && tabItem.Content is ListBox listBox)
+ {
+ if (listBox.SelectedItem != null)
+ {
+ var item = listBox.SelectedItem;
+ listBox.SelectedIndex = -1;
+ listBox.SelectedItem = item;
+ }
+ }
+ }
+
+ private void ButtonStyleAscending_OnClick(object sender, RoutedEventArgs e)
+ {
+ if (ButtonStyleAscending.IsChecked == true)
+ {
+ listStyle.Items.SortDescriptions.Add(new SortDescription("Content", ListSortDirection.Ascending));
+ }
+ else
+ {
+ listStyle.Items.SortDescriptions.Clear();
+ }
+ }
+
+ private void ButtonControlAscending_OnClick(object sender, RoutedEventArgs e)
+ {
+ if (ButtonControlAscending.IsChecked == true)
+ {
+ listControl.Items.SortDescriptions.Add(new SortDescription("Content", ListSortDirection.Ascending));
+ }
+ else
+ {
+ listControl.Items.SortDescriptions.Clear();
+ }
+ }
+
+ private void SearchBarStyle_OnSearchStarted(object sender, FunctionEventArgs e)
+ {
+ if (e.Info == null) return;
+
+ foreach (var listBoxItem in listStyle.Items.OfType())
+ {
+ listBoxItem.Show(listBoxItem.Content.ToString().ToLower().Contains(e.Info.ToLower()));
+ }
+ }
+
+ private void SearchBarControl_OnSearchStarted(object sender, FunctionEventArgs e)
+ {
+ if (e.Info == null) return;
+
+ foreach (var listBoxItem in listControl.Items.OfType())
+ {
+ listBoxItem.Show(listBoxItem.Content.ToString().ToLower().Contains(e.Info.ToLower()));
+ }
+ }
+ }
+}
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Main/MainContent.xaml b/Net40/HandyControlDemo_Net40/UserControl/Main/MainContent.xaml
new file mode 100644
index 00000000..efe7f50e
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Main/MainContent.xaml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Main/MainContent.xaml.cs b/Net40/HandyControlDemo_Net40/UserControl/Main/MainContent.xaml.cs
new file mode 100644
index 00000000..253c684e
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Main/MainContent.xaml.cs
@@ -0,0 +1,47 @@
+using System.Windows;
+using GalaSoft.MvvmLight.Messaging;
+using HandyControl.Tools.Extension;
+using HandyControlDemo.Data;
+
+
+namespace HandyControlDemo.UserControl
+{
+ ///
+ /// 主内容
+ ///
+ public partial class MainContent
+ {
+ private bool _isFull;
+
+ public MainContent()
+ {
+ InitializeComponent();
+
+ Messenger.Default.Register(this, MessageToken.FullSwitch, FullSwitch);
+ }
+
+ private void FullSwitch(bool isFull)
+ {
+ if (_isFull == isFull) return;
+ _isFull = isFull;
+ if (_isFull)
+ {
+ BorderEffect.Collapse();
+ BorderTitle.Collapse();
+ GridMain.HorizontalAlignment = HorizontalAlignment.Stretch;
+ GridMain.VerticalAlignment = VerticalAlignment.Stretch;
+ GridMain.Margin = new Thickness();
+ PresenterMain.Margin = new Thickness();
+ }
+ else
+ {
+ BorderEffect.Show();
+ BorderTitle.Show();
+ GridMain.HorizontalAlignment = HorizontalAlignment.Center;
+ GridMain.VerticalAlignment = VerticalAlignment.Center;
+ GridMain.Margin = new Thickness(16);
+ PresenterMain.Margin = new Thickness(0, 0, 0, 10);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Main/NoUserContent.xaml b/Net40/HandyControlDemo_Net40/UserControl/Main/NoUserContent.xaml
new file mode 100644
index 00000000..59a43609
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Main/NoUserContent.xaml
@@ -0,0 +1,99 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Net40/HandyControlDemo_Net40/UserControl/Main/NoUserContent.xaml.cs b/Net40/HandyControlDemo_Net40/UserControl/Main/NoUserContent.xaml.cs
new file mode 100644
index 00000000..f765a014
--- /dev/null
+++ b/Net40/HandyControlDemo_Net40/UserControl/Main/NoUserContent.xaml.cs
@@ -0,0 +1,85 @@
+using System;
+using System.Diagnostics;
+using System.Reflection;
+using System.Windows;
+using System.Windows.Controls;
+using GalaSoft.MvvmLight.Messaging;
+using HandyControl.Controls;
+using HandyControl.Data;
+using HandyControlDemo.Data;
+using HandyControlDemo.Tools;
+using HandyControlDemo.Window;
+
+
+namespace HandyControlDemo.UserControl
+{
+ public partial class NoUserContent
+ {
+ public NoUserContent()
+ {
+ InitializeComponent();
+ }
+
+ private void ButtonLangs_OnClick(object sender, RoutedEventArgs e)
+ {
+ if (e.OriginalSource is Button button && button.Tag is string tag)
+ {
+ PopupConfig.IsOpen = false;
+ if (tag.Equals(GlobalData.Config.Lang)) return;
+ Growl.Ask(Properties.Langs.Lang.ChangeLangAsk, b =>
+ {
+ if (!b) return true;
+ GlobalData.Config.Lang = tag;
+ GlobalData.Save();
+ Process.Start(Assembly.GetExecutingAssembly().Location);
+ Environment.Exit(0);
+ return true;
+ });
+ }
+ }
+
+ private void ButtonConfig_OnClick(object sender, RoutedEventArgs e) => PopupConfig.IsOpen = true;
+
+ private void ButtonSkins_OnClick(object sender, RoutedEventArgs e)
+ {
+ if (e.OriginalSource is Button button && button.Tag is SkinType tag)
+ {
+ PopupConfig.IsOpen = false;
+ if (tag.Equals(GlobalData.Config.Skin)) return;
+ GlobalData.Config.Skin = tag;
+ GlobalData.Save();
+ ((App)Application.Current).UpdateSkin(tag);
+ }
+ }
+
+ private void MenuItemLinks_OnClick(object sender, RoutedEventArgs e)
+ {
+ if (e.OriginalSource is MenuItem menuItem && menuItem.Tag is string tag)
+ {
+ Process.Start(tag);
+ }
+ }
+
+ private void MenuItemQQGroup_OnClick(object sender, RoutedEventArgs e)
+ {
+ Messenger.Default.Send