diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
index d5b0367d..150c58a4 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -1,6 +1,9 @@
---
name: Bug report
about: Create a report to help us improve
+title: ''
+labels: ''
+assignees: ''
---
diff --git a/.github/ISSUE_TEMPLATE/custom.md b/.github/ISSUE_TEMPLATE/custom.md
new file mode 100644
index 00000000..48d5f81f
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/custom.md
@@ -0,0 +1,10 @@
+---
+name: Custom issue template
+about: Describe this issue template's purpose here.
+title: ''
+labels: ''
+assignees: ''
+
+---
+
+
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
new file mode 100644
index 00000000..bbcbbe7d
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/feature_request.md
@@ -0,0 +1,20 @@
+---
+name: Feature request
+about: Suggest an idea for this project
+title: ''
+labels: ''
+assignees: ''
+
+---
+
+**Is your feature request related to a problem? Please describe.**
+A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
+
+**Describe the solution you'd like**
+A clear and concise description of what you want to happen.
+
+**Describe alternatives you've considered**
+A clear and concise description of any alternative solutions or features you've considered.
+
+**Additional context**
+Add any other context or screenshots about the feature request here.
diff --git a/.gitignore b/.gitignore
index d51beecc..0c602ad8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,4 +2,5 @@
*.user
*.xml
[Bb]in/
-[Oo]bj/
\ No newline at end of file
+[Oo]bj/
+packages/
\ No newline at end of file
diff --git a/DockBoxResearch/App.xaml b/DockBoxResearch/App.xaml
deleted file mode 100644
index ea3bd154..00000000
--- a/DockBoxResearch/App.xaml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
diff --git a/DockBoxResearch/Controls/DocDockBoxItem.cs b/DockBoxResearch/Controls/DocDockBoxItem.cs
deleted file mode 100644
index aa7afa37..00000000
--- a/DockBoxResearch/Controls/DocDockBoxItem.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-namespace DockBoxResearch.Controls
-{
- public class DocDockBoxItem : DockBoxItemBase
- {
-
- }
-}
\ No newline at end of file
diff --git a/DockBoxResearch/Controls/DocDockBoxItemPanel.cs b/DockBoxResearch/Controls/DocDockBoxItemPanel.cs
deleted file mode 100644
index fb48479c..00000000
--- a/DockBoxResearch/Controls/DocDockBoxItemPanel.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-using System.Windows.Controls;
-
-namespace DockBoxResearch.Controls
-{
- public class DocDockBoxItemPanel : Panel
- {
-
- }
-}
\ No newline at end of file
diff --git a/DockBoxResearch/Controls/DockBox.cs b/DockBoxResearch/Controls/DockBox.cs
deleted file mode 100644
index 38fd4ab8..00000000
--- a/DockBoxResearch/Controls/DockBox.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-using System.Windows.Controls;
-
-namespace DockBoxResearch.Controls
-{
- public class DockBox : Control
- {
-
- }
-}
\ No newline at end of file
diff --git a/DockBoxResearch/Controls/DockBoxItem.cs b/DockBoxResearch/Controls/DockBoxItem.cs
deleted file mode 100644
index 489ad3a4..00000000
--- a/DockBoxResearch/Controls/DockBoxItem.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-namespace DockBoxResearch.Controls
-{
- public class DockBoxItem : DockBoxItemBase
- {
-
- }
-}
\ No newline at end of file
diff --git a/DockBoxResearch/Controls/DockBoxItemBase.cs b/DockBoxResearch/Controls/DockBoxItemBase.cs
deleted file mode 100644
index 6ec22fcb..00000000
--- a/DockBoxResearch/Controls/DockBoxItemBase.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-using System.Windows.Controls;
-
-namespace DockBoxResearch.Controls
-{
- public class DockBoxItemBase : Control
- {
-
- }
-}
\ No newline at end of file
diff --git a/DockBoxResearch/Controls/DockBoxItemPanel.cs b/DockBoxResearch/Controls/DockBoxItemPanel.cs
deleted file mode 100644
index db34c077..00000000
--- a/DockBoxResearch/Controls/DockBoxItemPanel.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-using System.Windows.Controls;
-
-namespace DockBoxResearch.Controls
-{
- public class DockBoxItemPanel : Panel
- {
-
- }
-}
\ No newline at end of file
diff --git a/DockBoxResearch/MainWindow.xaml b/DockBoxResearch/MainWindow.xaml
deleted file mode 100644
index e9779428..00000000
--- a/DockBoxResearch/MainWindow.xaml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
diff --git a/DockBoxResearch/Resources/Themes/Basic/Geometries.xaml b/DockBoxResearch/Resources/Themes/Basic/Geometries.xaml
deleted file mode 100644
index 1ca0c753..00000000
--- a/DockBoxResearch/Resources/Themes/Basic/Geometries.xaml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/Installers/VS2019/HandyControl_VS2019.sln b/Installers/VS2019/HandyControl_VS2019.sln
index 6e2908e9..2c1629ff 100644
--- a/Installers/VS2019/HandyControl_VS2019.sln
+++ b/Installers/VS2019/HandyControl_VS2019.sln
@@ -5,6 +5,10 @@ VisualStudioVersion = 16.0.28803.352
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HandyControl_VS2019", "HandyControl_VS2019\HandyControl_VS2019.csproj", "{3F0F7B9E-C150-4FAA-9274-4F6F0A96B8CA}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WpfApp", "WpfApp\WpfApp.csproj", "{83C70EB1-3A3F-4812-B86C-C7D1936699EB}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WpfCoreApp", "WpfCoreApp\WpfCoreApp.csproj", "{2F6E9FB8-F579-40CF-A151-57F281F08E1B}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -15,6 +19,14 @@ Global
{3F0F7B9E-C150-4FAA-9274-4F6F0A96B8CA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3F0F7B9E-C150-4FAA-9274-4F6F0A96B8CA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3F0F7B9E-C150-4FAA-9274-4F6F0A96B8CA}.Release|Any CPU.Build.0 = Release|Any CPU
+ {83C70EB1-3A3F-4812-B86C-C7D1936699EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {83C70EB1-3A3F-4812-B86C-C7D1936699EB}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {83C70EB1-3A3F-4812-B86C-C7D1936699EB}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {83C70EB1-3A3F-4812-B86C-C7D1936699EB}.Release|Any CPU.Build.0 = Release|Any CPU
+ {2F6E9FB8-F579-40CF-A151-57F281F08E1B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {2F6E9FB8-F579-40CF-A151-57F281F08E1B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {2F6E9FB8-F579-40CF-A151-57F281F08E1B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {2F6E9FB8-F579-40CF-A151-57F281F08E1B}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/Installers/VS2019/HandyControl_VS2019/HandyControl_VS2019.csproj b/Installers/VS2019/HandyControl_VS2019/HandyControl_VS2019.csproj
index a652ad34..ba720bad 100644
--- a/Installers/VS2019/HandyControl_VS2019/HandyControl_VS2019.csproj
+++ b/Installers/VS2019/HandyControl_VS2019/HandyControl_VS2019.csproj
@@ -49,18 +49,6 @@
-
- Always
- true
-
-
- Always
- true
-
-
- Always
- true
-
Designer
@@ -86,7 +74,22 @@
Always
-
+
+
+ {83C70EB1-3A3F-4812-B86C-C7D1936699EB}
+ WpfApp
+ ProjectTemplates
+ false
+ TemplateProjectOutputGroup%3b
+
+
+ {2F6E9FB8-F579-40CF-A151-57F281F08E1B}
+ WpfCoreApp
+ ProjectTemplates
+ false
+ TemplateProjectOutputGroup%3b
+
+
+
\ No newline at end of file
diff --git a/Installers/VS2019/WpfCoreApp/WpfCoreApp.vstemplate b/Installers/VS2019/WpfCoreApp/WpfCoreApp.vstemplate
new file mode 100644
index 00000000..532eaeaf
--- /dev/null
+++ b/Installers/VS2019/WpfCoreApp/WpfCoreApp.vstemplate
@@ -0,0 +1,27 @@
+
+
+
+ HandyControl WPF App(.NET Core)
+ Creates a HandyControl WPF App(.NET Core)
+ icon.ico
+ CSharp
+ true
+ HandyControlProject
+ true
+ csharp
+ windows
+ desktop
+ HandyControl
+ Enabled
+ true
+ true
+
+
+
+ App.xaml
+ App.xaml.cs
+ MainWindow.xaml
+ MainWindow.xaml.cs
+
+
+
\ No newline at end of file
diff --git a/Installers/VS2019/WpfCoreApp/icon.ico b/Installers/VS2019/WpfCoreApp/icon.ico
new file mode 100644
index 00000000..719edf88
Binary files /dev/null and b/Installers/VS2019/WpfCoreApp/icon.ico differ
diff --git a/README.md b/README.md
index a00fe919..8b23f787 100644
--- a/README.md
+++ b/README.md
@@ -1,17 +1,19 @@
-
+
-   [](https://www.nuget.org/packages/HandyControl) [](https://ci.appveyor.com/project/handyorg/handycontrol) [](https://gitter.im/HandyControl/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [](//shang.qq.com/wpa/qunwpa?idkey=a571e5553c9d41e49c4f22f3a8b2865451497a795ff281fedf3285def247efc1)
-[](https://github.com/ghost1372/HandyControl/wiki)
+   [](https://www.nuget.org/packages/HandyControl) [](https://ci.appveyor.com/project/handyorg/handycontrol) [](https://gitter.im/HandyControl/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [](https://github.com/ghost1372/HandyControl/wiki) [](https://www.nuget.org/packages/HandyControl)
# Welcome to HandyControl
-## We're all here
-
-
-
## 面向中国
-### 中文文档(刚开始写)
+### 加入讨论
+
+| | 1群 (已满) | 2群 |
+|-|:-:|:-:|
+| 群号码 | [](//shang.qq.com/wpa/qunwpa?idkey=a571e5553c9d41e49c4f22f3a8b2865451497a795ff281fedf3285def247efc1) | [](//shang.qq.com/wpa/qunwpa?idkey=5c18622a0f6ee07a6f33afa8cdb85b1f72ea50e878271dfcec919c76b55afee7) |
+| 二维码 |  |  |
+
+### 中文文档
[https://handyorg.github.io/handycontrol/](https://handyorg.github.io/handycontrol/)
@@ -21,11 +23,11 @@
* [以HandyControl的名义为慈善事业做贡献](http://www.chinacharityfederation.org/ConfirmDonation/0.html?zhijie=3)
* 为我们购买防脱洗发水
-
+
## Special thanks to
-[](https://www.jetbrains.com/?from=HandyControl)
+[](https://www.jetbrains.com/?from=HandyControl)
## Usage
@@ -57,310 +59,334 @@ Step 4:enjoy coding
## Overview
-
+
-
+
## Latest examples
-### ImageBlock
+### Divider
-
+
-
+### GeometryAnimation
-### Magnifier
+
-
+### SplitButton
-### Card
+
-
+### FloatingBlock
-### ButtonGroup
+
-
+### HoneycombPanel
+
+
## History publication
+### RunningBlock
+
+
+
+### ImageBlock
+
+
+
+
+
+### Magnifier
+
+
+
+### Card
+
+
+
+### ButtonGroup
+
+
+
### Grid
-
+
### SideMenu
-
+
### NotifyIcon
-
+
### Dialog
-
+
### WaveProgressBar
-
+
### Badge
-
+
### Gravatar
-
+
### GoToTop
-
+
### ChatBubble
-
+
### Label
-
+
### Transfer
-
+
### ProgressButton
-
+
### CoverFlow
-
+
### CoverView
-
+
### MessageBox
-
+
### WaterfallPanel
-
+
### Rate
-
+
### BlurWindow
-
+
### FlipClock
-
+
### Shield
-
+
### OutlineText
-
+
### Tag
-
+
### ToolBar
-
+
### Slider
-
+
### CircleProgressBar
-
+
### ButtonStyle
-
+
### ToggleButtonStyle
-
+
### RadioButtonStyle
-
+
### CheckBoxStyle
-
+
### ListBoxStyle
-
+
### TreeViewStyle
-
+
### ListViewStyle
-
+
### DataGrid
-
+
### Now you can switch to dark theme
-
+
### ColorPicker
-
+
### Loading
-
+
### Carousel
-
+
### Pagination
-
+
### Expander
-
+
### TimeBar
-
+
### ImageBrowser
-
+
### PreviewSlider
-
+
### CompareSlider
-
+
-
+
### Growl
-
+
### AnimationPath
-
+
### ProgressBar
-
+
### TabControl
-
+
### TabControlStyle
-
+
### GroupBox
-
+
### StepBar
-
+
### GifImage
-
+
### ContextMenu
-
+
### Calendar
-
+
### Clock
-
+
### CalendarWithClock
-
+
### TextBlock
-
+
### RichTextBoxStyle
-
+
### TextBox
-
+
### ComboBox
-
+
### NumericUpDown
-
+
### SearchBar
-
+
### PasswordBox
-
+
### DataPicker
-
+
### TimePicker
-
+
### DateTimePicker
-
+
### ScrollViewer
-
+
### CirclePanel
-
+
### BorderStyle
-
+
### Brush
-
+
## Switching configuration
-
+
diff --git a/Resources/AnimationPath.gif b/Resources/AnimationPath.gif
deleted file mode 100644
index d58704cf..00000000
Binary files a/Resources/AnimationPath.gif and /dev/null differ
diff --git a/Resources/Badge.png b/Resources/Badge.png
deleted file mode 100644
index 2b015d45..00000000
Binary files a/Resources/Badge.png and /dev/null differ
diff --git a/Resources/BlurWindow.png b/Resources/BlurWindow.png
deleted file mode 100644
index 821cd44d..00000000
Binary files a/Resources/BlurWindow.png and /dev/null differ
diff --git a/Resources/Border.png b/Resources/Border.png
deleted file mode 100644
index 847ec85e..00000000
Binary files a/Resources/Border.png and /dev/null differ
diff --git a/Resources/Brush.png b/Resources/Brush.png
deleted file mode 100644
index 2cfb9b6f..00000000
Binary files a/Resources/Brush.png and /dev/null differ
diff --git a/Resources/Button.png b/Resources/Button.png
deleted file mode 100644
index 4c35b08f..00000000
Binary files a/Resources/Button.png and /dev/null differ
diff --git a/Resources/ButtonGroup.png b/Resources/ButtonGroup.png
deleted file mode 100644
index 25041947..00000000
Binary files a/Resources/ButtonGroup.png and /dev/null differ
diff --git a/Resources/Calendar.jpg b/Resources/Calendar.jpg
deleted file mode 100644
index 4f0648aa..00000000
Binary files a/Resources/Calendar.jpg and /dev/null differ
diff --git a/Resources/CalendarWithClock.png b/Resources/CalendarWithClock.png
deleted file mode 100644
index 01f6832f..00000000
Binary files a/Resources/CalendarWithClock.png and /dev/null differ
diff --git a/Resources/Card.png b/Resources/Card.png
deleted file mode 100644
index df4358b2..00000000
Binary files a/Resources/Card.png and /dev/null differ
diff --git a/Resources/Carousel.gif b/Resources/Carousel.gif
deleted file mode 100644
index 00d30c61..00000000
Binary files a/Resources/Carousel.gif and /dev/null differ
diff --git a/Resources/ChatBubble.png b/Resources/ChatBubble.png
deleted file mode 100644
index f65a021f..00000000
Binary files a/Resources/ChatBubble.png and /dev/null differ
diff --git a/Resources/CheckBox.png b/Resources/CheckBox.png
deleted file mode 100644
index eb409317..00000000
Binary files a/Resources/CheckBox.png and /dev/null differ
diff --git a/Resources/CirclePanel.jpg b/Resources/CirclePanel.jpg
deleted file mode 100644
index d8e8a261..00000000
Binary files a/Resources/CirclePanel.jpg and /dev/null differ
diff --git a/Resources/CircleProgressBar.png b/Resources/CircleProgressBar.png
deleted file mode 100644
index 4de90d35..00000000
Binary files a/Resources/CircleProgressBar.png and /dev/null differ
diff --git a/Resources/Clock.jpg b/Resources/Clock.jpg
deleted file mode 100644
index eb8862cf..00000000
Binary files a/Resources/Clock.jpg and /dev/null differ
diff --git a/Resources/ColorPicker.gif b/Resources/ColorPicker.gif
deleted file mode 100644
index 63ef07e5..00000000
Binary files a/Resources/ColorPicker.gif and /dev/null differ
diff --git a/Resources/ComboBox.jpg b/Resources/ComboBox.jpg
deleted file mode 100644
index 3e8b72db..00000000
Binary files a/Resources/ComboBox.jpg and /dev/null differ
diff --git a/Resources/CompareSlider-h.gif b/Resources/CompareSlider-h.gif
deleted file mode 100644
index 9f01e150..00000000
Binary files a/Resources/CompareSlider-h.gif and /dev/null differ
diff --git a/Resources/CompareSlider-v.gif b/Resources/CompareSlider-v.gif
deleted file mode 100644
index 0ac49668..00000000
Binary files a/Resources/CompareSlider-v.gif and /dev/null differ
diff --git a/Resources/ContextMenu.png b/Resources/ContextMenu.png
deleted file mode 100644
index 4afeeb86..00000000
Binary files a/Resources/ContextMenu.png and /dev/null differ
diff --git a/Resources/CoverFlow.gif b/Resources/CoverFlow.gif
deleted file mode 100644
index 68045629..00000000
Binary files a/Resources/CoverFlow.gif and /dev/null differ
diff --git a/Resources/CoverView.gif b/Resources/CoverView.gif
deleted file mode 100644
index bebb0e05..00000000
Binary files a/Resources/CoverView.gif and /dev/null differ
diff --git a/Resources/DarkTheme.png b/Resources/DarkTheme.png
deleted file mode 100644
index b4b04669..00000000
Binary files a/Resources/DarkTheme.png and /dev/null differ
diff --git a/Resources/DataGrid.png b/Resources/DataGrid.png
deleted file mode 100644
index 9f0cc8a0..00000000
Binary files a/Resources/DataGrid.png and /dev/null differ
diff --git a/Resources/DataPicker.jpg b/Resources/DataPicker.jpg
deleted file mode 100644
index 864385a0..00000000
Binary files a/Resources/DataPicker.jpg and /dev/null differ
diff --git a/Resources/DateTimePicker.png b/Resources/DateTimePicker.png
deleted file mode 100644
index 1f46c5c8..00000000
Binary files a/Resources/DateTimePicker.png and /dev/null differ
diff --git a/Resources/Dialog.png b/Resources/Dialog.png
deleted file mode 100644
index 8bfcd737..00000000
Binary files a/Resources/Dialog.png and /dev/null differ
diff --git a/Resources/Expander.gif b/Resources/Expander.gif
deleted file mode 100644
index 8d0266d5..00000000
Binary files a/Resources/Expander.gif and /dev/null differ
diff --git a/Resources/FlipClock.gif b/Resources/FlipClock.gif
deleted file mode 100644
index f685d7e7..00000000
Binary files a/Resources/FlipClock.gif and /dev/null differ
diff --git a/Resources/GifImage.gif b/Resources/GifImage.gif
deleted file mode 100644
index e883a221..00000000
Binary files a/Resources/GifImage.gif and /dev/null differ
diff --git a/Resources/GoToTop.gif b/Resources/GoToTop.gif
deleted file mode 100644
index 85d3ca8a..00000000
Binary files a/Resources/GoToTop.gif and /dev/null differ
diff --git a/Resources/Gravatar.gif b/Resources/Gravatar.gif
deleted file mode 100644
index efb9e671..00000000
Binary files a/Resources/Gravatar.gif and /dev/null differ
diff --git a/Resources/Grid.gif b/Resources/Grid.gif
deleted file mode 100644
index 9041b842..00000000
Binary files a/Resources/Grid.gif and /dev/null differ
diff --git a/Resources/GroupBox.png b/Resources/GroupBox.png
deleted file mode 100644
index aa93b7c4..00000000
Binary files a/Resources/GroupBox.png and /dev/null differ
diff --git a/Resources/Growl.gif b/Resources/Growl.gif
deleted file mode 100644
index 22faeb20..00000000
Binary files a/Resources/Growl.gif and /dev/null differ
diff --git a/Resources/ImageBlock.gif b/Resources/ImageBlock.gif
deleted file mode 100644
index d64e99d5..00000000
Binary files a/Resources/ImageBlock.gif and /dev/null differ
diff --git a/Resources/ImageBlock.png b/Resources/ImageBlock.png
deleted file mode 100644
index 4157f8a2..00000000
Binary files a/Resources/ImageBlock.png and /dev/null differ
diff --git a/Resources/ImageBrowser.gif b/Resources/ImageBrowser.gif
deleted file mode 100644
index 41dbfcca..00000000
Binary files a/Resources/ImageBrowser.gif and /dev/null differ
diff --git a/Resources/Label.png b/Resources/Label.png
deleted file mode 100644
index abd87bf7..00000000
Binary files a/Resources/Label.png and /dev/null differ
diff --git a/Resources/ListBox.png b/Resources/ListBox.png
deleted file mode 100644
index 57645014..00000000
Binary files a/Resources/ListBox.png and /dev/null differ
diff --git a/Resources/ListView.png b/Resources/ListView.png
deleted file mode 100644
index 40926958..00000000
Binary files a/Resources/ListView.png and /dev/null differ
diff --git a/Resources/Loading.gif b/Resources/Loading.gif
deleted file mode 100644
index b3916949..00000000
Binary files a/Resources/Loading.gif and /dev/null differ
diff --git a/Resources/Magnifier.png b/Resources/Magnifier.png
deleted file mode 100644
index 929ae0c9..00000000
Binary files a/Resources/Magnifier.png and /dev/null differ
diff --git a/Resources/MessageBox.png b/Resources/MessageBox.png
deleted file mode 100644
index cf91e8d2..00000000
Binary files a/Resources/MessageBox.png and /dev/null differ
diff --git a/Resources/NotifyIcon.png b/Resources/NotifyIcon.png
deleted file mode 100644
index 1866c00e..00000000
Binary files a/Resources/NotifyIcon.png and /dev/null differ
diff --git a/Resources/NumericUpDown.png b/Resources/NumericUpDown.png
deleted file mode 100644
index bdf740fb..00000000
Binary files a/Resources/NumericUpDown.png and /dev/null differ
diff --git a/Resources/OutlineText.png b/Resources/OutlineText.png
deleted file mode 100644
index 3f5ec7e1..00000000
Binary files a/Resources/OutlineText.png and /dev/null differ
diff --git a/Resources/Overview-dark.png b/Resources/Overview-dark.png
deleted file mode 100644
index ded33060..00000000
Binary files a/Resources/Overview-dark.png and /dev/null differ
diff --git a/Resources/Overview.png b/Resources/Overview.png
deleted file mode 100644
index d0211362..00000000
Binary files a/Resources/Overview.png and /dev/null differ
diff --git a/Resources/Pagination.gif b/Resources/Pagination.gif
deleted file mode 100644
index 130af623..00000000
Binary files a/Resources/Pagination.gif and /dev/null differ
diff --git a/Resources/PasswordBox.jpg b/Resources/PasswordBox.jpg
deleted file mode 100644
index 4c428068..00000000
Binary files a/Resources/PasswordBox.jpg and /dev/null differ
diff --git a/Resources/PreviewSlider.gif b/Resources/PreviewSlider.gif
deleted file mode 100644
index 270876ad..00000000
Binary files a/Resources/PreviewSlider.gif and /dev/null differ
diff --git a/Resources/ProgressBar.gif b/Resources/ProgressBar.gif
deleted file mode 100644
index 7ba12022..00000000
Binary files a/Resources/ProgressBar.gif and /dev/null differ
diff --git a/Resources/ProgressButton.png b/Resources/ProgressButton.png
deleted file mode 100644
index 9af0542d..00000000
Binary files a/Resources/ProgressButton.png and /dev/null differ
diff --git a/Resources/RadioButton.png b/Resources/RadioButton.png
deleted file mode 100644
index 4f1308e5..00000000
Binary files a/Resources/RadioButton.png and /dev/null differ
diff --git a/Resources/Rate.png b/Resources/Rate.png
deleted file mode 100644
index 1a1f87ca..00000000
Binary files a/Resources/Rate.png and /dev/null differ
diff --git a/Resources/RichTextBox.png b/Resources/RichTextBox.png
deleted file mode 100644
index 2c5245d4..00000000
Binary files a/Resources/RichTextBox.png and /dev/null differ
diff --git a/Resources/ScrollViewer.png b/Resources/ScrollViewer.png
deleted file mode 100644
index 5070ff31..00000000
Binary files a/Resources/ScrollViewer.png and /dev/null differ
diff --git a/Resources/SearchBar.png b/Resources/SearchBar.png
deleted file mode 100644
index fe90bd4d..00000000
Binary files a/Resources/SearchBar.png and /dev/null differ
diff --git a/Resources/Shield.png b/Resources/Shield.png
deleted file mode 100644
index 9d77a7eb..00000000
Binary files a/Resources/Shield.png and /dev/null differ
diff --git a/Resources/SideMenu.png b/Resources/SideMenu.png
deleted file mode 100644
index fc0a655a..00000000
Binary files a/Resources/SideMenu.png and /dev/null differ
diff --git a/Resources/Slider.png b/Resources/Slider.png
deleted file mode 100644
index 9386eb92..00000000
Binary files a/Resources/Slider.png and /dev/null differ
diff --git a/Resources/StepBar.png b/Resources/StepBar.png
deleted file mode 100644
index d32b4d9e..00000000
Binary files a/Resources/StepBar.png and /dev/null differ
diff --git a/Resources/SwitchConfig.png b/Resources/SwitchConfig.png
deleted file mode 100644
index e2430d7d..00000000
Binary files a/Resources/SwitchConfig.png and /dev/null differ
diff --git a/Resources/TabControl.gif b/Resources/TabControl.gif
deleted file mode 100644
index d897226e..00000000
Binary files a/Resources/TabControl.gif and /dev/null differ
diff --git a/Resources/TabControl.png b/Resources/TabControl.png
deleted file mode 100644
index cfc6e8f9..00000000
Binary files a/Resources/TabControl.png and /dev/null differ
diff --git a/Resources/Tag.png b/Resources/Tag.png
deleted file mode 100644
index bed402fb..00000000
Binary files a/Resources/Tag.png and /dev/null differ
diff --git a/Resources/TextBlock.jpg b/Resources/TextBlock.jpg
deleted file mode 100644
index 308fca9c..00000000
Binary files a/Resources/TextBlock.jpg and /dev/null differ
diff --git a/Resources/TextBox.jpg b/Resources/TextBox.jpg
deleted file mode 100644
index 911925c9..00000000
Binary files a/Resources/TextBox.jpg and /dev/null differ
diff --git a/Resources/TimeBar.gif b/Resources/TimeBar.gif
deleted file mode 100644
index 0bba8301..00000000
Binary files a/Resources/TimeBar.gif and /dev/null differ
diff --git a/Resources/TimePicker.jpg b/Resources/TimePicker.jpg
deleted file mode 100644
index 66b4f3ed..00000000
Binary files a/Resources/TimePicker.jpg and /dev/null differ
diff --git a/Resources/ToggleButton.png b/Resources/ToggleButton.png
deleted file mode 100644
index 8741a375..00000000
Binary files a/Resources/ToggleButton.png and /dev/null differ
diff --git a/Resources/ToolBar.png b/Resources/ToolBar.png
deleted file mode 100644
index 7e42d323..00000000
Binary files a/Resources/ToolBar.png and /dev/null differ
diff --git a/Resources/Transfer.png b/Resources/Transfer.png
deleted file mode 100644
index a41ec233..00000000
Binary files a/Resources/Transfer.png and /dev/null differ
diff --git a/Resources/TreeView.png b/Resources/TreeView.png
deleted file mode 100644
index 37481a9c..00000000
Binary files a/Resources/TreeView.png and /dev/null differ
diff --git a/Resources/WaterfallPanel.png b/Resources/WaterfallPanel.png
deleted file mode 100644
index 3448f06e..00000000
Binary files a/Resources/WaterfallPanel.png and /dev/null differ
diff --git a/Resources/WaveProgressBar.gif b/Resources/WaveProgressBar.gif
deleted file mode 100644
index f41db6ce..00000000
Binary files a/Resources/WaveProgressBar.gif and /dev/null differ
diff --git a/Resources/icon.png b/Resources/icon.png
deleted file mode 100644
index 652eb767..00000000
Binary files a/Resources/icon.png and /dev/null differ
diff --git a/Resources/icon.svg b/Resources/icon.svg
deleted file mode 100644
index 641f73c0..00000000
--- a/Resources/icon.svg
+++ /dev/null
@@ -1,2 +0,0 @@
-
\ No newline at end of file
diff --git a/Resources/qq-group.png b/Resources/qq-group.png
deleted file mode 100644
index e4a34d78..00000000
Binary files a/Resources/qq-group.png and /dev/null differ
diff --git a/Resources/qrcode.png b/Resources/qrcode.png
deleted file mode 100644
index 72252708..00000000
Binary files a/Resources/qrcode.png and /dev/null differ
diff --git a/Resources/resharper_logo.png b/Resources/resharper_logo.png
deleted file mode 100644
index 1c1dec6d..00000000
Binary files a/Resources/resharper_logo.png and /dev/null differ
diff --git a/doc/source/_posts/home.md b/doc/source/_posts/home.md
index cec7679d..b1667489 100644
--- a/doc/source/_posts/home.md
+++ b/doc/source/_posts/home.md
@@ -2,14 +2,18 @@
title: 欢迎来到HandyOrg
---
+# 关于我们
+
HandyOrg的宗旨是为用户提供最简单的API。
-我们一直期待着有更多的同学加入。
+我们一直期待有更多的同学加入。
-我们的入坑要求:
+# 入坑要求
- 热爱编码
- 接受目前Handy的代码风格,并尽量遵守
- 项目名必须以Handy为前缀
- 活着
-我们的QQ群:714704041
\ No newline at end of file
+# 参与讨论
+
+[](//shang.qq.com/wpa/qunwpa?idkey=a571e5553c9d41e49c4f22f3a8b2865451497a795ff281fedf3285def247efc1) [](//shang.qq.com/wpa/qunwpa?idkey=5c18622a0f6ee07a6f33afa8cdb85b1f72ea50e878271dfcec919c76b55afee7)
\ No newline at end of file
diff --git a/doc/source/handycontrol/attach/backgroundSwitchElement/index.md b/doc/source/handycontrol/attach/backgroundSwitchElement/index.md
index 2fa310da..9550dfc7 100644
--- a/doc/source/handycontrol/attach/backgroundSwitchElement/index.md
+++ b/doc/source/handycontrol/attach/backgroundSwitchElement/index.md
@@ -2,41 +2,43 @@
title: BackgroundSwitchElement 可切换背景的元素
---
-# 准备工作
-添加`HandyControl`命名空间
-{% code %}
-xmlns:hc="https://handyorg.github.io/handycontrol"
-{% endcode %}
+# 属性
-## MouseHoverBackground `鼠标悬浮背景色`
+| 名称 | 用途 |
+|-|-|
+| MouseHoverBackground | 设置鼠标悬浮背景色 |
+| MouseDownBackground | 设置鼠标按下背景色 |
-该附加属性常用于设置控件在鼠标悬浮时的背景色,在控件的样式或者模板中我们添加如下的触发器代码:
+# 使用案例
-{% code %}
+## MouseHoverBackground 设置鼠标悬浮背景色
+
+在样式或模板中我们添加如下的触发器代码:
+
+```xml
-
+
-{% endcode %}
+```
-随后我们就可以使用该属性了:
+前台使用方式:
-{% code %}
-<目标控件 controls:BackgroundSwitchElement.MouseHoverBackground ="Blue"/>
-{% endcode %}
+```xml
+<目标控件 hc:BackgroundSwitchElement.MouseHoverBackground ="Blue"/>
+```
-## MouseDownBackground `鼠标按下背景色`
+## MouseDownBackground 设置鼠标按下背景色
-该附加属性常用于设置控件在鼠标按下时的背景色,在控件的样式或者模板中我们添加如下的触发器代码:
+在样式或模板中我们添加如下的触发器代码:
-{% code %}
+```xml
-
+
-{% endcode %}
+```
-随后我们就可以使用该属性了:
+前台使用方式:
-{% code %}
-<目标控件 controls:BackgroundSwitchElement.MouseDownBackground ="Yellow"/>
-{% endcode %}
\ No newline at end of file
+```xml
+<目标控件 hc:BackgroundSwitchElement.MouseDownBackground ="Yellow"/>
+```
\ No newline at end of file
diff --git a/doc/source/handycontrol/attach/borderElement/index.md b/doc/source/handycontrol/attach/borderElement/index.md
index ca12ad62..be63409f 100644
--- a/doc/source/handycontrol/attach/borderElement/index.md
+++ b/doc/source/handycontrol/attach/borderElement/index.md
@@ -1,5 +1,31 @@
---
-title: 建设中
+title: BorderElement 具有边框的元素
---
-建设中
\ No newline at end of file
+# 属性
+
+| 名称 | 用途 |
+|-|-|
+| CornerRadius | 设置边框圆角值 |
+| Circular | 是否呈现为圆形 True为是、False为否 |
+
+# 使用案例
+
+## CornerRadius 设置边框圆角值
+
+```xml
+
+
+
+
+```
+
+
+
+## Circular 是否呈现为圆形
+
+借助`BorderElement.Circular`附加属性实现圆形Border
+```xml
+
+```
+
\ No newline at end of file
diff --git a/doc/source/handycontrol/attach/dataGridAttach/index.md b/doc/source/handycontrol/attach/dataGridAttach/index.md
index ca12ad62..718090f4 100644
--- a/doc/source/handycontrol/attach/dataGridAttach/index.md
+++ b/doc/source/handycontrol/attach/dataGridAttach/index.md
@@ -1,5 +1,16 @@
---
-title: 建设中
+title: DataGridAttach DataGrid专用
---
-建设中
\ No newline at end of file
+# 属性
+
+| 名称 | 用途 |
+|-|-|
+| ApplyDefaultStyle | 是否应用默认样式 |
+| TextColumnStyle | 文本列样式 |
+| EditingTextColumnStyle | 编辑时文本列样式 |
+| ComboBoxColumnStyle | 组合框列样式 |
+| EditingComboBoxColumnStyle | 编辑时组合框列样式 |
+| CheckBoxColumnStyle | 复选框列样式 |
+| EditingCheckBoxColumnStyle | 编辑时复选框列样式 |
+| ShowRowNumber | 是否显示行号 |
\ No newline at end of file
diff --git a/doc/source/handycontrol/attach/edgeElement/index.md b/doc/source/handycontrol/attach/edgeElement/index.md
index ca12ad62..846df55e 100644
--- a/doc/source/handycontrol/attach/edgeElement/index.md
+++ b/doc/source/handycontrol/attach/edgeElement/index.md
@@ -1,5 +1,13 @@
---
-title: 建设中
+title: EdgeElement 具有边界内容的元素
---
-建设中
\ No newline at end of file
+# 属性
+
+| 名称 | 用途 |
+|-|-|
+| LeftContent | 左侧边界内容 |
+| TopContent | 顶部边界内容 |
+| RightContent | 右侧边界内容 |
+| BottomContent | 底部边界内容 |
+| ShowEdgeContent | 是否显示边界内容 |
\ No newline at end of file
diff --git a/doc/source/handycontrol/attach/iconElement/index.md b/doc/source/handycontrol/attach/iconElement/index.md
index ca12ad62..fa049c50 100644
--- a/doc/source/handycontrol/attach/iconElement/index.md
+++ b/doc/source/handycontrol/attach/iconElement/index.md
@@ -1,5 +1,24 @@
---
-title: 建设中
+title: IconElement 具有图标的元素
---
-建设中
\ No newline at end of file
+# 属性
+
+| 名称 | 用途 |
+|-|-|
+| Geometry | 几何形状 |
+| Width | 图标宽度 |
+| Height | 图标高度 |
+
+# 使用案例
+
+## Geometry 几何形状
+
+```xml
+
+
+
+
+```
+
+
\ No newline at end of file
diff --git a/doc/source/handycontrol/attach/iconSwitchElement/index.md b/doc/source/handycontrol/attach/iconSwitchElement/index.md
index ca12ad62..adffe69d 100644
--- a/doc/source/handycontrol/attach/iconSwitchElement/index.md
+++ b/doc/source/handycontrol/attach/iconSwitchElement/index.md
@@ -1,5 +1,13 @@
---
-title: 建设中
+title: IconSwitchElement 可切换图标的元素
---
-建设中
\ No newline at end of file
+{% note info no-icon %}
+继承自 [IconElement](https://handyorg.github.io/handycontrol/attach/iconElement/)
+{% endnote %}
+
+# 属性
+
+| 名称 | 用途 |
+|-|-|
+| GeometrySelected | 选中时的几何形状 |
\ No newline at end of file
diff --git a/doc/source/handycontrol/attach/images/Attach.png b/doc/source/handycontrol/attach/images/Attach.png
deleted file mode 100644
index efda668e..00000000
Binary files a/doc/source/handycontrol/attach/images/Attach.png and /dev/null differ
diff --git a/doc/source/handycontrol/attach/index.md b/doc/source/handycontrol/attach/index.md
index c8aa438a..7b459d0e 100644
--- a/doc/source/handycontrol/attach/index.md
+++ b/doc/source/handycontrol/attach/index.md
@@ -4,6 +4,6 @@ title: 附加属性
附加属性源码在Controls / Attach文件夹中:
-
+
以`Element`结尾的类,可以为所有的控件设置一些共有的属性,以`Attach`结尾的类,只能为一种控件设置相关的属性。
\ No newline at end of file
diff --git a/doc/source/handycontrol/basic_xaml/converters/index.md b/doc/source/handycontrol/basic_xaml/converters/index.md
index 8b936e70..33f62bde 100644
--- a/doc/source/handycontrol/basic_xaml/converters/index.md
+++ b/doc/source/handycontrol/basic_xaml/converters/index.md
@@ -22,13 +22,21 @@ title: 转换器
该转换器会将布尔数组转换为`Visibility`,当数组内全部为`true`时,返回`Visible`,否则返回`Collapse`。
+# BorderCircularClipConverter
+
+该转换器为Border专用,接受一个object数组,该数组长度为3,分别对应Border的长、宽和圆角半径,它会返回一个圆形几何形状作为Clip来剪裁Border。
+
# BorderCircularConverter
该转换器为Border专用,接受`Border`的长和宽合成的一个整型数组,返回它们中最小值的一半,作为圆形Border的半径。
# BorderClipConverter
-该转换器为Border专用,接受一个object数组,该数组长度为3,分别对应Border的长、宽和圆角半径,它会返回一个圆形几何形状作为Clip来剪裁Border。
+该转换器为Border专用,接受一个object数组,该数组长度为3,分别对应Border的长、宽和圆角半径,它会返回一个圆角矩形作为Clip来剪裁Border。
+
+# ColLayoutConverter
+
+该转换器用于xaml设计时,主要功能是将字符串转换为有效的`ColLayout`值。
# Color2ChannelAConverter(内部使用)
@@ -38,6 +46,10 @@ title: 转换器
该转换器会将`SolidColorBrush`转换为16进制字符串形式(带“#”)。
+# CornerRadiusSplitConverter
+
+该转换器需要提供一个字符串作为参数,该字符串的一般形式为:`[0/1],[0/1],[0/1],[0/1]`,4个以逗号分隔的值分别对应`CornerRadius`的`Left`、`Top`,`Right`,`Bottom`属性,当值为1则返回对应属性的值,否则返回0。
+
# Int2StrConverter
该转换器需要提供一个字符串作为参数,该字符串的一般形式为:`[字符串0];[字符串1];...[字符串n]`,转换器会将一个整型的值作为索引,来获取指定位置的字符串并返回。
@@ -46,6 +58,10 @@ title: 转换器
该转换器会将长整型转换为文件大小的字符串。
+# Number2PercentageConverter
+
+该转换器接受一个长度为2的数字数组,返回两数的百分比值。
+
# Object2BooleanConverter
如果该转换器获取到的值为`null`则返回`false`,否则返回`true`。
@@ -54,6 +70,10 @@ title: 转换器
如果该转换器获取到的值为`null`则返回`Collapsed`,否则返回`Visible`。
+# RectangleCircularConverter
+
+该转换器为Rectangle专用,接受`Rectangle`的长和宽合成的一个整型数组,返回它们中最小值的一半,作为圆形Rectangle的半径。
+
# String2VisibilityConverter
该转换器接受一个字符串,如果该字符串为空或者为null,则返回`Collapse`,否则返回`Visible`。
@@ -62,6 +82,10 @@ title: 转换器
该转换器情况与`String2VisibilityConverter`相反。
+# ThicknessSplitConverter
+
+该转换器需要提供一个字符串作为参数,该字符串的一般形式为:`[0/1],[0/1],[0/1],[0/1]`,4个以逗号分隔的值分别对应`Thickness`的`Left`、`Top`,`Right`,`Bottom`属性,当值为1则返回对应属性的值,否则返回0。
+
# TreeViewItemMarginConverter(内部使用)
该转换器用于为TreeViewItem提供适当的左边距。
diff --git a/doc/source/handycontrol/basic_xaml/images/Basic_Structure.png b/doc/source/handycontrol/basic_xaml/images/Basic_Structure.png
deleted file mode 100644
index a6a25bec..00000000
Binary files a/doc/source/handycontrol/basic_xaml/images/Basic_Structure.png and /dev/null differ
diff --git a/doc/source/handycontrol/basic_xaml/index.md b/doc/source/handycontrol/basic_xaml/index.md
index 273f7885..8d187f3b 100644
--- a/doc/source/handycontrol/basic_xaml/index.md
+++ b/doc/source/handycontrol/basic_xaml/index.md
@@ -3,7 +3,7 @@ title: 基础xaml定义
---
基础xaml定义都在Basic文件夹中,其内部结构如下:
-
+
对它们的描述如下表所示:
diff --git a/doc/source/handycontrol/extend_controls/growl/index.md b/doc/source/handycontrol/extend_controls/growl/index.md
index 8a7b8c0e..744b2956 100644
--- a/doc/source/handycontrol/extend_controls/growl/index.md
+++ b/doc/source/handycontrol/extend_controls/growl/index.md
@@ -6,7 +6,7 @@ title: Growl 信息通知
# 控件效果
-
+
# 准备工作
diff --git a/doc/source/handycontrol/images/Build_Config.png b/doc/source/handycontrol/images/Build_Config.png
deleted file mode 100644
index 8568462f..00000000
Binary files a/doc/source/handycontrol/images/Build_Config.png and /dev/null differ
diff --git a/doc/source/handycontrol/images/Net_GE45_Structure.png b/doc/source/handycontrol/images/Net_GE45_Structure.png
deleted file mode 100644
index 86c385a6..00000000
Binary files a/doc/source/handycontrol/images/Net_GE45_Structure.png and /dev/null differ
diff --git a/doc/source/handycontrol/images/Project_Structure.png b/doc/source/handycontrol/images/Project_Structure.png
deleted file mode 100644
index e7a9f4ed..00000000
Binary files a/doc/source/handycontrol/images/Project_Structure.png and /dev/null differ
diff --git a/doc/source/handycontrol/images/Sub_Folder_Structure.png b/doc/source/handycontrol/images/Sub_Folder_Structure.png
deleted file mode 100644
index 29f49557..00000000
Binary files a/doc/source/handycontrol/images/Sub_Folder_Structure.png and /dev/null differ
diff --git a/doc/source/handycontrol/index.md b/doc/source/handycontrol/index.md
index 407206a8..8c17cc52 100644
--- a/doc/source/handycontrol/index.md
+++ b/doc/source/handycontrol/index.md
@@ -2,17 +2,11 @@
title: 欢迎使用HandyControl
---
-HandyControl是一套WPF控件库,它几乎重写了所有原生样式,同时包含50多款额外的控件(正逐步增加)。
+HandyControl是一套WPF控件库,它几乎重写了所有原生样式,同时包含60余款自定义控件(正逐步增加)。
# 要求
-- 使用要求
-.Net >= 4.0
-OS >= win7
-
-- 编译要求
-IDE >= vs2019
-C# >= 7.3
+   
# 下载
@@ -39,7 +33,7 @@ Github上一般每天都有更新,相对而言不适合用于生产。
## 整体结构
从Github上克隆好源码后,进入src文件夹,该文件夹结构如下:
-
+
这里一共有4个解决方案sln文件。
@@ -48,14 +42,14 @@ Github上一般每天都有更新,相对而言不适合用于生产。
`Shared`文件夹用于存放共享项目的代码
图中五个文件夹内部各包含两个子文件夹,例如在Shared中还包含两个子文件夹:
-
+
它们分别存放控件源码和控件示例源码。
## 源码结构
-我们以HandyControl_Net_GE45.sln为示例进行说明,使用VS2017打开该解决方案:
-
+我们以HandyControl.sln为示例进行说明,使用VS2019打开该解决方案:
+
如果要启动示例,查看控件效果,请将HandyControlDemo_[指定的项目类型]作为启动项。
@@ -82,10 +76,8 @@ Controls中的每个控件一般都能在Themes中找到对应的xaml定义。
# 编译源码
{% note warning %}
-编译前请确认你的开发环境是否符合使用要求。
+编译前请确认你的开发环境是否符合要求。
{% endnote %}
-{% note info %}
打开HandyControl.sln,在解决方案配置下拉框中选择指定的环境进行编译:
-
-{% endnote %}
\ No newline at end of file
+
\ No newline at end of file
diff --git a/doc/source/handycontrol/langs/index.md b/doc/source/handycontrol/langs/index.md
index 567e3917..e33f0268 100644
--- a/doc/source/handycontrol/langs/index.md
+++ b/doc/source/handycontrol/langs/index.md
@@ -4,7 +4,7 @@ title: 国际化
# 使用方式
-可通过`ConfigHelper.Instance.SetLang(string lang)`指定需要使用的语言包,默认使用zh-cn。
+可通过`ConfigHelper.Instance.SetLang(string lang)`指定需要使用的语言包,默认使用简体中文(zh-cn)。
控件库自带的语言包一般为控件库内部使用,但用户也可以通过以下两种方式使用:
@@ -21,9 +21,9 @@ title: 国际化
# 扩展
-控件库自带zh-cn和en两份语言包,默认为zh-cn:
+控件库自带的语言包包括简体中文(zh-cn)、英文(en)、波斯语(fa)、法语(fr),默认为简体中文(zh-cn):
-
+
如果需要可自行扩展,这里推荐使用开源插件:[ResXManager](https://marketplace.visualstudio.com/items?itemName=TomEnglert.ResXManager),来维护所有的语言包。
diff --git a/doc/source/handycontrol/native_controls/border/index.md b/doc/source/handycontrol/native_controls/border/index.md
index 63da2560..444d5c9f 100644
--- a/doc/source/handycontrol/native_controls/border/index.md
+++ b/doc/source/handycontrol/native_controls/border/index.md
@@ -6,7 +6,7 @@ title: Border 边框
此样式用于包裹一个控件区域,配合基础xaml定义中的几个DropShadowEffect资源可制作如下效果:
-
+
以上效果的xaml代码如下:
diff --git a/doc/source/handycontrol/native_controls/calendar/index.md b/doc/source/handycontrol/native_controls/calendar/index.md
index 6f7f0482..1ffb9210 100644
--- a/doc/source/handycontrol/native_controls/calendar/index.md
+++ b/doc/source/handycontrol/native_controls/calendar/index.md
@@ -12,5 +12,5 @@ title: Calendar 日历
{% code %}
{% endcode %}
-
+
{% endnote %}
\ No newline at end of file
diff --git a/doc/source/handycontrol/native_controls/checkBox/index.md b/doc/source/handycontrol/native_controls/checkBox/index.md
index 4218e941..1ad33b14 100644
--- a/doc/source/handycontrol/native_controls/checkBox/index.md
+++ b/doc/source/handycontrol/native_controls/checkBox/index.md
@@ -19,5 +19,5 @@ title: CheckBox 复选框
{% endcode %}
-
+
{% endnote %}
\ No newline at end of file
diff --git a/doc/source/handycontrol/native_controls/contextMenu/index.md b/doc/source/handycontrol/native_controls/contextMenu/index.md
index fdcf837e..0c78954a 100644
--- a/doc/source/handycontrol/native_controls/contextMenu/index.md
+++ b/doc/source/handycontrol/native_controls/contextMenu/index.md
@@ -18,5 +18,5 @@ title: ContextMenu 上下文菜单
{% endcode %}
-
+
{% endnote %}
\ No newline at end of file
diff --git a/doc/source/handycontrol/native_controls/dataGrid/index.md b/doc/source/handycontrol/native_controls/dataGrid/index.md
index 7ea36f18..2372b457 100644
--- a/doc/source/handycontrol/native_controls/dataGrid/index.md
+++ b/doc/source/handycontrol/native_controls/dataGrid/index.md
@@ -2,6 +2,19 @@
title: DataGrid 数据表格
---
+# 相关样式
+
+| style名称 | 所属类型 | 用途描述 |
+| - | - | - |
+| RowHeaderGripperStyle | Thumb | 行标题拖拽条样式 |
+| ColumnHeaderGripperStyle | Thumb | 列标题拖拽条样式 |
+| DataGridCellStyle | DataGridCell | 单元格样式 |
+| DataGridRowStyle | DataGridRow | 行样式 |
+| DataGridColumnHeaderStyle | DataGridColumnHeader | 列标题样式 |
+| DataGridRowHeaderStyle | DataGridRowHeader | 行标题样式 |
+| TextBlockComboBoxStyle | ComboBox | ComboBox非编辑模式样式 |
+| DataGridTextColumnStyle | TextBlock | 默认文本样式 |
+
{% note info no-icon %}
用例:
@@ -28,5 +41,36 @@ title: DataGrid 数据表格
{% endcode %}
-
-{% endnote %}
\ No newline at end of file
+
+{% endnote %}
+
+# FAQ
+{% note warning no-icon%}
+对于文本显示列`DataGridTextColumn`需要设定文本内容`水平居中`或者`水平居右`,而不是HandyControl中设定的样式默认显示为`居左`时,需要继承`DataGridCellStyle`重写`HorizontalContentAlignment` 属性为`Center` 或`Right` 需要注意的是,此方式仅仅适用于引入了HandControl资源样式的项目,普通原生DataGrid使用该方式无效。
+
+{% endnote %}
+
+用例如下:
+
+{% code %}
+
+样式:
+
+
+
+xaml中的使用:
+
+
+
+
+
+
+
+
+{% endcode %}
+
+效果如下:
+
+
diff --git a/doc/source/handycontrol/native_controls/images/DataGrid-Warning01.png b/doc/source/handycontrol/native_controls/images/DataGrid-Warning01.png
new file mode 100644
index 00000000..f1d39abe
Binary files /dev/null and b/doc/source/handycontrol/native_controls/images/DataGrid-Warning01.png differ
diff --git a/doc/source/handycontrol/tnx/index.md b/doc/source/handycontrol/tnx/index.md
index 129c2af4..e06e9b33 100644
--- a/doc/source/handycontrol/tnx/index.md
+++ b/doc/source/handycontrol/tnx/index.md
@@ -4,15 +4,11 @@ title: 鸣谢
# 感谢以下Coder提供代码贡献
-






-
-# 感谢以下User提供使用建议
-
-
+






# 感谢以下组织机构提供开源许可
-
+
# 感谢以下捐赠者
diff --git a/doc/themes/next/_config.yml b/doc/themes/next/_config.yml
index 92a82f52..274fb887 100644
--- a/doc/themes/next/_config.yml
+++ b/doc/themes/next/_config.yml
@@ -180,7 +180,7 @@ menu:
BackgroundSwitchElement 可切换背景的元素: /backgroundSwitchElement/ ||
BorderElement 具有边框的元素: /borderElement/ ||
DataGridAttach DataGrid专用: /dataGridAttach/ ||
- EdgeElement: /edgeElement/ ||
+ EdgeElement 具有边界内容的元素: /edgeElement/ ||
IconElement 具有图标的元素: /iconElement/ ||
IconSwitchElement 可切换图标的元素: /iconSwitchElement/ ||
InfoElement 信息元素: /infoElement/ ||
@@ -319,10 +319,12 @@ site_state: false
social:
GitHub: https://github.com/HandyOrg || github
E-Mail: mailto:handycontrol@qq.com || envelope
- QQ: //shang.qq.com/wpa/qunwpa?idkey=a571e5553c9d41e49c4f22f3a8b2865451497a795ff281fedf3285def247efc1 || qq
+ QQ群1: //shang.qq.com/wpa/qunwpa?idkey=a571e5553c9d41e49c4f22f3a8b2865451497a795ff281fedf3285def247efc1 || qq
+ QQ群2: //shang.qq.com/wpa/qunwpa?idkey=5c18622a0f6ee07a6f33afa8cdb85b1f72ea50e878271dfcec919c76b55afee7 || qq
Nuget: https://www.nuget.org/packages/HandyControl || code
Gitter: https://gitter.im/HandyControl/Lobby || commenting
Wiki-en: https://github.com/ghost1372/HandyControl/wiki || book
+ Wiki-fr: https://github.com/TheKeytrap/HandyControl/wiki || book
social_icons:
enable: true
diff --git a/doc/themes/next/source/css/_custom/custom.styl b/doc/themes/next/source/css/_custom/custom.styl
index 5a664b44..1821a436 100644
--- a/doc/themes/next/source/css/_custom/custom.styl
+++ b/doc/themes/next/source/css/_custom/custom.styl
@@ -3,4 +3,20 @@
margin: 3px;
display: inline;
padding: 3px !important;
+}
+
+.post-body h2 {
+ font-size: 1.45em;
+ border-bottom: 0px solid #eee;
+}
+
+a, span.exturl {
+ overflow-wrap: break-word;
+ word-wrap: break-word;
+ background-color: transparent;
+ color: #555;
+ text-decoration: none;
+ outline: none;
+ border-bottom: 0px solid #999;
+ cursor: pointer;
}
\ No newline at end of file
diff --git a/src/Core_30/HandyControlDemo_Core_30/HandyControlDemo_Core30.csproj b/src/Core_30/HandyControlDemo_Core_30/HandyControlDemo_Core30.csproj
index 036f5423..9b2ac39f 100644
--- a/src/Core_30/HandyControlDemo_Core_30/HandyControlDemo_Core30.csproj
+++ b/src/Core_30/HandyControlDemo_Core_30/HandyControlDemo_Core30.csproj
@@ -5,13 +5,14 @@
true
HandyControlDemo
HandyControlDemo
- 2.1.0
+ 2.3.0
..\..\Shared\HandyControlDemo_Shared\Resources\Img\icon.ico
Debug;Release
Copyright © HandyOrg 2018-2019
- 2.1.0.0
- 2.1.0.0
- latest
+ 2.3.0.0
+ 2.3.0.0
+ 8.0
+ HandyOrg
TRACE;Core
@@ -23,6 +24,7 @@
+
@@ -47,6 +49,39 @@
+
+ Resources\Img\Cover.png
+
+
+ Resources\Img\QQ\1.gif
+
+
+ Resources\Img\QQ\2.gif
+
+
+ Resources\Img\QQ\3.gif
+
+
+ Resources\Img\QQ\4.gif
+
+
+ Resources\Img\QQ\5.gif
+
+
+ Resources\Img\QQ\6.gif
+
+
+ Resources\Img\QQ\7.gif
+
+
+ Resources\Img\QQ\8.gif
+
+
+ Resources\Img\QQ\9.gif
+
+
+ Resources\Img\QQ\10.gif
+
Resources\Img\1.jpg
@@ -130,6 +165,12 @@
Resources\Img\Flag\en.png
+
+
+ Resources\Img\Flag\fa.png
+
+
+ Resources\Img\Flag\fr.png
Resources\Img\icon-white.ico
@@ -137,6 +178,12 @@
Resources\Img\icon.ico
+
+ Resources\Img\qq_group_1.jpg
+
+
+ Resources\Img\qq_group_2.jpg
+
Resources\Img\LeftMainContent\Animation_16x.png
@@ -323,9 +370,6 @@
Resources\Img\LeftMainContent\GridPane_16x.png
-
- Resources\Img\qq-group.jpg
-
Resources\Img\under_construction.gif
@@ -350,6 +394,9 @@
Resources\fabric-icons.ttf
+
+ Resources\Registry.txt
+
Resources\Img\LeftMainContent\brackets_Square_16xLG.png
@@ -362,13 +409,43 @@
Resources\Img\LeftMainContent\ImageStack_16x.png
+
+ Resources\Img\LeftMainContent\Dynamic_16x.png
+
+
+ Resources\Img\LeftMainContent\PolygonHexagon_16x.png
+
+
+ Resources\Img\LeftMainContent\HandyControl.png
+
+
+ Resources\Img\LeftMainContent\Procedure_16x.png
+
Resources\Img\Dance.png
+
+ Resources\Img\LeftMainContent\thumbs_up.png
+
+
+ Resources\Img\LeftMainContent\SplitButton_16x.png
+
+
+ Resources\Img\LeftMainContent\DataGenerator_16x.png
+
+
+ Resources\Img\LeftMainContent\DottedSplitter_16x.png
+
Properties\Langs\Lang.en.resx
+
+
+ Properties\Langs\Lang.fa.resx
+
+
+ Properties\Langs\Lang.fr.resx
Properties\Langs\Lang.resx
@@ -389,4 +466,4 @@
-
\ No newline at end of file
+
diff --git a/src/Core_30/HandyControl_Core_30/HandyControl_Core_30.csproj b/src/Core_30/HandyControl_Core_30/HandyControl_Core_30.csproj
index 0bd1c286..19e745b0 100644
--- a/src/Core_30/HandyControl_Core_30/HandyControl_Core_30.csproj
+++ b/src/Core_30/HandyControl_Core_30/HandyControl_Core_30.csproj
@@ -4,14 +4,15 @@
true
HandyControl
HandyControl
- 2.1.0
- 2.1.0.0
+ 2.3.0
+ 2.3.0.0
false
false
Copyright © HandyOrg 2018-2019
Contains some commonly used simple WPF controls
Debug;Release
- latest
+ 8.0
+ HandyOrg
TRACE;Core
@@ -31,6 +32,12 @@
Properties\Langs\Lang.en.resx
+
+
+ Properties\Langs\Lang.fa.resx
+
+
+ Properties\Langs\Lang.fr.resx
Properties\Langs\Lang.resx
diff --git a/src/Core_30/HandyControl_Core_30/Themes/Styles/Base/ComboBoxBaseStyle.xaml b/src/Core_30/HandyControl_Core_30/Themes/Styles/Base/ComboBoxBaseStyle.xaml
index d8f26026..f57cf567 100644
--- a/src/Core_30/HandyControl_Core_30/Themes/Styles/Base/ComboBoxBaseStyle.xaml
+++ b/src/Core_30/HandyControl_Core_30/Themes/Styles/Base/ComboBoxBaseStyle.xaml
@@ -1,8 +1,8 @@
+ xmlns:interactivity="clr-namespace:HandyControl.Interactivity"
+ xmlns:system="clr-namespace:System;assembly=mscorlib">
@@ -22,7 +22,7 @@
-
+
@@ -121,6 +121,9 @@
+
+
+
@@ -132,7 +135,7 @@
-
+
@@ -184,6 +187,9 @@
+
+
+
@@ -193,13 +199,13 @@
-
+
-
+
@@ -245,6 +251,9 @@
+
+
+
@@ -334,7 +343,7 @@
-
+
@@ -398,13 +407,13 @@
-
+
-
+
@@ -528,10 +537,11 @@
-
-
\ No newline at end of file
diff --git a/src/Core_30/HandyControl_Core_30/Themes/Styles/Window.xaml b/src/Core_30/HandyControl_Core_30/Themes/Styles/Window.xaml
index 67b72f45..3c0a882e 100644
--- a/src/Core_30/HandyControl_Core_30/Themes/Styles/Window.xaml
+++ b/src/Core_30/HandyControl_Core_30/Themes/Styles/Window.xaml
@@ -132,7 +132,7 @@
-
+
diff --git a/src/Net_40/HandyControlDemo_Net_40/HandyControlDemo_Net_40.csproj b/src/Net_40/HandyControlDemo_Net_40/HandyControlDemo_Net_40.csproj
index 6f92bb4a..76b42023 100644
--- a/src/Net_40/HandyControlDemo_Net_40/HandyControlDemo_Net_40.csproj
+++ b/src/Net_40/HandyControlDemo_Net_40/HandyControlDemo_Net_40.csproj
@@ -26,7 +26,7 @@
prompt
4
v4.0
- latest
+ 8.0
AnyCPU
@@ -37,6 +37,7 @@
prompt
4
v4.0
+ 8.0
..\..\Shared\HandyControlDemo_Shared\Resources\Img\icon.ico
@@ -57,7 +58,7 @@
- 5.4.1
+ 5.4.1.1
11.0.2
@@ -83,6 +84,36 @@
+
+ Resources\Img\QQ\1.gif
+
+
+ Resources\Img\QQ\2.gif
+
+
+ Resources\Img\QQ\3.gif
+
+
+ Resources\Img\QQ\4.gif
+
+
+ Resources\Img\QQ\5.gif
+
+
+ Resources\Img\QQ\6.gif
+
+
+ Resources\Img\QQ\7.gif
+
+
+ Resources\Img\QQ\8.gif
+
+
+ Resources\Img\QQ\9.gif
+
+
+ Resources\Img\QQ\10.gif
+
Resources\Img\1.jpg
@@ -167,6 +198,12 @@
Resources\Img\Flag\en.png
+
+ Resources\Img\Flag\fa.png
+
+
+ Resources\Img\Flag\fr.png
+
Resources\Img\icon-white.ico
@@ -353,9 +390,6 @@
Resources\Img\LeftMainContent\WindowsForm_16x.png
-
- Resources\Img\qq-group.jpg
-
Resources\Img\under_construction.gif
@@ -370,6 +404,12 @@
Properties\Langs\Lang.en.resx
+
+ Properties\Langs\Lang.fa.resx
+
+
+ Properties\Langs\Lang.fr.resx
+
Properties\Langs\Lang.resx
PublicResXFileCodeGenerator
@@ -380,6 +420,9 @@
Resources\fabric-icons.ttf
+
+ Resources\Registry.txt
+
@@ -387,6 +430,39 @@
TextTemplatingFileGenerator
MessageToken.cs
+
+ Resources\Img\Cover.png
+
+
+ Resources\Img\LeftMainContent\DottedSplitter_16x.png
+
+
+ Resources\Img\qq_group_1.jpg
+
+
+ Resources\Img\qq_group_2.jpg
+
+
+ Resources\Img\LeftMainContent\DataGenerator_16x.png
+
+
+ Resources\Img\LeftMainContent\SplitButton_16x.png
+
+
+ Resources\Img\LeftMainContent\thumbs_up.png
+
+
+ Resources\Img\LeftMainContent\Procedure_16x.png
+
+
+ Resources\Img\LeftMainContent\HandyControl.png
+
+
+ Resources\Img\LeftMainContent\PolygonHexagon_16x.png
+
+
+ Resources\Img\LeftMainContent\Dynamic_16x.png
+
Resources\Img\Dance.png
diff --git a/src/Net_40/HandyControl_Net_40/HandyControl_Net_40.csproj b/src/Net_40/HandyControl_Net_40/HandyControl_Net_40.csproj
index 0ea83fbe..28017834 100644
--- a/src/Net_40/HandyControl_Net_40/HandyControl_Net_40.csproj
+++ b/src/Net_40/HandyControl_Net_40/HandyControl_Net_40.csproj
@@ -23,7 +23,7 @@
prompt
4
v4.0
- latest
+ 8.0
pdbonly
@@ -34,6 +34,7 @@
4
bin\Release\HandyControl.xml
v4.0
+ 8.0
@@ -69,10 +70,6 @@
Designer
XamlIntelliSenseFileGenerator
-
- Designer
- XamlIntelliSenseFileGenerator
-
Designer
XamlIntelliSenseFileGenerator
@@ -95,6 +92,12 @@
Properties\Langs\Lang.en.resx
+
+ Properties\Langs\Lang.fa.resx
+
+
+ Properties\Langs\Lang.fr.resx
+
Properties\Langs\Lang.resx
PublicResXFileCodeGenerator
diff --git a/src/Net_40/HandyControl_Net_40/Themes/Styles/Base/ComboBoxBaseStyle.xaml b/src/Net_40/HandyControl_Net_40/Themes/Styles/Base/ComboBoxBaseStyle.xaml
index afbb2390..345a0d45 100644
--- a/src/Net_40/HandyControl_Net_40/Themes/Styles/Base/ComboBoxBaseStyle.xaml
+++ b/src/Net_40/HandyControl_Net_40/Themes/Styles/Base/ComboBoxBaseStyle.xaml
@@ -1,11 +1,10 @@
+ xmlns:interactivity="clr-namespace:HandyControl.Interactivity"
+ xmlns:system="clr-namespace:System;assembly=mscorlib">
-
@@ -21,9 +20,9 @@
-
-
-
+
+
+
@@ -54,9 +53,9 @@
-
-
-
+
+
+
@@ -83,12 +82,12 @@
-
-
+
+
@@ -115,6 +114,9 @@
+
+
+
@@ -126,7 +128,7 @@
-
+
@@ -139,12 +141,12 @@
-
-
+
+
-
-
+
+
@@ -171,6 +173,9 @@
+
+
+
@@ -180,25 +185,25 @@
-
+
-
+
-
-
+
+
-
-
+
+
@@ -225,6 +230,9 @@
+
+
+
@@ -261,17 +269,17 @@
-
-
+
+
-
-
+
+
-
+
@@ -307,7 +315,7 @@
-
+
@@ -320,12 +328,12 @@
-
-
+
+
-
-
+
+
@@ -364,25 +372,25 @@
-
+
-
+
-
-
+
+
-
-
+
+
@@ -470,11 +478,11 @@
-
+
-
+
@@ -487,10 +495,11 @@
-
-
\ No newline at end of file
diff --git a/src/Net_GE45/HandyControl_Net_GE45/Themes/Styles/Window.xaml b/src/Net_GE45/HandyControl_Net_GE45/Themes/Styles/Window.xaml
index f071fd22..c9750cf5 100644
--- a/src/Net_GE45/HandyControl_Net_GE45/Themes/Styles/Window.xaml
+++ b/src/Net_GE45/HandyControl_Net_GE45/Themes/Styles/Window.xaml
@@ -132,7 +132,7 @@
-
+
diff --git a/src/Shared/HandyControlDemo_Shared/App.xaml b/src/Shared/HandyControlDemo_Shared/App.xaml
index cdd77978..4a95a856 100644
--- a/src/Shared/HandyControlDemo_Shared/App.xaml
+++ b/src/Shared/HandyControlDemo_Shared/App.xaml
@@ -6,6 +6,7 @@
xmlns:d1P1="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:data="clr-namespace:HandyControlDemo.Data"
+ xmlns:hc="https://handyorg.github.io/handycontrol"
d1P1:Ignorable="d"
StartupUri="MainWindow.xaml">
@@ -35,6 +36,17 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Shared/HandyControlDemo_Shared/App.xaml.cs b/src/Shared/HandyControlDemo_Shared/App.xaml.cs
index 08ba9c5b..cd97b41f 100644
--- a/src/Shared/HandyControlDemo_Shared/App.xaml.cs
+++ b/src/Shared/HandyControlDemo_Shared/App.xaml.cs
@@ -1,6 +1,10 @@
using System;
+using System.Diagnostics;
+using System.Diagnostics.CodeAnalysis;
+using System.IO;
using System.Net;
-using System.Security.Authentication;
+using System.Security.Authentication;
+using System.Threading;
using System.Windows;
using HandyControl.Data;
using HandyControl.Tools;
@@ -9,15 +13,42 @@ using HandyControlDemo.Tools;
namespace HandyControlDemo
{
- ///
- /// App.xaml 的交互逻辑
- ///
public partial class App
{
+ // ReSharper disable once NotAccessedField.Local
+ [SuppressMessage("代码质量", "IDE0052:删除未读的私有成员", Justification = "<挂起>")]
+ private static Mutex AppMutex;
+
+ public App()
+ {
+ AppMutex = new Mutex(true, "HandyControlDemo", out var createdNew);
+
+ if (!createdNew)
+ {
+ var current = Process.GetCurrentProcess();
+
+ foreach (var process in Process.GetProcessesByName(current.ProcessName))
+ {
+ if (process.Id != current.Id)
+ {
+ Win32Helper.SetForegroundWindow(process.MainWindowHandle);
+ break;
+ }
+ }
+ Shutdown();
+ }
+ }
+
protected override void OnStartup(StartupEventArgs e)
{
+ var splashScreen = new SplashScreen("Resources/Img/Cover.png");
+ splashScreen.Show(true);
+
base.OnStartup(e);
+ UpdateRegistry();
+
+ ShutdownMode = ShutdownMode.OnMainWindowClose;
GlobalData.Init();
ConfigHelper.Instance.SetLang(GlobalData.Config.Lang);
@@ -26,9 +57,8 @@ namespace HandyControlDemo
UpdateSkin(GlobalData.Config.Skin);
}
-#if !Core
ConfigHelper.Instance.SetSystemVersionInfo(CommonHelper.GetSystemVersionInfo());
-#endif
+
ServicePointManager.SecurityProtocol = (SecurityProtocolType)(SslProtocols)0x00000C00;
}
@@ -57,5 +87,30 @@ namespace HandyControlDemo
});
Current.MainWindow?.OnApplyTemplate();
}
+
+ private void UpdateRegistry()
+ {
+ var processModule = Process.GetCurrentProcess().MainModule;
+ if (processModule != null)
+ {
+ var registryFilePath = $"{Path.GetDirectoryName(processModule.FileName)}\\Registry.reg";
+ if (!File.Exists(registryFilePath))
+ {
+ var streamResourceInfo = GetResourceStream(new Uri("pack://application:,,,/Resources/Registry.txt"));
+ if (streamResourceInfo != null)
+ {
+ using var reader = new StreamReader(streamResourceInfo.Stream);
+ var registryStr = reader.ReadToEnd();
+ var newRegistryStr = registryStr.Replace("#", processModule.FileName.Replace("\\", "\\\\"));
+ File.WriteAllText(registryFilePath, newRegistryStr);
+ Process.Start(new ProcessStartInfo("cmd", $"/c {registryFilePath}")
+ {
+ UseShellExecute = false,
+ CreateNoWindow = true
+ });
+ }
+ }
+ }
+ }
}
}
diff --git a/src/Shared/HandyControlDemo_Shared/Data/MessageToken.cs b/src/Shared/HandyControlDemo_Shared/Data/MessageToken.cs
index 87d80a24..8c984761 100644
--- a/src/Shared/HandyControlDemo_Shared/Data/MessageToken.cs
+++ b/src/Shared/HandyControlDemo_Shared/Data/MessageToken.cs
@@ -2,6 +2,8 @@
{
public class MessageToken
{
+ /*-------------------- Controls --------------------*/
+
public static readonly string GrowlDemoCtl = nameof(GrowlDemoCtl);
public static readonly string LoadingDemoCtl = nameof(LoadingDemoCtl);
@@ -108,7 +110,29 @@
public static readonly string ImageBlockDemoCtl = nameof(ImageBlockDemoCtl);
- public static readonly string ButtonDemoCtl = nameof(ButtonDemoCtl);
+ public static readonly string RunningBlockDemoCtl = nameof(RunningBlockDemoCtl);
+
+ public static readonly string HoneycombPanelDemoCtl = nameof(HoneycombPanelDemoCtl);
+
+ public static readonly string SpriteDemoCtl = nameof(SpriteDemoCtl);
+
+ public static readonly string NotificationDemoCtl = nameof(NotificationDemoCtl);
+
+ public static readonly string FloatingBlockDemoCtl = nameof(FloatingBlockDemoCtl);
+
+ public static readonly string SplitButtonDemoCtl = nameof(SplitButtonDemoCtl);
+
+ public static readonly string DividerDemoCtl = nameof(DividerDemoCtl);
+
+ /*-------------------- Tools --------------------*/
+
+ public static readonly string HatchBrushGeneratorDemoCtl = nameof(HatchBrushGeneratorDemoCtl);
+
+ public static readonly string GeometryAnimationDemoCtl = nameof(GeometryAnimationDemoCtl);
+
+ /*-------------------- Styles --------------------*/
+
+ public static readonly string ButtonDemoCtl = nameof(ButtonDemoCtl);
public static readonly string RepeatButtonDemoCtl = nameof(RepeatButtonDemoCtl);
@@ -164,11 +188,15 @@
public static readonly string LabelDemoCtl = nameof(LabelDemoCtl);
- public static readonly string CommonWindow = nameof(CommonWindow);
+ /*-------------------- Windows --------------------*/
+
+ public static readonly string CommonWindow = nameof(CommonWindow);
public static readonly string CustomNonClientAreaWindow = nameof(CustomNonClientAreaWindow);
- public static readonly string LoadShowContent = nameof(LoadShowContent);
+ /*-------------------- Messages --------------------*/
+
+ public static readonly string LoadShowContent = nameof(LoadShowContent);
public static readonly string FullSwitch = nameof(FullSwitch);
@@ -190,5 +218,9 @@
public static readonly string BlogsView = nameof(BlogsView);
+ public static readonly string NotifyIconDemo = nameof(NotifyIconDemo);
+
+ public static readonly string NotifyIconContextDemo = nameof(NotifyIconContextDemo);
+
}
}
\ No newline at end of file
diff --git a/src/Shared/HandyControlDemo_Shared/Data/MessageToken.tt b/src/Shared/HandyControlDemo_Shared/Data/MessageToken.tt
index f608d42f..6d152292 100644
--- a/src/Shared/HandyControlDemo_Shared/Data/MessageToken.tt
+++ b/src/Shared/HandyControlDemo_Shared/Data/MessageToken.tt
@@ -56,7 +56,14 @@ var controlList = new List
"ButtonGroupDemoCtl",
"CardDemoCtl",
"MagnifierDemoCtl",
- "ImageBlockDemoCtl"
+ "ImageBlockDemoCtl",
+ "RunningBlockDemoCtl",
+ "HoneycombPanelDemoCtl",
+ "SpriteDemoCtl",
+ "NotificationDemoCtl",
+ "FloatingBlockDemoCtl",
+ "SplitButtonDemoCtl",
+ "DividerDemoCtl"
};
var styleList = new List
{
@@ -89,6 +96,11 @@ var styleList = new List
"ToolBarDemoCtl",
"LabelDemoCtl"
};
+var toolList = new List
+{
+ "HatchBrushGeneratorDemoCtl",
+ "GeometryAnimationDemoCtl"
+};
var windowList = new List
{
"CommonWindow",
@@ -106,26 +118,42 @@ var messageList = new List
"MainWindow",
"OverView",
"ProjectsView",
- "BlogsView"
+ "BlogsView",
+ "NotifyIconDemo",
+ "NotifyIconContextDemo"
};
#>
namespace HandyControlDemo.Data
{
public class MessageToken
{
+ /*-------------------- Controls --------------------*/
+
<#foreach(var item in controlList){#>
public static readonly string <#=item#> = nameof(<#=item#>);
<#}#>
-<#foreach(var item in styleList){#>
+ /*-------------------- Tools --------------------*/
+
+ <#foreach(var item in toolList){#>
public static readonly string <#=item#> = nameof(<#=item#>);
<#}#>
-<#foreach(var item in windowList){#>
+ /*-------------------- Styles --------------------*/
+
+ <#foreach(var item in styleList){#>
public static readonly string <#=item#> = nameof(<#=item#>);
<#}#>
-<#foreach(var item in messageList){#>
+ /*-------------------- Windows --------------------*/
+
+ <#foreach(var item in windowList){#>
+ public static readonly string <#=item#> = nameof(<#=item#>);
+
+ <#}#>
+ /*-------------------- Messages --------------------*/
+
+ <#foreach(var item in messageList){#>
public static readonly string <#=item#> = nameof(<#=item#>);
<#}#>
diff --git a/src/Shared/HandyControlDemo_Shared/HandyControlDemo_Shared.projitems b/src/Shared/HandyControlDemo_Shared/HandyControlDemo_Shared.projitems
index 58adddcc..5d3e7bc1 100644
--- a/src/Shared/HandyControlDemo_Shared/HandyControlDemo_Shared.projitems
+++ b/src/Shared/HandyControlDemo_Shared/HandyControlDemo_Shared.projitems
@@ -6,7 +6,7 @@
c4694269-c9b8-45d5-87f8-d0088c532510
- HandyControlDemo_Shared
+ HandyControlDemo
@@ -27,11 +27,13 @@
MainWindow.xaml
+
+
Avatar.xaml
@@ -54,18 +56,27 @@
CardDemoCtl.xaml
+
+ DividerDemoCtl.xaml
+
+
+ FloatingBlockDemoCtl.xaml
+
+
+ HoneycombPanelDemoCtl.xaml
+
ImageBlockDemoCtl.xaml
MagnifierDemoCtl.xaml
+
+ NotificationDemoCtl.xaml
+
RangeSliderDemoCtl.xaml
-
- RelativePanelDemoCtl.xaml
-
BadgeDemoCtl.xaml
@@ -163,6 +174,9 @@
RateDemoCtl.xaml
+
+ RunningBlockDemoCtl.xaml
+
ScrollViewerDemoCtl.xaml
@@ -175,6 +189,12 @@
SideMenuDemoCtl.xaml
+
+ SplitButtonDemoCtl.xaml
+
+
+ SpriteDemoCtl.xaml
+
StepBarDemoCtl.xaml
@@ -202,6 +222,9 @@
WindowDemoCtl.xaml
+
+ AppNotification.xaml
+
BlogsView.xaml
@@ -310,6 +333,12 @@
TreeViewDemoCtl.xaml
+
+ GeometryAnimationDemoCtl.xaml
+
+
+ HatchBrushGeneratorDemoCtl.xaml
+
@@ -319,10 +348,13 @@
+
+
+
@@ -334,6 +366,9 @@
AboutWindow.xaml
+
+ AppSprite.xaml
+
BlurWindow.xaml
@@ -430,6 +465,18 @@
Designer
MSBuild:Compile
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
Designer
MSBuild:Compile
@@ -438,7 +485,7 @@
Designer
MSBuild:Compile
-
+
Designer
MSBuild:Compile
@@ -578,6 +625,10 @@
Designer
MSBuild:Compile
+
+ Designer
+ MSBuild:Compile
+
Designer
MSBuild:Compile
@@ -594,6 +645,14 @@
Designer
MSBuild:Compile
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
Designer
MSBuild:Compile
@@ -630,6 +689,10 @@
Designer
MSBuild:Compile
+
+ Designer
+ MSBuild:Compile
+
Designer
MSBuild:Compile
@@ -774,10 +837,22 @@
Designer
MSBuild:Compile
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
Designer
MSBuild:Compile
+
+ Designer
+ MSBuild:Compile
+
Designer
MSBuild:Compile
diff --git a/src/Shared/HandyControlDemo_Shared/MainWindow.xaml b/src/Shared/HandyControlDemo_Shared/MainWindow.xaml
index e82bc22b..867219d7 100644
--- a/src/Shared/HandyControlDemo_Shared/MainWindow.xaml
+++ b/src/Shared/HandyControlDemo_Shared/MainWindow.xaml
@@ -12,9 +12,10 @@
ShowTitle="False"
ResizeMode="CanResizeWithGrip"
WindowStartupLocation="CenterScreen"
- hc:GlobalShortcut.Host="True"
DataContext="{Binding Main,Source={StaticResource Locator}}"
+ hc:GlobalShortcut.Host="True"
hc:Dialog.Token="{x:Static data:MessageToken.MainWindow}"
+ hc:WindowAttach.IgnoreAltF4="True"
d:DesignHeight="800"
d:DesignWidth="1400"
Icon="/HandyControlDemo;component/Resources/Img/icon.ico">
@@ -25,16 +26,18 @@
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Shared/HandyControlDemo_Shared/Properties/AssemblyInfo.cs b/src/Shared/HandyControlDemo_Shared/Properties/AssemblyInfo.cs
index d7e7e5cc..e87a0781 100644
--- a/src/Shared/HandyControlDemo_Shared/Properties/AssemblyInfo.cs
+++ b/src/Shared/HandyControlDemo_Shared/Properties/AssemblyInfo.cs
@@ -13,5 +13,5 @@ using System.Windows;
[assembly: AssemblyCulture("")]
[assembly: ComVisible(false)]
[assembly: ThemeInfo(ResourceDictionaryLocation.None, ResourceDictionaryLocation.SourceAssembly)]
-[assembly: AssemblyVersion("2.1.0")]
+[assembly: AssemblyVersion("2.3.0")]
#endif
\ No newline at end of file
diff --git a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.Designer.cs b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.Designer.cs
index 68929ae4..3b0b3f5e 100644
--- a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.Designer.cs
+++ b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.Designer.cs
@@ -71,6 +71,16 @@ namespace HandyControlDemo.Properties.Langs {
///
/// Looks up a localized string similar to 动画路径.
+ /// 查找类似 添加项 的本地化字符串。
+ ///
+ public static string AddItem {
+ get {
+ return ResourceManager.GetString("AddItem", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 动画路径 的本地化字符串。
///
public static string AnimationPath {
get {
@@ -485,6 +495,16 @@ namespace HandyControlDemo.Properties.Langs {
///
/// Looks up a localized string similar to 在这里拖拽.
+ /// 查找类似 分割线 的本地化字符串。
+ ///
+ public static string Divider {
+ get {
+ return ResourceManager.GetString("Divider", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 在这里拖拽 的本地化字符串。
///
public static string DragHere {
get {
@@ -548,6 +568,16 @@ namespace HandyControlDemo.Properties.Langs {
///
/// Looks up a localized string similar to Gif图片.
+ /// 查找类似 漂浮块 的本地化字符串。
+ ///
+ public static string FloatingBlock {
+ get {
+ return ResourceManager.GetString("FloatingBlock", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 Gif图片 的本地化字符串。
///
public static string GifImage {
get {
@@ -674,6 +704,25 @@ namespace HandyControlDemo.Properties.Langs {
///
/// Looks up a localized string similar to 混合布局.
+ /// 查找类似 阴影画笔生成器 的本地化字符串。
+ ///
+ public static string HatchBrushGenerator {
+ get {
+ return ResourceManager.GetString("HatchBrushGenerator", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 蜂窝布局 的本地化字符串。
+ ///
+ public static string HoneycombPanel {
+ get {
+ return ResourceManager.GetString("HoneycombPanel", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 混合布局 的本地化字符串。
///
public static string HybridLayout {
get {
@@ -809,6 +858,16 @@ namespace HandyControlDemo.Properties.Langs {
///
/// Looks up a localized string similar to 名称.
+ /// 查找类似 变形动画 的本地化字符串。
+ ///
+ public static string Morphing_Animation {
+ get {
+ return ResourceManager.GetString("Morphing Animation", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 名称 的本地化字符串。
///
public static string Name {
get {
@@ -836,6 +895,16 @@ namespace HandyControlDemo.Properties.Langs {
///
/// Looks up a localized string similar to 托盘图标.
+ /// 查找类似 桌面通知 的本地化字符串。
+ ///
+ public static string Notification {
+ get {
+ return ResourceManager.GetString("Notification", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 托盘图标 的本地化字符串。
///
public static string NotifyIcon {
get {
@@ -953,6 +1022,16 @@ namespace HandyControlDemo.Properties.Langs {
///
/// Looks up a localized string similar to 轮廓文本.
+ /// 查找类似 打开精灵 的本地化字符串。
+ ///
+ public static string OpenSprite {
+ get {
+ return ResourceManager.GetString("OpenSprite", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 轮廓文本 的本地化字符串。
///
public static string OutlineText {
get {
@@ -1161,6 +1240,16 @@ namespace HandyControlDemo.Properties.Langs {
///
/// Looks up a localized string similar to 重复按钮.
+ /// 查找类似 删除项 的本地化字符串。
+ ///
+ public static string RemoveItem {
+ get {
+ return ResourceManager.GetString("RemoveItem", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 重复按钮 的本地化字符串。
///
public static string RepeatButton {
get {
@@ -1215,6 +1304,16 @@ namespace HandyControlDemo.Properties.Langs {
///
/// Looks up a localized string similar to 滚动视图.
+ /// 查找类似 滚动块 的本地化字符串。
+ ///
+ public static string RunningBlock {
+ get {
+ return ResourceManager.GetString("RunningBlock", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 滚动视图 的本地化字符串。
///
public static string ScrollViewer {
get {
@@ -1251,6 +1350,16 @@ namespace HandyControlDemo.Properties.Langs {
///
/// Looks up a localized string similar to 徽章.
+ /// 查找类似 发送通知 的本地化字符串。
+ ///
+ public static string SendNotification {
+ get {
+ return ResourceManager.GetString("SendNotification", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 徽章 的本地化字符串。
///
public static string Shield {
get {
@@ -1305,6 +1414,34 @@ namespace HandyControlDemo.Properties.Langs {
///
/// Looks up a localized string similar to 步骤.
+ /// 查找类似 分割按钮 的本地化字符串。
+ ///
+ public static string SplitButton {
+ get {
+ return ResourceManager.GetString("SplitButton", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 精灵 的本地化字符串。
+ ///
+ public static string Sprite {
+ get {
+ return ResourceManager.GetString("Sprite", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 保持打开 的本地化字符串。
+ ///
+ public static string StaysOpen {
+ get {
+ return ResourceManager.GetString("StaysOpen", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 步骤 的本地化字符串。
///
public static string Step {
get {
@@ -1494,6 +1631,16 @@ namespace HandyControlDemo.Properties.Langs {
///
/// Looks up a localized string similar to 穿梭框.
+ /// 查找类似 工具 的本地化字符串。
+ ///
+ public static string Tools {
+ get {
+ return ResourceManager.GetString("Tools", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 穿梭框 的本地化字符串。
///
public static string Transfer {
get {
diff --git a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.en.resx b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.en.resx
index 55bf14bb..4d386c3a 100644
--- a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.en.resx
+++ b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.en.resx
@@ -636,4 +636,49 @@
ImageBlock
+
+ RunningBlock
+
+
+ HoneycombPanel
+
+
+ Add an item
+
+
+ Remove an item
+
+
+ Sprite
+
+
+ Open sprite
+
+
+ Notification
+
+
+ Send notification
+
+
+ Stays open
+
+
+ FloatingBlock
+
+
+ SplitButton
+
+
+ Tools
+
+
+ HatchBrushGenerator
+
+
+ Morphing Animation
+
+
+ Divider
+
\ No newline at end of file
diff --git a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.fa.resx b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.fa.resx
new file mode 100644
index 00000000..170b2ced
--- /dev/null
+++ b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.fa.resx
@@ -0,0 +1,681 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
+ کنترل ها
+
+
+ استایل ها
+
+
+ Growl
+
+
+ امروز روز خوبی است ~~~
+
+
+ پرونده با موفقیت ذخیره شد!
+
+
+ فضای دیسک در حال اتمام است!
+
+
+ ارتباط ناموفق بود. لطفا شبکه خود را بررسی کنید!
+
+
+ برنامه خراب شد~~~
+
+
+ نسخه جدیدی کشف شد! آیا می خواهید بروزرسانی کنید؟
+
+
+ Loading
+
+
+ ImageBrowser
+
+
+ ColorPicker
+
+
+ Carousel
+
+
+ CompareSlider
+
+
+ TimeBar
+
+
+ Expander
+
+
+ Pagination
+
+
+ برای باز کردن مرورگر تصویر کلیک کنید
+
+
+ ProgressBar
+
+
+ AnimationPath
+
+
+ Button
+
+
+ ToggleButton
+
+
+ TabControl
+
+
+ CheckBox
+
+
+ TextBlock
+
+
+ Default
+
+
+ Primary
+
+
+ Success
+
+
+ Info
+
+
+ Warning
+
+
+ Danger
+
+
+ Custom button
+
+
+ عنوان
+
+
+ StepBar
+
+
+ قبلی
+
+
+ بعدی
+
+
+ ثبت نام
+
+
+ اطلاعات اصلی را پر کنید
+
+
+ آپلود فایل
+
+
+ تکمیل
+
+
+ Clock
+
+
+ Calendar
+
+
+ DatePicker
+
+
+ TimePicker
+
+
+ TextBox
+
+
+ این محتوا است
+
+
+ این عنوان است
+
+
+ این مورد باید پر شود
+
+
+ لطفاً محتوا را وارد کنید
+
+
+ عنوان در سمت چپ است
+
+
+ متن
+
+
+ عنوان فرعی
+
+
+ PasswordBox
+
+
+ CirclePanel
+
+
+ ComboBox
+
+
+ NumericUpDown
+
+
+ DataGrid
+
+
+ ایندکس
+
+
+ نام
+
+
+ تایپ کنید
+
+
+ تذکر
+
+
+ انتخاب شد
+
+
+ ListBox
+
+
+ TreeView
+
+
+ ScrollViewer
+
+
+ Window
+
+
+ Menu
+
+
+ اینجا کلیک راست کنید
+
+
+ RadioButton
+
+
+ پنجره پیام باز شود
+
+
+ باز کردن پنجره عادی
+
+
+ پنجره منطقه سفارشی تایتل بار باز شود
+
+
+ پنجره ماوس باز شود
+
+
+ باز کردن پنجره با محتوای شخصی
+
+
+ چشم پوشی
+
+
+ Error
+
+
+ Ask
+
+
+ Fatal
+
+
+ پاک کردن
+
+
+ آیا برای تغییر زبان، برنامه مجدداً راه اندازی شود؟
+
+
+ درباره
+
+
+ مخزن
+
+
+ ایمیل
+
+
+ اتاق چت
+
+
+ بلاگ
+
+
+ Brush
+
+
+ PreviewSlider
+
+
+ مشارکت کنندگان
+
+
+ Slider
+
+
+ شماره تلفن نیست
+
+
+ لطفا ایمیل را وارد کنید
+
+
+ گام
+
+
+ CalendarWithClock
+
+
+ DateTimePicker
+
+
+ GroupBox
+
+
+ ListView
+
+
+ RichTextBox
+
+
+ ToolBar
+
+
+ عادی
+
+
+ نمایش تعداد ردیف
+
+
+ SearchBar
+
+
+ Tag
+
+
+ GifImage
+
+
+ OutlineText
+
+
+ گروه QQ
+
+
+ FlipClock
+
+
+ باز کردن پنجره بلور
+
+
+ Rate
+
+
+ Shield
+
+
+ WaterfallPanel
+
+
+ Groups
+
+
+ CoverView
+
+
+ CoverFlow
+
+
+ لطفاً یک کلمه کلیدی را وارد کنید
+
+
+ پنجره قابل کشش ناحیه بدون تایتل بار باز شود
+
+
+ اینجا بکش
+
+
+ MessageBox
+
+
+ ProgressButton
+
+
+ Upload;Uploading
+
+
+ باز کردن پنجره پیغام شخصی
+
+
+ Transfer
+
+
+ ChatBubble
+
+
+ فشار دهید تا صحبت کنید
+
+
+ ثانیه
+
+
+ Label
+
+
+ GotoTop
+
+
+ NotifyIcon
+
+
+ Badge
+
+
+ Gravatar
+
+
+ به زودی
+
+
+ Comment
+
+
+ Reply
+
+
+ Dialog
+
+
+ متن Dialog
+
+
+ لطفا صبر کنید...
+
+
+ نسخه ی نمایشی Growl
+
+
+ پنجره جدید
+
+
+ قابلیت دیدن
+
+
+ چشمک زدن
+
+
+ خروج
+
+
+ پنل را باز کنید
+
+
+ نماد سینی باز است و به جای بستن برنامه ، پنجره را پنهان می کند
+
+
+ بی درنگ
+
+
+ سعی کنید برنامه را ببندید؟
+
+
+ گفتگوی تعاملی
+
+
+ اوکی
+
+
+ لطفاً وارد کنید ...
+
+
+ Click to count
+
+
+ RepeatButton
+
+
+ نسخه ی نمایشی Dialog
+
+
+ نمایش در پنجره فعلی
+
+
+ نمایش در پنجره اصلی
+
+
+ SideMenu
+
+
+ دید کلی
+
+
+ Grid
+
+
+ طرح اولیه
+
+
+ فاصله ستون
+
+
+ طرح ترکیبی
+
+
+ انحراف ستون
+
+
+ طرح ریسپانسیو
+
+
+ Border
+
+
+ توصیه
+
+
+ پروژه
+
+
+ RangeSlider
+
+
+ RelativePanel
+
+
+ On
+
+
+ Off
+
+
+ ButtonGroup
+
+
+ Card
+
+
+ متن Dialog با تایمر
+
+
+ Magnifier
+
+
+ ImageBlock
+
+
+ RunningBlock
+
+
+ HoneycombPanel
+
+
+ یک مورد اضافه کنید
+
+
+ یک مورد را حذف کنید
+
+
+ Sprite
+
+
+ اسپرایت را باز کنید
+
+
+ Notification
+
+
+ اعلان را ارسال کنید
+
+
+ باز می ماند
+
+
+ FloatingBlock
+
+
+ SplitButton
+
+
+ Tools
+
+
+ HatchBrushGenerator
+
+
+ Morphing Animation
+
+
+ Divider
+
+
\ No newline at end of file
diff --git a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.fr.resx b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.fr.resx
new file mode 100644
index 00000000..f7c5365c
--- /dev/null
+++ b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.fr.resx
@@ -0,0 +1,681 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
+ C'est une belle journée aujourd'hui
+
+
+ Fichier enregistré
+
+
+ Espace disque bientôt epuisé
+
+
+ Erreur de connexion. Veuillez vérifier votre réseau !
+
+
+ L'application a planté
+
+
+ Une nouvelle version a été détectée, voulez-vous la télécharger ?
+
+
+ Loading
+
+
+ ImageBrowser
+
+
+ ColorPicker
+
+
+ Carousel
+
+
+ CompareSlider
+
+
+ TimeBar
+
+
+ Expander
+
+
+ Pagination
+
+
+ Cliquer pour ouvrir la visionneuse d'image
+
+
+ ProgressBar
+
+
+ AnimationPath
+
+
+ Button
+
+
+ ToggleButton
+
+
+ TabControl
+
+
+ CheckBox
+
+
+ TextBlock
+
+
+ Default
+
+
+ Primary
+
+
+ Success
+
+
+ Info
+
+
+ Warning
+
+
+ Danger
+
+
+ Bouton personnalisé
+
+
+ Titre
+
+
+ StepBar
+
+
+ Précédent
+
+
+ Suivant
+
+
+ Register
+
+
+ Remplir les informations de base
+
+
+ Envoyer le fichier
+
+
+ Terminé
+
+
+ Clock
+
+
+ Calendrier
+
+
+ DatePicker
+
+
+ TimePicker
+
+
+ TextBox
+
+
+ Contenu ici
+
+
+ Titre ici
+
+
+ Ce champ doit être renseigné
+
+
+ Veuillez entrer du contenu
+
+
+ Le titre est à gauche
+
+
+ Text
+
+
+ Sous-titres
+
+
+ PasswordBox
+
+
+ CirclePanel
+
+
+ ComboBox
+
+
+ NumericUpDown
+
+
+ DataGrid
+
+
+ Index
+
+
+ Name
+
+
+ Type
+
+
+ Remarque
+
+
+ Selected
+
+
+ ListBox
+
+
+ TreeView
+
+
+ ScrollViewer
+
+
+ Window
+
+
+ Menu
+
+
+ Clique-droit ici
+
+
+ RadioButton
+
+
+ Ouvrir une fenêtre de message
+
+
+ Ouvrir une fenêtre commune
+
+
+ Ouvrir une fenêtre de 'NonClientArea' personnalisé
+
+
+ Ouvrir une fenêtre qui suit le curseur
+
+
+ Ouvrir une fenêtre de contenu personnalisé
+
+
+ Ignorer
+
+
+ Erreur
+
+
+ Ask
+
+
+ Fatal
+
+
+ Effacer
+
+
+ Voulez-vous redémarrer pour changer la langue ?
+
+
+ A propos
+
+
+ Dépôt
+
+
+ Email
+
+
+ ChatRoom
+
+
+ Blog
+
+
+ Brush
+
+
+ PreviewSlider
+
+
+ Contributeurs
+
+
+ Slider
+
+
+ Ce n'est pas un numéro de téléphone
+
+
+ Veuillez saisir le mail
+
+
+ Step
+
+
+ CalendarWithClock
+
+
+ DateTimePicker
+
+
+ GroupBox
+
+
+ ListView
+
+
+ RichTextBox
+
+
+ ToolBar
+
+
+ Common
+
+
+ ShowRowNumber
+
+
+ SearchBar
+
+
+ Tag
+
+
+ GifImage
+
+
+ OutlineText
+
+
+ QQ Group
+
+
+ FlipClock
+
+
+ Ouvrir une fenêtre floue
+
+
+ Rate
+
+
+ Shield
+
+
+ WaterfallPanel
+
+
+ Groups
+
+
+ CoverView
+
+
+ CoverFlow
+
+
+ Veuillez saisir un mot-clé
+
+
+ Ouvrir une fenêtre sans NonClientArea que l'on peut glisser
+
+
+ Glisser ici
+
+
+ MessageBox
+
+
+ ProgressButton
+
+
+ Upload;Upload en cours
+
+
+ Ouvrir une fenêtre de message personnalisé
+
+
+ Transfer
+
+
+ ChatBubble
+
+
+ Appuyer pour parler
+
+
+ Sec
+
+
+ Label
+
+
+ GotoTop
+
+
+ NotifyIcon
+
+
+ Badge
+
+
+ Gravatar
+
+
+ Bientôt
+
+
+ Commentaire
+
+
+ Répondre
+
+
+ Dialog
+
+
+ TextDialog
+
+
+ Veuillez patienter...
+
+
+ Growl demo
+
+
+ Nouvelle fenêtre
+
+
+ Visibility
+
+
+ Clignotter
+
+
+ Exit
+
+
+ Ouvrir Panel
+
+
+ L'application va se réduire dans la barre d'icônes au lieu de se fermer
+
+
+ Prompt
+
+
+ Essayer de fermer l'application ?
+
+
+ Interactive Dialog
+
+
+ Ok
+
+
+ Veuillez saisir...
+
+
+ Cliquer pour compter
+
+
+ RepeatButton
+
+
+ Démo de dialogue
+
+
+ Afficher dans la fenêtre actuelle
+
+
+ Afficher dans le fenêtre principale
+
+
+ SideMenu
+
+
+ Vue d'ensemble
+
+
+ Grid
+
+
+ Affichage basique
+
+
+ Column spacing
+
+
+ Hybrid layout
+
+
+ Column offset
+
+
+ Affichage responsive
+
+
+ Border
+
+
+ Recommendation
+
+
+ Project
+
+
+ RangeSlider
+
+
+ RelativePanel
+
+
+ On
+
+
+ Off
+
+
+ ButtonGroup
+
+
+ Card
+
+
+ TextDialog with timer
+
+
+ Magnifier
+
+
+ ImageBlock
+
+
+ RunningBlock
+
+
+ HoneycombPanel
+
+
+ Ajouter un item
+
+
+ Enlever un item
+
+
+ Sprite
+
+
+ Ouvrir Sprite
+
+
+ Notification
+
+
+ Envoyer une notification
+
+
+ Reste ouvert
+
+
+ FloatingBlock
+
+
+ SplitButton
+
+
+ Tools
+
+
+ HatchBrushGenerator
+
+
+ Morphing Animation
+
+
+ Divider
+
+
\ No newline at end of file
diff --git a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.resx b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.resx
index f452aaad..ae5640cc 100644
--- a/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.resx
+++ b/src/Shared/HandyControlDemo_Shared/Properties/Langs/Lang.resx
@@ -636,4 +636,49 @@
图片块
+
+ 滚动块
+
+
+ 蜂窝布局
+
+
+ 添加项
+
+
+ 删除项
+
+
+ 精灵
+
+
+ 打开精灵
+
+
+ 桌面通知
+
+
+ 发送通知
+
+
+ 保持打开
+
+
+ 漂浮块
+
+
+ 分割按钮
+
+
+ 工具
+
+
+ 阴影画笔生成器
+
+
+ 变形动画
+
+
+ 分割线
+
\ No newline at end of file
diff --git a/src/Shared/HandyControlDemo_Shared/Resources/Img/Cover.png b/src/Shared/HandyControlDemo_Shared/Resources/Img/Cover.png
new file mode 100644
index 00000000..a00e26b6
Binary files /dev/null and b/src/Shared/HandyControlDemo_Shared/Resources/Img/Cover.png differ
diff --git a/src/Shared/HandyControlDemo_Shared/Resources/Img/Flag/cn.png b/src/Shared/HandyControlDemo_Shared/Resources/Img/Flag/cn.png
index 63267f70..d093d316 100644
Binary files a/src/Shared/HandyControlDemo_Shared/Resources/Img/Flag/cn.png and b/src/Shared/HandyControlDemo_Shared/Resources/Img/Flag/cn.png differ
diff --git a/src/Shared/HandyControlDemo_Shared/Resources/Img/Flag/en.png b/src/Shared/HandyControlDemo_Shared/Resources/Img/Flag/en.png
index 18425bc6..83110d10 100644
Binary files a/src/Shared/HandyControlDemo_Shared/Resources/Img/Flag/en.png and b/src/Shared/HandyControlDemo_Shared/Resources/Img/Flag/en.png differ
diff --git a/src/Shared/HandyControlDemo_Shared/Resources/Img/Flag/fa.png b/src/Shared/HandyControlDemo_Shared/Resources/Img/Flag/fa.png
new file mode 100644
index 00000000..3a3115a3
Binary files /dev/null and b/src/Shared/HandyControlDemo_Shared/Resources/Img/Flag/fa.png differ
diff --git a/src/Shared/HandyControlDemo_Shared/Resources/Img/Flag/fr.png b/src/Shared/HandyControlDemo_Shared/Resources/Img/Flag/fr.png
new file mode 100644
index 00000000..dd5f0bb9
Binary files /dev/null and b/src/Shared/HandyControlDemo_Shared/Resources/Img/Flag/fr.png differ
diff --git a/src/Shared/HandyControlDemo_Shared/Resources/Img/LeftMainContent/DataGenerator_16x.png b/src/Shared/HandyControlDemo_Shared/Resources/Img/LeftMainContent/DataGenerator_16x.png
new file mode 100644
index 00000000..efadacf8
Binary files /dev/null and b/src/Shared/HandyControlDemo_Shared/Resources/Img/LeftMainContent/DataGenerator_16x.png differ
diff --git a/src/Shared/HandyControlDemo_Shared/Resources/Img/LeftMainContent/DottedSplitter_16x.png b/src/Shared/HandyControlDemo_Shared/Resources/Img/LeftMainContent/DottedSplitter_16x.png
new file mode 100644
index 00000000..14b2af98
Binary files /dev/null and b/src/Shared/HandyControlDemo_Shared/Resources/Img/LeftMainContent/DottedSplitter_16x.png differ
diff --git a/src/Shared/HandyControlDemo_Shared/Resources/Img/LeftMainContent/Dynamic_16x.png b/src/Shared/HandyControlDemo_Shared/Resources/Img/LeftMainContent/Dynamic_16x.png
new file mode 100644
index 00000000..dfcd0380
Binary files /dev/null and b/src/Shared/HandyControlDemo_Shared/Resources/Img/LeftMainContent/Dynamic_16x.png differ
diff --git a/src/Shared/HandyControlDemo_Shared/Resources/Img/LeftMainContent/HandyControl.png b/src/Shared/HandyControlDemo_Shared/Resources/Img/LeftMainContent/HandyControl.png
new file mode 100644
index 00000000..911df219
Binary files /dev/null and b/src/Shared/HandyControlDemo_Shared/Resources/Img/LeftMainContent/HandyControl.png differ
diff --git a/src/Shared/HandyControlDemo_Shared/Resources/Img/LeftMainContent/PolygonHexagon_16x.png b/src/Shared/HandyControlDemo_Shared/Resources/Img/LeftMainContent/PolygonHexagon_16x.png
new file mode 100644
index 00000000..0aae4fee
Binary files /dev/null and b/src/Shared/HandyControlDemo_Shared/Resources/Img/LeftMainContent/PolygonHexagon_16x.png differ
diff --git a/src/Shared/HandyControlDemo_Shared/Resources/Img/LeftMainContent/Procedure_16x.png b/src/Shared/HandyControlDemo_Shared/Resources/Img/LeftMainContent/Procedure_16x.png
new file mode 100644
index 00000000..70f60143
Binary files /dev/null and b/src/Shared/HandyControlDemo_Shared/Resources/Img/LeftMainContent/Procedure_16x.png differ
diff --git a/src/Shared/HandyControlDemo_Shared/Resources/Img/LeftMainContent/SplitButton_16x.png b/src/Shared/HandyControlDemo_Shared/Resources/Img/LeftMainContent/SplitButton_16x.png
new file mode 100644
index 00000000..80e46664
Binary files /dev/null and b/src/Shared/HandyControlDemo_Shared/Resources/Img/LeftMainContent/SplitButton_16x.png differ
diff --git a/src/Shared/HandyControlDemo_Shared/Resources/Img/LeftMainContent/thumbs_up.png b/src/Shared/HandyControlDemo_Shared/Resources/Img/LeftMainContent/thumbs_up.png
new file mode 100644
index 00000000..ae007799
Binary files /dev/null and b/src/Shared/HandyControlDemo_Shared/Resources/Img/LeftMainContent/thumbs_up.png differ
diff --git a/src/Shared/HandyControlDemo_Shared/Resources/Img/QQ/1.gif b/src/Shared/HandyControlDemo_Shared/Resources/Img/QQ/1.gif
new file mode 100644
index 00000000..05f39cf6
Binary files /dev/null and b/src/Shared/HandyControlDemo_Shared/Resources/Img/QQ/1.gif differ
diff --git a/src/Shared/HandyControlDemo_Shared/Resources/Img/QQ/10.gif b/src/Shared/HandyControlDemo_Shared/Resources/Img/QQ/10.gif
new file mode 100644
index 00000000..56427e20
Binary files /dev/null and b/src/Shared/HandyControlDemo_Shared/Resources/Img/QQ/10.gif differ
diff --git a/src/Shared/HandyControlDemo_Shared/Resources/Img/QQ/2.gif b/src/Shared/HandyControlDemo_Shared/Resources/Img/QQ/2.gif
new file mode 100644
index 00000000..fed13970
Binary files /dev/null and b/src/Shared/HandyControlDemo_Shared/Resources/Img/QQ/2.gif differ
diff --git a/src/Shared/HandyControlDemo_Shared/Resources/Img/QQ/3.gif b/src/Shared/HandyControlDemo_Shared/Resources/Img/QQ/3.gif
new file mode 100644
index 00000000..74567e8e
Binary files /dev/null and b/src/Shared/HandyControlDemo_Shared/Resources/Img/QQ/3.gif differ
diff --git a/src/Shared/HandyControlDemo_Shared/Resources/Img/QQ/4.gif b/src/Shared/HandyControlDemo_Shared/Resources/Img/QQ/4.gif
new file mode 100644
index 00000000..8fe5a4f5
Binary files /dev/null and b/src/Shared/HandyControlDemo_Shared/Resources/Img/QQ/4.gif differ
diff --git a/src/Shared/HandyControlDemo_Shared/Resources/Img/QQ/5.gif b/src/Shared/HandyControlDemo_Shared/Resources/Img/QQ/5.gif
new file mode 100644
index 00000000..05b2d290
Binary files /dev/null and b/src/Shared/HandyControlDemo_Shared/Resources/Img/QQ/5.gif differ
diff --git a/src/Shared/HandyControlDemo_Shared/Resources/Img/QQ/6.gif b/src/Shared/HandyControlDemo_Shared/Resources/Img/QQ/6.gif
new file mode 100644
index 00000000..e602647c
Binary files /dev/null and b/src/Shared/HandyControlDemo_Shared/Resources/Img/QQ/6.gif differ
diff --git a/src/Shared/HandyControlDemo_Shared/Resources/Img/QQ/7.gif b/src/Shared/HandyControlDemo_Shared/Resources/Img/QQ/7.gif
new file mode 100644
index 00000000..18025fc0
Binary files /dev/null and b/src/Shared/HandyControlDemo_Shared/Resources/Img/QQ/7.gif differ
diff --git a/src/Shared/HandyControlDemo_Shared/Resources/Img/QQ/8.gif b/src/Shared/HandyControlDemo_Shared/Resources/Img/QQ/8.gif
new file mode 100644
index 00000000..f3dc4dab
Binary files /dev/null and b/src/Shared/HandyControlDemo_Shared/Resources/Img/QQ/8.gif differ
diff --git a/src/Shared/HandyControlDemo_Shared/Resources/Img/QQ/9.gif b/src/Shared/HandyControlDemo_Shared/Resources/Img/QQ/9.gif
new file mode 100644
index 00000000..452d39ac
Binary files /dev/null and b/src/Shared/HandyControlDemo_Shared/Resources/Img/QQ/9.gif differ
diff --git a/src/Shared/HandyControlDemo_Shared/Resources/Img/qq-group.jpg b/src/Shared/HandyControlDemo_Shared/Resources/Img/qq-group.jpg
deleted file mode 100644
index ad37b866..00000000
Binary files a/src/Shared/HandyControlDemo_Shared/Resources/Img/qq-group.jpg and /dev/null differ
diff --git a/src/Shared/HandyControlDemo_Shared/Resources/Img/qq_group_1.jpg b/src/Shared/HandyControlDemo_Shared/Resources/Img/qq_group_1.jpg
new file mode 100644
index 00000000..bf1910e4
Binary files /dev/null and b/src/Shared/HandyControlDemo_Shared/Resources/Img/qq_group_1.jpg differ
diff --git a/src/Shared/HandyControlDemo_Shared/Resources/Img/qq_group_2.jpg b/src/Shared/HandyControlDemo_Shared/Resources/Img/qq_group_2.jpg
new file mode 100644
index 00000000..a73c3e39
Binary files /dev/null and b/src/Shared/HandyControlDemo_Shared/Resources/Img/qq_group_2.jpg differ
diff --git a/src/Shared/HandyControlDemo_Shared/Resources/Registry.txt b/src/Shared/HandyControlDemo_Shared/Resources/Registry.txt
new file mode 100644
index 00000000..70b43050
Binary files /dev/null and b/src/Shared/HandyControlDemo_Shared/Resources/Registry.txt differ
diff --git a/src/Shared/HandyControlDemo_Shared/Resources/Themes/Basic/Converters.xaml b/src/Shared/HandyControlDemo_Shared/Resources/Themes/Basic/Converters.xaml
index 82870e28..00802683 100644
--- a/src/Shared/HandyControlDemo_Shared/Resources/Themes/Basic/Converters.xaml
+++ b/src/Shared/HandyControlDemo_Shared/Resources/Themes/Basic/Converters.xaml
@@ -4,5 +4,6 @@
+
\ No newline at end of file
diff --git a/src/Shared/HandyControlDemo_Shared/Resources/Themes/Basic/Geometries.xaml b/src/Shared/HandyControlDemo_Shared/Resources/Themes/Basic/Geometries.xaml
index 4158b09e..ca18bb48 100644
--- a/src/Shared/HandyControlDemo_Shared/Resources/Themes/Basic/Geometries.xaml
+++ b/src/Shared/HandyControlDemo_Shared/Resources/Themes/Basic/Geometries.xaml
@@ -9,6 +9,9 @@
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
+ m 41.416254,90 c -0.327378,-7.4702 0.20833,-32.7284 0,-39.901 -5.386902,-0.2083 -4.521603,0.3274 -9.848987,0 0.20833,-5.50595 0.36436,-7.66666 0.126269,-13.32142 4.646472,0.0181 3.439989,-0.009 9.848987,-0.1894 0.09586,-3.7736 0.133082,-3.0791 0.126269,-7.38674 0.18259,-3.73943 -0.486609,-10.54308 4.293149,-14.96288 4.779758,-4.4198 13.606811,-3.64808 22.223356,-3.53554 -0.04417,5.73754 -0.03936,9.37986 0,12.87945 -5.049924,0.46388 -7.309188,-0.33689 -10.85914,1.26269 -1.403378,3.17794 -1.569601,4.80531 -1.262691,11.93242 3.147964,-0.13336 8.201788,-0.1378 12.626907,0 -0.995158,6.00899 -0.948285,7.62376 -1.767767,13.06882 -3.676625,0.088 -5.605721,-0.1488 -11.111678,0 -0.148814,6.756 0.357147,33.0107 0,40.1536 -6.428576,0.1786 -8.174438,-0.03 -14.394674,0 z
+ m 10.44335,90 c 11.073313,0.3952 19.483106,-1.8358 23.901837,-7.1603 -7.9736,-1.4292 -11.832311,-4.1933 -15.078321,-11.0837 3.459698,0.8219 5.795894,0.6358 7.606781,-0.607 -7.19593,-1.719 -12.734543,-6.7971 -13.741664,-15.836 2.766355,1.55307 5.466848,2.66623 7.828682,2.0203 -4.336544,-2.92911 -9.838998,-10.47636 -5.555839,-22.47589 8.400675,11.87052 23.824269,17.67568 33.840111,17.67767 -0.936406,-9.74688 5.88057,-19.46521 15.302849,-19.97853 8.13118,-0.50719 10.57457,4.01944 12.476346,4.82624 3.644547,0.13419 7.393301,-1.74401 10.354063,-3.53553 -1.380842,4.47157 -5.06769,5.62903 -6.313453,8.58629 5.42317,0.41513 5.891376,-1.53111 8.333758,-2.0203 -2.071414,3.75017 -5.393863,5.00034 -7.323606,8.08122 -1.633654,16.12573 -5.16049,27.57123 -14.647212,36.36553 -13.825764,11.3764 -34.755458,17.369 -56.984332,5.14 z
+ M68.191078 915.462005l161.384597 0L229.575676 431.30719 68.191078 431.30719 68.191078 915.462005zM955.808922 471.653083c0-44.582381-36.109406-80.69281-80.69281-80.69281L620.329241 390.960273 658.859789 206.578915c0.807389-4.034896 1.412163-8.271384 1.412163-12.709463 0-16.743336-6.859221-31.873941-17.752316-42.767036l-42.968627-42.565445L333.871043 374.216937c-14.524808 14.7264-23.602557 34.899858-23.602557 57.090253l0 403.462005c0 44.582381 36.109406 80.69281 80.69281 80.69281l363.116111 0c33.487695 0 62.133106-20.37505 74.236771-49.222051l121.643478-284.441261c3.63069-9.279341 5.850242-19.164478 5.850242-29.452799L955.807898 475.083206l-0.403183-0.403183L955.808922 471.653083z
M736 224H288a64 64 0 0 0-64 64v448a64 64 0 0 0 64 64h448a64 64 0 0 0 64-64V288a64 64 0 0 0-64-64z m-416 160a64 64 0 1 1 128.032 0.032A64 64 0 0 1 320 384z m416 320a32 32 0 0 1-32 32H384a32 32 0 0 1-32-32l96-160c26.432-2.048 68.128 6.016 128 64l128-224a32 32 0 0 1 32 32v288z
M19.692308 512A25 25 0 1 1 19.692308 531.692308ZM512 303.027832C512 286.548884 524.86564 273.174666 540.717948 273.174666L598.153846 273.174666C614.006154 273.174666 626.871794 286.548884 626.871794 303.027832L626.871794 362.734167C626.871794 379.213115 614.006154 392.587333 598.153846 392.587333L540.717948 392.587333C524.86564 392.587333 512 379.213115 512 362.734167L512 303.027832 512 303.027832ZM512 482.146834 512 541.853166C512 558.332115 499.13436 571.706335 483.282052 571.706335L425.846154 571.706335C409.993846 571.706335 397.128206 558.332115 397.128206 541.853166L397.128206 482.146834C397.128206 465.667885 409.993846 452.293665 425.846154 452.293665L483.282052 452.293665C499.13436 452.293665 512 465.667885 512 482.146834L512 482.146834ZM339.692308 303.027832C339.692308 286.548884 352.557948 273.174666 368.410256 273.174666L425.846154 273.174666C441.698462 273.174666 454.564102 286.548884 454.564102 303.027832L454.564102 362.734167C454.564102 379.213115 441.698462 392.587333 425.846154 392.587333L368.410256 392.587333C352.557948 392.587333 339.692308 379.213115 339.692308 362.734167L339.692308 303.027832 339.692308 303.027832ZM167.384615 303.027832C167.384615 286.548884 180.250256 273.174666 196.102564 273.174666L253.538462 273.174666C269.390769 273.174666 282.25641 286.548884 282.25641 303.027832L282.25641 362.734167C282.25641 379.213115 269.390769 392.587333 253.538462 392.587333L196.102564 392.587333C180.250256 392.587333 167.384615 379.213115 167.384615 362.734167L167.384615 303.027832 167.384615 303.027832ZM282.25641 720.972168C282.25641 737.451116 269.390769 750.825334 253.538462 750.825334L196.102564 750.825334C180.250256 750.825334 167.384615 737.451116 167.384615 720.972168L167.384615 661.265833C167.384615 644.786885 180.250256 631.412667 196.102564 631.412667L253.538462 631.412667C269.390769 631.412667 282.25641 644.786885 282.25641 661.265833L282.25641 720.972168 282.25641 720.972168ZM310.97436 571.706335 253.538462 571.706335C237.686154 571.706335 224.820513 558.332115 224.820513 541.853166L224.820513 482.146834C224.820513 465.667885 237.686154 452.293665 253.538462 452.293665L310.97436 452.293665C326.826667 452.293665 339.692308 465.667885 339.692308 482.146834L339.692308 541.853166C339.692308 558.332115 326.826667 571.706335 310.97436 571.706335L310.97436 571.706335ZM569.435898 720.972168C569.435898 737.451116 556.570256 750.825334 540.717948 750.825334L368.410256 750.825334C352.557948 750.825334 339.692308 737.451116 339.692308 720.972168L339.692308 661.265833C339.692308 644.786885 352.557948 631.412667 368.410256 631.412667L540.717948 631.412667C556.570256 631.412667 569.435898 644.786885 569.435898 661.265833L569.435898 720.972168 569.435898 720.972168ZM569.435898 541.853166 569.435898 482.146834C569.435898 465.667885 582.301538 452.293665 598.153846 452.293665L655.589744 452.293665C671.442052 452.293665 684.307692 465.667885 684.307692 482.146834L684.307692 541.853166C684.307692 558.332115 671.442052 571.706335 655.589744 571.706335L598.153846 571.706335C582.301538 571.706335 569.435898 558.332115 569.435898 541.853166L569.435898 541.853166ZM856.615385 720.972168C856.615385 737.451116 843.749744 750.825334 827.897437 750.825334L655.589744 750.825334C639.737437 750.825334 626.871794 737.451116 626.871794 720.972168L626.871794 661.265833C626.871794 644.786885 639.737437 631.412667 655.589744 631.412667L713.02564 631.412667C728.877948 631.412667 741.74359 618.038449 741.74359 601.559501L741.74359 482.146834C741.74359 465.667885 754.609231 452.293665 770.461538 452.293665L827.897437 452.293665C843.749744 452.293665 856.615385 465.667885 856.615385 482.146834L856.615385 720.972168 856.615385 720.972168ZM856.615385 362.734167C856.615385 379.213115 843.749744 392.587333 827.897437 392.587333L713.02564 392.587333C697.173333 392.587333 684.307692 379.213115 684.307692 362.734167L684.307692 303.027832C684.307692 286.548884 697.173333 273.174666 713.02564 273.174666L827.897437 273.174666C843.749744 273.174666 856.615385 286.548884 856.615385 303.027832L856.615385 362.734167 856.615385 362.734167Z
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
diff --git a/src/Shared/HandyControlDemo_Shared/Resources/Themes/Styles/Style.xaml b/src/Shared/HandyControlDemo_Shared/Resources/Themes/Styles/Style.xaml
index 8bcccf6a..49a0d290 100644
--- a/src/Shared/HandyControlDemo_Shared/Resources/Themes/Styles/Style.xaml
+++ b/src/Shared/HandyControlDemo_Shared/Resources/Themes/Styles/Style.xaml
@@ -94,4 +94,8 @@
+
+
\ No newline at end of file
diff --git a/src/Shared/HandyControlDemo_Shared/Service/Data/DataService.cs b/src/Shared/HandyControlDemo_Shared/Service/Data/DataService.cs
index cd558e1d..0ea49299 100644
--- a/src/Shared/HandyControlDemo_Shared/Service/Data/DataService.cs
+++ b/src/Shared/HandyControlDemo_Shared/Service/Data/DataService.cs
@@ -157,9 +157,9 @@ namespace HandyControlDemo.Service
};
}
- internal List GetCardDataList()
+ internal ObservableCollection GetCardDataList()
{
- return new List
+ return new ObservableCollection
{
new CardModel
{
@@ -224,6 +224,14 @@ namespace HandyControlDemo.Service
};
}
+ internal CardModel GetCardData()
+ {
+ return new CardModel
+ {
+ Content = $"/HandyControlDemo;component/Resources/Img/Album/{DateTime.Now.Second % 10 + 1}.jpg"
+ };
+ }
+
internal List GetStepBarDemoDataList()
{
return new List
diff --git a/src/Shared/HandyControlDemo_Shared/Tools/Converter/HatchBrushConverter.cs b/src/Shared/HandyControlDemo_Shared/Tools/Converter/HatchBrushConverter.cs
new file mode 100644
index 00000000..878605f7
--- /dev/null
+++ b/src/Shared/HandyControlDemo_Shared/Tools/Converter/HatchBrushConverter.cs
@@ -0,0 +1,33 @@
+using System;
+using System.Globalization;
+using System.Windows.Data;
+using System.Windows.Media;
+using HandyControl.Data;
+using HandyControl.Tools;
+
+namespace HandyControlDemo.Tools.Converter
+{
+ public class HatchBrushConverter : IValueConverter
+ {
+ private readonly HatchBrushGenerator _brushGenerator;
+
+ public HatchBrushConverter()
+ {
+ _brushGenerator = new HatchBrushGenerator();
+ }
+
+ public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ if (value is HatchStyle style)
+ {
+ return _brushGenerator.GetHatchBrush(style, ResourceHelper.GetResource("DarkPrimaryColor"), ResourceHelper.GetResource("BackgroundColor"));
+ }
+ return Brushes.Transparent;
+ }
+
+ public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ throw new NotImplementedException();
+ }
+ }
+}
diff --git a/src/Shared/HandyControlDemo_Shared/Tools/Helper/CommonHelper.cs b/src/Shared/HandyControlDemo_Shared/Tools/Helper/CommonHelper.cs
index 2743f1fc..75ef4e9c 100644
--- a/src/Shared/HandyControlDemo_Shared/Tools/Helper/CommonHelper.cs
+++ b/src/Shared/HandyControlDemo_Shared/Tools/Helper/CommonHelper.cs
@@ -1,5 +1,4 @@
-#if !Core
-using System.Linq;
+using System.Linq;
using System.Management;
using HandyControl.Data;
@@ -20,8 +19,7 @@ namespace HandyControlDemo.Tools
return info;
}
}
- return default(SystemVersionInfo);
+ return default;
}
}
-}
-#endif
\ No newline at end of file
+}
\ No newline at end of file
diff --git a/src/Shared/HandyControlDemo_Shared/Tools/Helper/Win32Helper.cs b/src/Shared/HandyControlDemo_Shared/Tools/Helper/Win32Helper.cs
new file mode 100644
index 00000000..0f8aeb4b
--- /dev/null
+++ b/src/Shared/HandyControlDemo_Shared/Tools/Helper/Win32Helper.cs
@@ -0,0 +1,11 @@
+using System;
+using System.Runtime.InteropServices;
+
+namespace HandyControlDemo.Tools
+{
+ internal class Win32Helper
+ {
+ [DllImport("user32.dll", ExactSpelling = true, CharSet = CharSet.Auto)]
+ public static extern bool SetForegroundWindow(IntPtr hWnd);
+ }
+}
diff --git a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/DividerDemoCtl.xaml b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/DividerDemoCtl.xaml
new file mode 100644
index 00000000..37fb29ea
--- /dev/null
+++ b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/DividerDemoCtl.xaml
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/RelativePanelDemoCtl.xaml.cs b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/DividerDemoCtl.xaml.cs
similarity index 56%
rename from src/Shared/HandyControlDemo_Shared/UserControl/Controls/RelativePanelDemoCtl.xaml.cs
rename to src/Shared/HandyControlDemo_Shared/UserControl/Controls/DividerDemoCtl.xaml.cs
index 39b53914..7cd8f16f 100644
--- a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/RelativePanelDemoCtl.xaml.cs
+++ b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/DividerDemoCtl.xaml.cs
@@ -1,10 +1,10 @@
namespace HandyControlDemo.UserControl
{
- public partial class RelativePanelDemoCtl
+ public partial class DividerDemoCtl
{
- public RelativePanelDemoCtl()
+ public DividerDemoCtl()
{
InitializeComponent();
}
}
-}
\ No newline at end of file
+}
diff --git a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/FloatingBlockDemoCtl.xaml b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/FloatingBlockDemoCtl.xaml
new file mode 100644
index 00000000..338b7430
--- /dev/null
+++ b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/FloatingBlockDemoCtl.xaml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/FloatingBlockDemoCtl.xaml.cs b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/FloatingBlockDemoCtl.xaml.cs
new file mode 100644
index 00000000..f7cbc776
--- /dev/null
+++ b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/FloatingBlockDemoCtl.xaml.cs
@@ -0,0 +1,10 @@
+namespace HandyControlDemo.UserControl
+{
+ public partial class FloatingBlockDemoCtl
+ {
+ public FloatingBlockDemoCtl()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/GridDemoCtl.xaml b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/GridDemoCtl.xaml
index eccc1566..df298e28 100644
--- a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/GridDemoCtl.xaml
+++ b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/GridDemoCtl.xaml
@@ -139,10 +139,10 @@
-
+
-
+
diff --git a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/GrowlDemoCtl.xaml b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/GrowlDemoCtl.xaml
index 5d229ef7..3d06771c 100644
--- a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/GrowlDemoCtl.xaml
+++ b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/GrowlDemoCtl.xaml
@@ -7,16 +7,29 @@
Background="{DynamicResource RegionBrush}">
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/GrowlDemoCtl.xaml.cs b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/GrowlDemoCtl.xaml.cs
index cbf99957..c3474865 100644
--- a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/GrowlDemoCtl.xaml.cs
+++ b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/GrowlDemoCtl.xaml.cs
@@ -1,9 +1,6 @@
namespace HandyControlDemo.UserControl
{
- ///
- /// GrowlDemoGrid.xaml 的交互逻辑
- ///
public partial class GrowlDemoCtl
{
public GrowlDemoCtl()
diff --git a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/HoneycombPanelDemoCtl.xaml b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/HoneycombPanelDemoCtl.xaml
new file mode 100644
index 00000000..9d1f7c91
--- /dev/null
+++ b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/HoneycombPanelDemoCtl.xaml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/HoneycombPanelDemoCtl.xaml.cs b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/HoneycombPanelDemoCtl.xaml.cs
new file mode 100644
index 00000000..13c4d23e
--- /dev/null
+++ b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/HoneycombPanelDemoCtl.xaml.cs
@@ -0,0 +1,10 @@
+namespace HandyControlDemo.UserControl
+{
+ public partial class HoneycombPanelDemoCtl
+ {
+ public HoneycombPanelDemoCtl()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/ImageBrowserDemoCtl.xaml.cs b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/ImageBrowserDemoCtl.xaml.cs
index d40e1b88..da51a2c1 100644
--- a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/ImageBrowserDemoCtl.xaml.cs
+++ b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/ImageBrowserDemoCtl.xaml.cs
@@ -1,9 +1,6 @@
namespace HandyControlDemo.UserControl
{
- ///
- /// ImageBrowserDemoCtl.xaml 的交互逻辑
- ///
public partial class ImageBrowserDemoCtl
{
public ImageBrowserDemoCtl()
diff --git a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/NotificationDemoCtl.xaml b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/NotificationDemoCtl.xaml
new file mode 100644
index 00000000..0f0cdf27
--- /dev/null
+++ b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/NotificationDemoCtl.xaml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/NotificationDemoCtl.xaml.cs b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/NotificationDemoCtl.xaml.cs
new file mode 100644
index 00000000..4a86ef88
--- /dev/null
+++ b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/NotificationDemoCtl.xaml.cs
@@ -0,0 +1,10 @@
+namespace HandyControlDemo.UserControl
+{
+ public partial class NotificationDemoCtl
+ {
+ public NotificationDemoCtl()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/NotifyIconDemoCtl.xaml b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/NotifyIconDemoCtl.xaml
index 98d1ac7c..4149ef39 100644
--- a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/NotifyIconDemoCtl.xaml
+++ b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/NotifyIconDemoCtl.xaml
@@ -5,35 +5,42 @@
xmlns:hc="https://handyorg.github.io/handycontrol"
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:command="http://www.galasoft.ch/mvvmlight"
+ xmlns:data="clr-namespace:HandyControlDemo.Data"
DataContext="{Binding NotifyIconDemo,Source={StaticResource Locator}}"
Background="{DynamicResource RegionBrush}">
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
@@ -49,7 +56,7 @@
-
+
diff --git a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/RelativePanelDemoCtl.xaml b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/RelativePanelDemoCtl.xaml
deleted file mode 100644
index 50fa38b9..00000000
--- a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/RelativePanelDemoCtl.xaml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
diff --git a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/RunningBlockDemoCtl.xaml b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/RunningBlockDemoCtl.xaml
new file mode 100644
index 00000000..da4df59c
--- /dev/null
+++ b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/RunningBlockDemoCtl.xaml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/RunningBlockDemoCtl.xaml.cs b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/RunningBlockDemoCtl.xaml.cs
new file mode 100644
index 00000000..a115d149
--- /dev/null
+++ b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/RunningBlockDemoCtl.xaml.cs
@@ -0,0 +1,10 @@
+namespace HandyControlDemo.UserControl
+{
+ public partial class RunningBlockDemoCtl
+ {
+ public RunningBlockDemoCtl()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/SideMenuDemoCtl.xaml b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/SideMenuDemoCtl.xaml
index 141f9322..2b2ae21d 100644
--- a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/SideMenuDemoCtl.xaml
+++ b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/SideMenuDemoCtl.xaml
@@ -18,17 +18,17 @@
-
+
-
+
-
+
diff --git a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/SplitButtonDemoCtl.xaml b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/SplitButtonDemoCtl.xaml
new file mode 100644
index 00000000..60e55413
--- /dev/null
+++ b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/SplitButtonDemoCtl.xaml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/SplitButtonDemoCtl.xaml.cs b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/SplitButtonDemoCtl.xaml.cs
new file mode 100644
index 00000000..6c369070
--- /dev/null
+++ b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/SplitButtonDemoCtl.xaml.cs
@@ -0,0 +1,17 @@
+using System.Windows;
+
+namespace HandyControlDemo.UserControl
+{
+ public partial class SplitButtonDemoCtl
+ {
+ public SplitButtonDemoCtl()
+ {
+ InitializeComponent();
+ }
+
+ private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
+ {
+ MessageBox.Show("123");
+ }
+ }
+}
diff --git a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/SpriteDemoCtl.xaml b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/SpriteDemoCtl.xaml
new file mode 100644
index 00000000..282b15b0
--- /dev/null
+++ b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/SpriteDemoCtl.xaml
@@ -0,0 +1,12 @@
+
+
+
+
+
diff --git a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/SpriteDemoCtl.xaml.cs b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/SpriteDemoCtl.xaml.cs
new file mode 100644
index 00000000..fa59e94e
--- /dev/null
+++ b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/SpriteDemoCtl.xaml.cs
@@ -0,0 +1,10 @@
+namespace HandyControlDemo.UserControl
+{
+ public partial class SpriteDemoCtl
+ {
+ public SpriteDemoCtl()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/StepBarDemoCtl.xaml.cs b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/StepBarDemoCtl.xaml.cs
index cadb827f..991bab9b 100644
--- a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/StepBarDemoCtl.xaml.cs
+++ b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/StepBarDemoCtl.xaml.cs
@@ -1,9 +1,6 @@
namespace HandyControlDemo.UserControl
{
- ///
- /// StepBarDemoCtl.xaml 的交互逻辑
- ///
public partial class StepBarDemoCtl
{
public StepBarDemoCtl()
diff --git a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/WindowDemoCtl.xaml.cs b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/WindowDemoCtl.xaml.cs
index 0fee133f..b10b0577 100644
--- a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/WindowDemoCtl.xaml.cs
+++ b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/WindowDemoCtl.xaml.cs
@@ -23,12 +23,12 @@ namespace HandyControlDemo.UserControl
{
MessageBox.Show(new MessageBoxInfo
{
- MessageBoxText = Properties.Langs.Lang.GrowlAsk,
+ Message = Properties.Langs.Lang.GrowlAsk,
Caption = Properties.Langs.Lang.Title,
Button = MessageBoxButton.YesNo,
IconBrushKey = ResourceToken.AccentBrush,
IconKey = ResourceToken.AskGeometry,
- Style = ResourceHelper.GetResource
@@ -206,7 +206,7 @@
-
+
@@ -220,8 +220,8 @@
-
-
+
+
@@ -279,12 +279,12 @@
-
+
-
+
@@ -296,8 +296,8 @@
-
-
+
+
@@ -351,7 +351,7 @@
-
+
diff --git a/src/Shared/HandyControl_Shared/Themes/Styles/Base/DateTimePickerBaseStyle.xaml b/src/Shared/HandyControl_Shared/Themes/Styles/Base/DateTimePickerBaseStyle.xaml
index 2eb9d802..f29c6e51 100644
--- a/src/Shared/HandyControl_Shared/Themes/Styles/Base/DateTimePickerBaseStyle.xaml
+++ b/src/Shared/HandyControl_Shared/Themes/Styles/Base/DateTimePickerBaseStyle.xaml
@@ -1,8 +1,8 @@
+ xmlns:interactivity="clr-namespace:HandyControl.Interactivity"
+ xmlns:system="clr-namespace:System;assembly=mscorlib">
@@ -28,7 +28,7 @@
-
+
@@ -67,7 +67,7 @@
-
+
@@ -79,7 +79,7 @@
-
+
@@ -113,12 +113,12 @@
-
+
-
+
@@ -128,7 +128,7 @@
-
+
@@ -162,13 +162,15 @@
@@ -185,7 +187,7 @@
-
+
@@ -199,8 +201,8 @@
-
-
+
+
@@ -258,12 +260,12 @@
-
+
-
+
@@ -275,8 +277,8 @@
-
-
+
+
@@ -330,7 +332,7 @@
-
+
diff --git a/src/Shared/HandyControl_Shared/Themes/Styles/Base/DividerBaseStyle.xaml b/src/Shared/HandyControl_Shared/Themes/Styles/Base/DividerBaseStyle.xaml
new file mode 100644
index 00000000..1a324b26
--- /dev/null
+++ b/src/Shared/HandyControl_Shared/Themes/Styles/Base/DividerBaseStyle.xaml
@@ -0,0 +1,63 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Shared/HandyControl_Shared/Themes/Styles/Base/NumericUpDownBaseStyle.xaml b/src/Shared/HandyControl_Shared/Themes/Styles/Base/NumericUpDownBaseStyle.xaml
index b01ad9fd..e41e3429 100644
--- a/src/Shared/HandyControl_Shared/Themes/Styles/Base/NumericUpDownBaseStyle.xaml
+++ b/src/Shared/HandyControl_Shared/Themes/Styles/Base/NumericUpDownBaseStyle.xaml
@@ -16,7 +16,8 @@
-
+
+
@@ -35,8 +36,8 @@
-
-
+
+
@@ -62,7 +63,7 @@
-
+
@@ -75,8 +76,8 @@
-
-
+
+
@@ -94,12 +95,12 @@
-
+
-
+
@@ -110,8 +111,8 @@
-
-
+
+
@@ -130,13 +131,14 @@
@@ -153,7 +155,7 @@
-
+
@@ -168,9 +170,9 @@
-
-
-
+
+
+
@@ -212,7 +214,7 @@
-
+
@@ -230,9 +232,9 @@
-
-
-
+
+
+
@@ -270,7 +272,7 @@
-
+
diff --git a/src/Shared/HandyControl_Shared/Themes/Styles/Base/PasswordBoxBaseStyle.xaml b/src/Shared/HandyControl_Shared/Themes/Styles/Base/PasswordBoxBaseStyle.xaml
index 6028041e..e40e028c 100644
--- a/src/Shared/HandyControl_Shared/Themes/Styles/Base/PasswordBoxBaseStyle.xaml
+++ b/src/Shared/HandyControl_Shared/Themes/Styles/Base/PasswordBoxBaseStyle.xaml
@@ -1,8 +1,8 @@
+ xmlns:interactivity="clr-namespace:HandyControl.Interactivity"
+ xmlns:system="clr-namespace:System;assembly=mscorlib">
@@ -54,7 +54,7 @@
-
+
@@ -83,12 +83,12 @@
-
+
-
+
@@ -115,15 +115,16 @@
@@ -169,7 +170,7 @@
-
+
@@ -228,14 +229,14 @@
-
+
-
+
@@ -291,17 +292,17 @@
-
+
-
+
-
+
diff --git a/src/Shared/HandyControl_Shared/Themes/Styles/Base/ProgressBarBaseStyle.xaml b/src/Shared/HandyControl_Shared/Themes/Styles/Base/ProgressBarBaseStyle.xaml
index cf0d398a..214e7556 100644
--- a/src/Shared/HandyControl_Shared/Themes/Styles/Base/ProgressBarBaseStyle.xaml
+++ b/src/Shared/HandyControl_Shared/Themes/Styles/Base/ProgressBarBaseStyle.xaml
@@ -142,8 +142,11 @@
-
-
+
+
+
+
+
diff --git a/src/Shared/HandyControl_Shared/Themes/Styles/Base/ProgressButtonBaseStyle.xaml b/src/Shared/HandyControl_Shared/Themes/Styles/Base/ProgressButtonBaseStyle.xaml
index 5f1b92ff..c5606579 100644
--- a/src/Shared/HandyControl_Shared/Themes/Styles/Base/ProgressButtonBaseStyle.xaml
+++ b/src/Shared/HandyControl_Shared/Themes/Styles/Base/ProgressButtonBaseStyle.xaml
@@ -1,7 +1,6 @@
+ xmlns:controls="clr-namespace:HandyControl.Controls">
@@ -32,7 +31,7 @@
-
+
diff --git a/src/Shared/HandyControl_Shared/Themes/Styles/Base/RunningBlockBaseStyle.xaml b/src/Shared/HandyControl_Shared/Themes/Styles/Base/RunningBlockBaseStyle.xaml
new file mode 100644
index 00000000..ba1ee285
--- /dev/null
+++ b/src/Shared/HandyControl_Shared/Themes/Styles/Base/RunningBlockBaseStyle.xaml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Shared/HandyControl_Shared/Themes/Styles/Base/ScrollViewerBaseStyle.xaml b/src/Shared/HandyControl_Shared/Themes/Styles/Base/ScrollViewerBaseStyle.xaml
index 2b4074af..27c91169 100644
--- a/src/Shared/HandyControl_Shared/Themes/Styles/Base/ScrollViewerBaseStyle.xaml
+++ b/src/Shared/HandyControl_Shared/Themes/Styles/Base/ScrollViewerBaseStyle.xaml
@@ -22,7 +22,45 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -30,6 +68,12 @@
+
+
+
+
+
+
@@ -42,7 +86,45 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -50,6 +132,12 @@
+
+
+
+
+
+
@@ -120,10 +208,10 @@
-
+
-
+
@@ -168,10 +256,10 @@
-
+
-
+
diff --git a/src/Shared/HandyControl_Shared/Themes/Styles/Base/SearchBarBaseStyle.xaml b/src/Shared/HandyControl_Shared/Themes/Styles/Base/SearchBarBaseStyle.xaml
index f79bfddd..71b6795f 100644
--- a/src/Shared/HandyControl_Shared/Themes/Styles/Base/SearchBarBaseStyle.xaml
+++ b/src/Shared/HandyControl_Shared/Themes/Styles/Base/SearchBarBaseStyle.xaml
@@ -1,8 +1,8 @@
+ xmlns:interactivity="clr-namespace:HandyControl.Interactivity"
+ xmlns:system="clr-namespace:System;assembly=mscorlib">
@@ -18,7 +18,7 @@
-
+
@@ -42,7 +42,7 @@
-
+
@@ -54,7 +54,7 @@
-
+
@@ -74,12 +74,12 @@
-
+
-
+
@@ -89,7 +89,7 @@
-
+
@@ -109,13 +109,15 @@
@@ -132,7 +134,7 @@
-
+
@@ -146,8 +148,8 @@
-
-
+
+
@@ -191,12 +193,12 @@
-
+
-
+
@@ -208,8 +210,8 @@
-
-
+
+
@@ -249,7 +251,7 @@
-
+
diff --git a/src/Shared/HandyControl_Shared/Themes/Styles/Base/SplitButtonBaseStyle.xaml b/src/Shared/HandyControl_Shared/Themes/Styles/Base/SplitButtonBaseStyle.xaml
new file mode 100644
index 00000000..b173b635
--- /dev/null
+++ b/src/Shared/HandyControl_Shared/Themes/Styles/Base/SplitButtonBaseStyle.xaml
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Shared/HandyControl_Shared/Themes/Styles/Base/TextBoxBaseStyle.xaml b/src/Shared/HandyControl_Shared/Themes/Styles/Base/TextBoxBaseStyle.xaml
index f91ce695..88975e61 100644
--- a/src/Shared/HandyControl_Shared/Themes/Styles/Base/TextBoxBaseStyle.xaml
+++ b/src/Shared/HandyControl_Shared/Themes/Styles/Base/TextBoxBaseStyle.xaml
@@ -1,8 +1,8 @@
+ xmlns:interactivity="clr-namespace:HandyControl.Interactivity"
+ xmlns:system="clr-namespace:System;assembly=mscorlib">
@@ -73,7 +73,7 @@
-
+
@@ -99,12 +99,12 @@
-
+
-
+
@@ -129,13 +129,14 @@
@@ -152,7 +153,7 @@
-
+
@@ -167,7 +168,7 @@
-
+
@@ -209,13 +210,13 @@
-
+
-
+
@@ -227,7 +228,7 @@
-
+
@@ -265,7 +266,7 @@
-
+
diff --git a/src/Shared/HandyControl_Shared/Themes/Styles/Base/TimePickerBaseStyle.xaml b/src/Shared/HandyControl_Shared/Themes/Styles/Base/TimePickerBaseStyle.xaml
index aebdd389..d9859afa 100644
--- a/src/Shared/HandyControl_Shared/Themes/Styles/Base/TimePickerBaseStyle.xaml
+++ b/src/Shared/HandyControl_Shared/Themes/Styles/Base/TimePickerBaseStyle.xaml
@@ -1,8 +1,8 @@
+ xmlns:interactivity="clr-namespace:HandyControl.Interactivity"
+ xmlns:system="clr-namespace:System;assembly=mscorlib">
@@ -28,7 +28,7 @@
-
+
@@ -67,7 +67,7 @@
-
+
@@ -79,7 +79,7 @@
-
+
@@ -113,12 +113,12 @@
-
+
-
+
@@ -128,7 +128,7 @@
-
+
@@ -162,13 +162,15 @@
@@ -185,7 +187,7 @@
-
+
@@ -199,8 +201,8 @@
-
-
+
+
@@ -258,12 +260,12 @@
-
+
-
+
@@ -275,8 +277,8 @@
-
-
+
+
@@ -330,7 +332,7 @@
-
+
diff --git a/src/Shared/HandyControl_Shared/Themes/Styles/Border.xaml b/src/Shared/HandyControl_Shared/Themes/Styles/Border.xaml
index 8a47202a..5bafc2a9 100644
--- a/src/Shared/HandyControl_Shared/Themes/Styles/Border.xaml
+++ b/src/Shared/HandyControl_Shared/Themes/Styles/Border.xaml
@@ -4,10 +4,12 @@
+
+
+
\ No newline at end of file
diff --git a/src/Net_40/HandyControl_Net_40/Themes/Styles/Growl.xaml b/src/Shared/HandyControl_Shared/Themes/Styles/Growl.xaml
similarity index 82%
rename from src/Net_40/HandyControl_Net_40/Themes/Styles/Growl.xaml
rename to src/Shared/HandyControl_Shared/Themes/Styles/Growl.xaml
index d28b4fa2..f54f7525 100644
--- a/src/Net_40/HandyControl_Net_40/Themes/Styles/Growl.xaml
+++ b/src/Shared/HandyControl_Shared/Themes/Styles/Growl.xaml
@@ -10,6 +10,26 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/Shared/HandyControl_Shared/Themes/Styles/RunningBlock.xaml b/src/Shared/HandyControl_Shared/Themes/Styles/RunningBlock.xaml
new file mode 100644
index 00000000..68f2a7b7
--- /dev/null
+++ b/src/Shared/HandyControl_Shared/Themes/Styles/RunningBlock.xaml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Shared/HandyControl_Shared/Themes/Styles/SplitButton.xaml b/src/Shared/HandyControl_Shared/Themes/Styles/SplitButton.xaml
new file mode 100644
index 00000000..3e3ba2dc
--- /dev/null
+++ b/src/Shared/HandyControl_Shared/Themes/Styles/SplitButton.xaml
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Shared/HandyControl_Shared/Themes/Styles/Sprite.xaml b/src/Shared/HandyControl_Shared/Themes/Styles/Sprite.xaml
new file mode 100644
index 00000000..420b4883
--- /dev/null
+++ b/src/Shared/HandyControl_Shared/Themes/Styles/Sprite.xaml
@@ -0,0 +1,22 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Shared/HandyControl_Shared/Themes/Styles/Style.xaml b/src/Shared/HandyControl_Shared/Themes/Styles/Style.xaml
index bd4bbbf4..ea4bb002 100644
--- a/src/Shared/HandyControl_Shared/Themes/Styles/Style.xaml
+++ b/src/Shared/HandyControl_Shared/Themes/Styles/Style.xaml
@@ -70,6 +70,12 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Shared/HandyControl_Shared/Themes/Styles/TabControl.xaml b/src/Shared/HandyControl_Shared/Themes/Styles/TabControl.xaml
index dc715ab0..cc9e0778 100644
--- a/src/Shared/HandyControl_Shared/Themes/Styles/TabControl.xaml
+++ b/src/Shared/HandyControl_Shared/Themes/Styles/TabControl.xaml
@@ -13,6 +13,12 @@
+
+
+
+
+
+
-
\ No newline at end of file
+
diff --git a/src/Shared/HandyControl_Shared/Themes/Styles/TransitioningContentControl.xaml b/src/Shared/HandyControl_Shared/Themes/Styles/TransitioningContentControl.xaml
index 81fb9f6a..0e238931 100644
--- a/src/Shared/HandyControl_Shared/Themes/Styles/TransitioningContentControl.xaml
+++ b/src/Shared/HandyControl_Shared/Themes/Styles/TransitioningContentControl.xaml
@@ -11,7 +11,7 @@
-
+
@@ -76,29 +76,27 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Shared/HandyControl_Shared/Tools/Converter/ColLayoutConverter.cs b/src/Shared/HandyControl_Shared/Tools/Converter/ColLayoutConverter.cs
new file mode 100644
index 00000000..c4bbfb88
--- /dev/null
+++ b/src/Shared/HandyControl_Shared/Tools/Converter/ColLayoutConverter.cs
@@ -0,0 +1,161 @@
+using System;
+using System.ComponentModel;
+using System.ComponentModel.Design.Serialization;
+using System.Globalization;
+using System.Security;
+using System.Text;
+using HandyControl.Tools.Extension;
+
+namespace HandyControl.Tools.Converter
+{
+ public class ColLayoutConverter : TypeConverter
+ {
+ public override bool CanConvertFrom(ITypeDescriptorContext typeDescriptorContext, Type sourceType)
+ {
+ switch (Type.GetTypeCode(sourceType))
+ {
+ case TypeCode.Int16:
+ case TypeCode.UInt16:
+ case TypeCode.Int32:
+ case TypeCode.UInt32:
+ case TypeCode.Int64:
+ case TypeCode.UInt64:
+ case TypeCode.Single:
+ case TypeCode.Double:
+ case TypeCode.Decimal:
+ case TypeCode.String:
+ return true;
+ default:
+ return false;
+ }
+ }
+
+ public override bool CanConvertTo(ITypeDescriptorContext typeDescriptorContext, Type destinationType) =>
+ destinationType == typeof(InstanceDescriptor) || destinationType == typeof(string);
+
+ public override object ConvertFrom(ITypeDescriptorContext typeDescriptorContext, CultureInfo cultureInfo, object source)
+ {
+ if (source == null) throw GetConvertFromException(null);
+
+ switch (source)
+ {
+ case string s:
+ return FromString(s, cultureInfo);
+ case double d:
+ return new ColLayout((int)d);
+ default:
+ return new ColLayout(Convert.ToInt32(source, cultureInfo));
+ }
+ }
+
+ [SecurityCritical]
+ public override object ConvertTo(ITypeDescriptorContext typeDescriptorContext, CultureInfo cultureInfo, object value, Type destinationType)
+ {
+ if (value == null) throw new ArgumentNullException(nameof(value));
+
+ if (destinationType == null) throw new ArgumentNullException(nameof(destinationType));
+
+ if (!(value is ColLayout)) throw new ArgumentException("UnexpectedParameterType");
+
+ var th = (ColLayout)value;
+ if (destinationType == typeof(string)) return ToString(th, cultureInfo);
+ if (destinationType == typeof(InstanceDescriptor))
+ {
+ var ci = typeof(ColLayout).GetConstructor(new[] { typeof(int), typeof(int), typeof(int), typeof(int), typeof(int), typeof(int) });
+ return new InstanceDescriptor(ci, new object[] { th.Xs, th.Sm, th.Md, th.Lg, th.Xl, th.Xxl });
+ }
+
+ throw new ArgumentException("CannotConvertType");
+ }
+
+ private static string ToString(ColLayout th, CultureInfo cultureInfo)
+ {
+ var listSeparator = TokenizerHelper.GetNumericListSeparator(cultureInfo);
+
+ // Initial capacity [128] is an estimate based on a sum of:
+ // 72 = 6x double (twelve digits is generous for the range of values likely)
+ // 4 = 4x separator characters
+ var sb = new StringBuilder(128);
+
+ sb.Append(th.Xs.ToString(cultureInfo));
+ sb.Append(listSeparator);
+ sb.Append(th.Sm.ToString(cultureInfo));
+ sb.Append(listSeparator);
+ sb.Append(th.Md.ToString(cultureInfo));
+ sb.Append(listSeparator);
+ sb.Append(th.Lg.ToString(cultureInfo));
+ sb.Append(listSeparator);
+ sb.Append(th.Xl.ToString(cultureInfo));
+ sb.Append(listSeparator);
+ sb.Append(th.Xxl.ToString(cultureInfo));
+ return th.ToString();
+ }
+
+ private static ColLayout FromString(string s, CultureInfo cultureInfo)
+ {
+ var th = new TokenizerHelper(s, cultureInfo);
+ var lengths = new int[6];
+ var i = 0;
+
+ while (th.NextToken())
+ {
+ if (i >= 6)
+ {
+ i = 7; // Set i to a bad value.
+ break;
+ }
+
+ lengths[i] = th.GetCurrentToken().Value();
+ i++;
+ }
+
+ switch (i)
+ {
+ case 1:
+ return new ColLayout(lengths[0]);
+ case 2:
+ return new ColLayout
+ {
+ Xs = lengths[0],
+ Sm = lengths[1]
+ };
+ case 3:
+ return new ColLayout
+ {
+ Xs = lengths[0],
+ Sm = lengths[1],
+ Md = lengths[2]
+ };
+ case 4:
+ return new ColLayout
+ {
+ Xs = lengths[0],
+ Sm = lengths[1],
+ Md = lengths[2],
+ Lg = lengths[3]
+ };
+ case 5:
+ return new ColLayout
+ {
+ Xs = lengths[0],
+ Sm = lengths[1],
+ Md = lengths[2],
+ Lg = lengths[3],
+ Xl = lengths[4]
+ };
+ case 6:
+ return new ColLayout
+ {
+ Xs = lengths[0],
+ Sm = lengths[1],
+ Md = lengths[2],
+ Lg = lengths[3],
+ Xl = lengths[4],
+ Xxl = lengths[5]
+ };
+ }
+
+ throw new FormatException("InvalidStringColLayout");
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Shared/HandyControl_Shared/Tools/Converter/CornerRadiusSplitConverter.cs b/src/Shared/HandyControl_Shared/Tools/Converter/CornerRadiusSplitConverter.cs
new file mode 100644
index 00000000..7ae70d8f
--- /dev/null
+++ b/src/Shared/HandyControl_Shared/Tools/Converter/CornerRadiusSplitConverter.cs
@@ -0,0 +1,33 @@
+using System;
+using System.Globalization;
+using System.Windows;
+using System.Windows.Data;
+
+namespace HandyControl.Tools.Converter
+{
+ public class CornerRadiusSplitConverter : IValueConverter
+ {
+ public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ if (value is CornerRadius cornerRadius)
+ {
+ if (parameter is string str)
+ {
+ var arr = str.Split(',');
+ if (arr.Length != 4) return cornerRadius;
+
+ return new CornerRadius(arr[0].Equals("1") ? cornerRadius.TopLeft : 0,
+ arr[1].Equals("1") ? cornerRadius.TopRight : 0,
+ arr[1].Equals("1") ? cornerRadius.BottomRight : 0,
+ arr[1].Equals("1") ? cornerRadius.BottomLeft : 0);
+ }
+ }
+ return value;
+ }
+
+ public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ throw new NotImplementedException();
+ }
+ }
+}
diff --git a/src/Shared/HandyControl_Shared/Tools/Converter/Double2GridLengthConverter.cs b/src/Shared/HandyControl_Shared/Tools/Converter/Double2GridLengthConverter.cs
new file mode 100644
index 00000000..f8c0b184
--- /dev/null
+++ b/src/Shared/HandyControl_Shared/Tools/Converter/Double2GridLengthConverter.cs
@@ -0,0 +1,29 @@
+using System;
+using System.Globalization;
+using System.Windows;
+using System.Windows.Data;
+
+namespace HandyControl.Tools.Converter
+{
+ public class Double2GridLengthConverter : IValueConverter
+ {
+ public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ if (value is double doubleValue)
+ {
+ if (double.IsNaN(doubleValue) || double.IsInfinity(doubleValue))
+ {
+ return new GridLength(1.0, GridUnitType.Star);
+ }
+ return new GridLength(doubleValue);
+ }
+
+ return new GridLength(0);
+ }
+
+ public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ throw new NotImplementedException();
+ }
+ }
+}
diff --git a/src/Shared/HandyControl_Shared/Tools/Converter/ThicknessSplitConverter.cs b/src/Shared/HandyControl_Shared/Tools/Converter/ThicknessSplitConverter.cs
new file mode 100644
index 00000000..91cf6004
--- /dev/null
+++ b/src/Shared/HandyControl_Shared/Tools/Converter/ThicknessSplitConverter.cs
@@ -0,0 +1,33 @@
+using System;
+using System.Globalization;
+using System.Windows;
+using System.Windows.Data;
+
+namespace HandyControl.Tools.Converter
+{
+ public class ThicknessSplitConverter : IValueConverter
+ {
+ public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ if (value is Thickness thickness)
+ {
+ if (parameter is string str)
+ {
+ var arr = str.Split(',');
+ if (arr.Length != 4) return thickness;
+
+ return new Thickness(arr[0].Equals("1") ? thickness.Left : 0,
+ arr[1].Equals("1") ? thickness.Top : 0,
+ arr[1].Equals("1") ? thickness.Right : 0,
+ arr[1].Equals("1") ? thickness.Bottom : 0);
+ }
+ }
+ return value;
+ }
+
+ public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ throw new NotImplementedException();
+ }
+ }
+}
diff --git a/src/Shared/HandyControl_Shared/Tools/Extension/ColLayout.cs b/src/Shared/HandyControl_Shared/Tools/Extension/ColLayout.cs
index f0573647..4db36da3 100644
--- a/src/Shared/HandyControl_Shared/Tools/Extension/ColLayout.cs
+++ b/src/Shared/HandyControl_Shared/Tools/Extension/ColLayout.cs
@@ -1,13 +1,20 @@
using System;
+using System.ComponentModel;
+using System.Globalization;
+using System.Text;
using System.Windows.Markup;
using HandyControl.Data;
+using HandyControl.Tools.Converter;
namespace HandyControl.Tools.Extension
{
+ [TypeConverter(typeof(ColLayoutConverter))]
public class ColLayout : MarkupExtension
{
public static readonly int ColMaxCellCount = 24;
+ public static readonly int HalfColMaxCellCount = 12;
+
public static readonly int XsMaxWidth = 768;
public static readonly int SmMaxWidth = 992;
@@ -30,6 +37,31 @@ namespace HandyControl.Tools.Extension
public int Xxl { get; set; } = 2;
+ public ColLayout()
+ {
+
+ }
+
+ public ColLayout(int uniformWidth)
+ {
+ Xs = uniformWidth;
+ Sm = uniformWidth;
+ Md = uniformWidth;
+ Lg = uniformWidth;
+ Xl = uniformWidth;
+ Xxl = uniformWidth;
+ }
+
+ public ColLayout(int xs, int sm, int md, int lg, int xl, int xxl)
+ {
+ Xs = xs;
+ Sm = sm;
+ Md = md;
+ Lg = lg;
+ Xl = xl;
+ Xxl = xxl;
+ }
+
public override object ProvideValue(IServiceProvider serviceProvider)
{
return new ColLayout
@@ -67,5 +99,29 @@ namespace HandyControl.Tools.Extension
}
return ColLayoutStatus.Xxl;
}
+
+ public override string ToString()
+ {
+ var cultureInfo = CultureInfo.CurrentCulture;
+ var listSeparator = TokenizerHelper.GetNumericListSeparator(cultureInfo);
+
+ // Initial capacity [128] is an estimate based on a sum of:
+ // 72 = 6x double (twelve digits is generous for the range of values likely)
+ // 4 = 4x separator characters
+ var sb = new StringBuilder(128);
+
+ sb.Append(Xs.ToString(cultureInfo));
+ sb.Append(listSeparator);
+ sb.Append(Sm.ToString(cultureInfo));
+ sb.Append(listSeparator);
+ sb.Append(Md.ToString(cultureInfo));
+ sb.Append(listSeparator);
+ sb.Append(Lg.ToString(cultureInfo));
+ sb.Append(listSeparator);
+ sb.Append(Xl.ToString(cultureInfo));
+ sb.Append(listSeparator);
+ sb.Append(Xxl.ToString(cultureInfo));
+ return sb.ToString();
+ }
}
}
\ No newline at end of file
diff --git a/src/Shared/HandyControl_Shared/Tools/GithubGravatarGenerator.cs b/src/Shared/HandyControl_Shared/Tools/Generator/GithubGravatarGenerator.cs
similarity index 100%
rename from src/Shared/HandyControl_Shared/Tools/GithubGravatarGenerator.cs
rename to src/Shared/HandyControl_Shared/Tools/Generator/GithubGravatarGenerator.cs
diff --git a/src/Shared/HandyControl_Shared/Tools/Generator/HatchBrushGenerator.cs b/src/Shared/HandyControl_Shared/Tools/Generator/HatchBrushGenerator.cs
new file mode 100644
index 00000000..d57d11ac
--- /dev/null
+++ b/src/Shared/HandyControl_Shared/Tools/Generator/HatchBrushGenerator.cs
@@ -0,0 +1,117 @@
+using System;
+using System.Windows;
+using System.Windows.Media;
+using HandyControl.Data;
+
+namespace HandyControl.Tools
+{
+ public class HatchBrushGenerator
+ {
+ private static readonly byte[][] HatchBrushes =
+ {
+ new byte[] {0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00}, // Horizontal
+ new byte[] {0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08}, // Vertical
+ new byte[] {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80}, // ForwardDiagonal
+ new byte[] {0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01}, // BackwardDiagonal
+ new byte[] {0x08, 0x08, 0x08, 0xff, 0x08, 0x08, 0x08, 0x08}, // Cross
+ new byte[] {0x81, 0x42, 0x24, 0x18, 0x18, 0x24, 0x42, 0x81}, // DiagonalCross
+ new byte[] {0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x80}, // Percent05
+ new byte[] {0x00, 0x02, 0x00, 0x88, 0x00, 0x20, 0x00, 0x88}, // Percent10
+ new byte[] {0x00, 0x22, 0x00, 0xcc, 0x00, 0x22, 0x00, 0xcc}, // Percent20
+ new byte[] {0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc}, // Percent25
+ new byte[] {0x00, 0xcc, 0x04, 0xcc, 0x00, 0xcc, 0x40, 0xcc}, // Percent30
+ new byte[] {0x44, 0xcc, 0x22, 0xcc, 0x44, 0xcc, 0x22, 0xcc}, // Percent40
+ new byte[] {0x55, 0xcc, 0x55, 0xcc, 0x55, 0xcc, 0x55, 0xcc}, // Percent50
+ new byte[] {0x55, 0xcd, 0x55, 0xee, 0x55, 0xdc, 0x55, 0xee}, // Percent60
+ new byte[] {0x55, 0xdd, 0x55, 0xff, 0x55, 0xdd, 0x55, 0xff}, // Percent70
+ new byte[] {0x55, 0xff, 0x55, 0xff, 0x55, 0xff, 0x55, 0xff}, // Percent75
+ new byte[] {0x55, 0xff, 0x59, 0xff, 0x55, 0xff, 0x99, 0xff}, // Percent80
+ new byte[] {0x77, 0xff, 0xdd, 0xff, 0x77, 0xff, 0xfd, 0xff}, // Percent90
+ new byte[] {0x11, 0x22, 0x44, 0x88, 0x11, 0x22, 0x44, 0x88}, // LightDownwardDiagonal
+ new byte[] {0x88, 0x44, 0x22, 0x11, 0x88, 0x44, 0x22, 0x11}, // LightUpwardDiagonal
+ new byte[] {0x99, 0x33, 0x66, 0xcc, 0x99, 0x33, 0x66, 0xcc}, // DarkDownwardDiagonal
+ new byte[] {0xcc, 0x66, 0x33, 0x99, 0xcc, 0x66, 0x33, 0x99}, // DarkUpwardDiagonal
+ new byte[] {0xc1, 0x83, 0x07, 0x0e, 0x1c, 0x38, 0x70, 0xe0}, // WideDownwardDiagonal
+ new byte[] {0xe0, 0x70, 0x38, 0x1c, 0x0e, 0x07, 0x83, 0xc1}, // WideUpwardDiagonal
+ new byte[] {0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88}, // LightVertical
+ new byte[] {0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff}, // LightHorizontal
+ new byte[] {0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa}, // NarrowVertical
+ new byte[] {0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff}, // NarrowHorizontal
+ new byte[] {0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc}, // DarkVertical
+ new byte[] {0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff}, // DarkHorizontal
+ new byte[] {0x11, 0x22, 0x44, 0x88, 0x00, 0x00, 0x00, 0x00}, // DashedDownwardDiagonal
+ new byte[] {0x88, 0x44, 0x22, 0x11, 0x00, 0x00, 0x00, 0x00}, // DashedUpwardDiagonal
+ new byte[] {0x0f, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00}, // DashedHorizontal
+ new byte[] {0x01, 0x01, 0x01, 0x01, 0x10, 0x10, 0x10, 0x10}, // DashedVertical
+ new byte[] {0x01, 0x08, 0x80, 0x10, 0x02, 0x40, 0x04, 0x20}, // SmallConfetti
+ new byte[] {0x03, 0x63, 0x6c, 0x0c, 0xc0, 0xc6, 0x36, 0x30}, // LargeConfetti
+ new byte[] {0x03, 0x84, 0x48, 0x30, 0x03, 0x84, 0x48, 0x30}, // ZigZag
+ new byte[] {0x30, 0x49, 0x06, 0x00, 0x30, 0x49, 0x06, 0x00}, // Wave
+ new byte[] {0x81, 0x42, 0x24, 0x18, 0x08, 0x04, 0x02, 0x01}, // DiagonalBrick
+ new byte[] {0xff, 0x01, 0x01, 0x01, 0xff, 0x10, 0x10, 0x10}, // HorizontalBrick
+ new byte[] {0x11, 0x82, 0x44, 0xa8, 0x11, 0xa2, 0x44, 0x2a}, // Weave
+ new byte[] {0x55, 0xaa, 0x55, 0xaa, 0x0f, 0x0f, 0x0f, 0x0f}, // Plaid
+ new byte[] {0x02, 0x01, 0x02, 0x00, 0x10, 0x20, 0x10, 0x00}, // Divot
+ new byte[] {0x55, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00}, // DottedGrid
+ new byte[] {0x11, 0x00, 0x04, 0x00, 0x11, 0x00, 0x40, 0x00}, // DottedDiamond
+ new byte[] {0x03, 0x0c, 0x10, 0x20, 0x20, 0x30, 0x48, 0x84}, // Shingle
+ new byte[] {0xff, 0x33, 0xff, 0xcc, 0xff, 0x33, 0xff, 0xcc}, // Trellis
+ new byte[] {0xee, 0x19, 0x1f, 0x1f, 0xee, 0x91, 0xf1, 0xf1}, // Sphere
+ new byte[] {0xff, 0x11, 0x11, 0x11, 0xff, 0x11, 0x11, 0x11}, // SmallGrid
+ new byte[] {0x33, 0x33, 0xcc, 0xcc, 0x33, 0x33, 0xcc, 0xcc}, // SmallCheckerBoard
+ new byte[] {0x0f, 0x0f, 0x0f, 0x0f, 0xf0, 0xf0, 0xf0, 0xf0}, // LargeCheckerBoard
+ new byte[] {0x01, 0x82, 0x44, 0x28, 0x10, 0x28, 0x44, 0x82}, // OutlinedDiamond
+ new byte[] {0x08, 0x1c, 0x3e, 0x7f, 0x3e, 0x1c, 0x08, 0x00} // SolidDiamond
+ };
+
+ public Brush GetHatchBrush(HatchStyle hatchStyle, Color foreColor, Color backColor)
+ {
+ var hatchData = GetHatchData(hatchStyle);
+
+ var foreGeometryGroup = new GeometryGroup();
+
+ for (var y = 0; y < 8; y++)
+ {
+ for (var x = 0; x < 8; x++)
+ {
+ if ((hatchData[y] & (0x80 >> x)) > 0)
+ {
+ foreGeometryGroup.Children.Add(new RectangleGeometry(new Rect(x, y, 1, 1)));
+ }
+ }
+ }
+
+ var drawingBrush = new DrawingBrush
+ {
+ Viewport = new Rect(0, 0, 8, 8),
+ ViewportUnits = BrushMappingMode.Absolute,
+ Stretch = Stretch.None,
+ TileMode = TileMode.Tile,
+ Drawing = new DrawingGroup
+ {
+ Children =
+ {
+ new GeometryDrawing
+ {
+ Brush = new SolidColorBrush(backColor),
+ Geometry = new RectangleGeometry(new Rect(0, 0, 8, 8))
+ },
+ new GeometryDrawing
+ {
+ Brush = new SolidColorBrush(foreColor),
+ Geometry = foreGeometryGroup
+ }
+ }
+ }
+ };
+ RenderOptions.SetCachingHint(drawingBrush, CachingHint.Cache);
+
+ return drawingBrush;
+ }
+
+ private byte[] GetHatchData(HatchStyle hatchStyle) =>
+ hatchStyle < HatchStyle.Horizontal || hatchStyle > HatchStyle.SolidDiamond
+ ? throw new ArgumentOutOfRangeException(nameof(hatchStyle))
+ : HatchBrushes[(int)hatchStyle];
+ }
+}
diff --git a/src/Shared/HandyControl_Shared/Tools/Helper/AnimationHelper.cs b/src/Shared/HandyControl_Shared/Tools/Helper/AnimationHelper.cs
index feeb9cce..851a8dc1 100644
--- a/src/Shared/HandyControl_Shared/Tools/Helper/AnimationHelper.cs
+++ b/src/Shared/HandyControl_Shared/Tools/Helper/AnimationHelper.cs
@@ -1,6 +1,10 @@
using System;
+using System.Text;
+using System.Text.RegularExpressions;
using System.Windows;
+using System.Windows.Media;
using System.Windows.Media.Animation;
+using HandyControl.Tools.Extension;
namespace HandyControl.Tools
{
@@ -15,7 +19,7 @@ namespace HandyControl.Tools
///
///
///
- public static ThicknessAnimation CreateAnimation(Thickness thickness = default(Thickness), double milliseconds = 200)
+ public static ThicknessAnimation CreateAnimation(Thickness thickness = default, double milliseconds = 200)
{
return new ThicknessAnimation(thickness, new Duration(TimeSpan.FromMilliseconds(milliseconds)))
{
@@ -36,5 +40,55 @@ namespace HandyControl.Tools
EasingFunction = new PowerEase { EasingMode = EasingMode.EaseInOut }
};
}
+
+ internal static void DecomposeGeometryStr(string geometryStr, out double[] arr)
+ {
+ var collection = Regex.Matches(geometryStr, RegularPatterns.DigitsPattern);
+ arr = new double[collection.Count];
+ for (var i = 0; i < collection.Count; i++)
+ {
+ arr[i] = collection[i].Value.Value();
+ }
+ }
+
+ internal static Geometry ComposeGeometry(string[] strings, double[] arr)
+ {
+ var builder = new StringBuilder(strings[0]);
+ for (var i = 0; i < arr.Length; i++)
+ {
+ var s = strings[i + 1];
+ var n = arr[i];
+ if (!double.IsNaN(n))
+ {
+ builder.Append(n).Append(s);
+ }
+ }
+
+ return Geometry.Parse(builder.ToString());
+ }
+
+ internal static Geometry InterpolateGeometry(double[] from, double[] to, double progress, string[] strings)
+ {
+ var accumulated = new double[to.Length];
+ for (var i = 0; i < to.Length; i++)
+ {
+ var fromValue = from[i];
+ accumulated[i] = fromValue + (to[i] - fromValue) * progress;
+ }
+
+ return ComposeGeometry(strings, accumulated);
+ }
+
+ internal static double[] InterpolateGeometryValue(double[] from, double[] to, double progress)
+ {
+ var accumulated = new double[to.Length];
+ for (var i = 0; i < to.Length; i++)
+ {
+ var fromValue = from[i];
+ accumulated[i] = fromValue + (to[i] - fromValue) * progress;
+ }
+
+ return accumulated;
+ }
}
}
\ No newline at end of file
diff --git a/src/Shared/HandyControl_Shared/Tools/Helper/ConfigHelper.cs b/src/Shared/HandyControl_Shared/Tools/Helper/ConfigHelper.cs
index 915f0869..21357505 100644
--- a/src/Shared/HandyControl_Shared/Tools/Helper/ConfigHelper.cs
+++ b/src/Shared/HandyControl_Shared/Tools/Helper/ConfigHelper.cs
@@ -66,4 +66,4 @@ namespace HandyControl.Tools
}
#endif
}
-}
\ No newline at end of file
+}
diff --git a/src/Shared/HandyControl_Shared/Tools/Helper/CreateParams.cs b/src/Shared/HandyControl_Shared/Tools/Helper/CreateParams.cs
deleted file mode 100644
index 03f4d550..00000000
--- a/src/Shared/HandyControl_Shared/Tools/Helper/CreateParams.cs
+++ /dev/null
@@ -1,54 +0,0 @@
-using System;
-using System.Text;
-
-namespace HandyControl.Tools
-{
- internal class CreateParams
- {
- public string ClassName { get; set; }
-
- public string Caption { get; set; }
-
- public int Style { get; set; }
-
- public int ExStyle{ get; set; }
-
- public int ClassStyle { get; set; }
-
- public int X { get; set; }
-
- public int Y { get; set; }
-
- public int Width { get; set; }
-
- public int Height { get; set; }
-
- public IntPtr Parent { get; set; }
-
- public object Param { get; set; }
-
- public override string ToString()
- {
- var sb = new StringBuilder(64);
- sb.Append("CreateParams {'");
- sb.Append(ClassName);
- sb.Append("', '");
- sb.Append(Caption);
- sb.Append("', 0x");
- sb.Append(Convert.ToString(Style, 16));
- sb.Append(", 0x");
- sb.Append(Convert.ToString(ExStyle, 16));
- sb.Append(", {");
- sb.Append(X);
- sb.Append(", ");
- sb.Append(Y);
- sb.Append(", ");
- sb.Append(Width);
- sb.Append(", ");
- sb.Append(Height);
- sb.Append("}");
- sb.Append("}");
- return sb.ToString();
- }
- }
-}
\ No newline at end of file
diff --git a/src/Shared/HandyControl_Shared/Tools/Helper/TokenizerHelper.cs b/src/Shared/HandyControl_Shared/Tools/Helper/TokenizerHelper.cs
new file mode 100644
index 00000000..2911bf39
--- /dev/null
+++ b/src/Shared/HandyControl_Shared/Tools/Helper/TokenizerHelper.cs
@@ -0,0 +1,233 @@
+//---------------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All rights reserved.
+//
+// File: TokenizerHelper.cs
+//
+// Description: This file contains the implementation of TokenizerHelper.
+// This class should be used by most - if not all - MIL parsers.
+//
+// History:
+// 05/19/2003 : Microsoft - Created it
+// 05/20/2003 : Microsoft - Moved to Shared
+//
+//---------------------------------------------------------------------------
+
+using System;
+using System.Globalization;
+
+namespace HandyControl.Tools
+{
+ internal class TokenizerHelper
+ {
+ private char _quoteChar;
+
+ private char _argSeparator;
+
+ private string _str;
+
+ private int _strLen;
+
+ private int _charIndex;
+
+ private int _currentTokenIndex;
+
+ private int _currentTokenLength;
+
+ public bool FoundSeparator { get; private set; }
+
+ public TokenizerHelper(string str, IFormatProvider formatProvider)
+ {
+ var numberSeparator = GetNumericListSeparator(formatProvider);
+ Initialize(str, '\'', numberSeparator);
+ }
+
+ private void Initialize(string str, char quoteChar, char separator)
+ {
+ _str = str;
+ _strLen = str?.Length ?? 0;
+ _currentTokenIndex = -1;
+ _quoteChar = quoteChar;
+ _argSeparator = separator;
+
+ // immediately forward past any whitespace so
+ // NextToken() logic always starts on the first
+ // character of the next token.
+ while (_charIndex < _strLen)
+ {
+ if (!char.IsWhiteSpace(_str, _charIndex))
+ {
+ break;
+ }
+
+ ++_charIndex;
+ }
+ }
+
+ public string GetCurrentToken() =>
+ _currentTokenIndex < 0 ? null : _str.Substring(_currentTokenIndex, _currentTokenLength);
+
+ internal bool NextToken() => NextToken(false);
+
+ public bool NextToken(bool allowQuotedToken) => NextToken(allowQuotedToken, _argSeparator);
+
+ public bool NextToken(bool allowQuotedToken, char separator)
+ {
+ _currentTokenIndex = -1; // reset the currentTokenIndex
+ FoundSeparator = false; // reset
+
+ // If we're at end of the string, just return false.
+ if (_charIndex >= _strLen)
+ {
+ return false;
+ }
+
+ var currentChar = _str[_charIndex];
+
+ // setup the quoteCount
+ var quoteCount = 0;
+
+ // If we are allowing a quoted token and this token begins with a quote,
+ // set up the quote count and skip the initial quote
+ if (allowQuotedToken &&
+ currentChar == _quoteChar)
+ {
+ quoteCount++; // increment quote count
+ ++_charIndex; // move to next character
+ }
+
+ var newTokenIndex = _charIndex;
+ var newTokenLength = 0;
+
+ // loop until hit end of string or hit a , or whitespace
+ // if at end of string ust return false.
+ while (_charIndex < _strLen)
+ {
+ currentChar = _str[_charIndex];
+
+ // if have a QuoteCount and this is a quote
+ // decrement the quoteCount
+ if (quoteCount > 0)
+ {
+ // if anything but a quoteChar we move on
+ if (currentChar == _quoteChar)
+ {
+ --quoteCount;
+
+ // if at zero which it always should for now
+ // break out of the loop
+ if (0 == quoteCount)
+ {
+ ++_charIndex; // move past the quote
+ break;
+ }
+ }
+ }
+ else if (char.IsWhiteSpace(currentChar) || currentChar == separator)
+ {
+ if (currentChar == separator)
+ {
+ FoundSeparator = true;
+ }
+ break;
+ }
+
+ ++_charIndex;
+ ++newTokenLength;
+ }
+
+ // if quoteCount isn't zero we hit the end of the string
+ // before the ending quote
+ if (quoteCount > 0)
+ {
+ throw new InvalidOperationException("TokenizerHelperMissingEndQuote");
+ }
+
+ ScanToNextToken(separator); // move so at the start of the nextToken for next call
+
+ // finally made it, update the _currentToken values
+ _currentTokenIndex = newTokenIndex;
+ _currentTokenLength = newTokenLength;
+
+ if (_currentTokenLength < 1)
+ {
+ throw new InvalidOperationException("TokenizerHelperEmptyToken");
+ }
+
+ return true;
+ }
+
+ private void ScanToNextToken(char separator)
+ {
+ // if already at end of the string don't bother
+ if (_charIndex >= _strLen) return;
+
+ var currentChar = _str[_charIndex];
+
+ // check that the currentChar is a space or the separator. If not
+ // we have an error. this can happen in the quote case
+ // that the char after the quotes string isn't a char.
+ if (currentChar != separator && !char.IsWhiteSpace(currentChar))
+ {
+ throw new InvalidOperationException("TokenizerHelperExtraDataEncountered");
+ }
+
+ // loop until hit a character that isn't
+ // an argument separator or whitespace.
+ // !!!Todo: if more than one argSet throw an exception
+ var argSepCount = 0;
+ while (_charIndex < _strLen)
+ {
+ currentChar = _str[_charIndex];
+
+ if (currentChar == separator)
+ {
+ FoundSeparator = true;
+ ++argSepCount;
+ _charIndex++;
+
+ if (argSepCount > 1)
+ {
+ throw new InvalidOperationException("TokenizerHelperEmptyToken");
+ }
+ }
+ else if (char.IsWhiteSpace(currentChar))
+ {
+ ++_charIndex;
+ }
+ else
+ {
+ break;
+ }
+ }
+
+ // if there was a separatorChar then we shouldn't be
+ // at the end of string or means there was a separator
+ // but there isn't an arg
+
+ if (argSepCount > 0 && _charIndex >= _strLen)
+ {
+ throw new InvalidOperationException("TokenizerHelperEmptyToken");
+ }
+ }
+
+ internal static char GetNumericListSeparator(IFormatProvider provider)
+ {
+ var numericSeparator = ',';
+
+ // Get the NumberFormatInfo out of the provider, if possible
+ // If the IFormatProvider doesn't not contain a NumberFormatInfo, then
+ // this method returns the current culture's NumberFormatInfo.
+ var numberFormat = NumberFormatInfo.GetInstance(provider);
+
+ // Is the decimal separator is the same as the list separator?
+ // If so, we use the ";".
+ if (numberFormat.NumberDecimalSeparator.Length > 0 && numericSeparator == numberFormat.NumberDecimalSeparator[0])
+ {
+ numericSeparator = ';';
+ }
+
+ return numericSeparator;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Shared/HandyControl_Shared/Tools/Helper/VisualHelper.cs b/src/Shared/HandyControl_Shared/Tools/Helper/VisualHelper.cs
index 715e02ca..489a0d49 100644
--- a/src/Shared/HandyControl_Shared/Tools/Helper/VisualHelper.cs
+++ b/src/Shared/HandyControl_Shared/Tools/Helper/VisualHelper.cs
@@ -1,17 +1,12 @@
using System;
-using System.Collections;
-using System.ComponentModel;
using System.Linq;
-using System.Runtime.InteropServices;
-using System.Security;
using System.Windows;
+using System.Windows.Interop;
using System.Windows.Media;
-using HandyControl.Tools.Interop;
-using HandyControl.Tools.Extension;
namespace HandyControl.Tools
{
- public class VisualHelper
+ public static class VisualHelper
{
internal static VisualStateGroup TryGetVisualStateGroup(DependencyObject d, string groupName)
{
@@ -34,7 +29,7 @@ namespace HandyControl.Tools
: null;
}
- internal static T GetChild(DependencyObject d) where T : DependencyObject
+ public static T GetChild(DependencyObject d) where T : DependencyObject
{
if (d is T t)
{
@@ -52,136 +47,7 @@ namespace HandyControl.Tools
return default;
}
- ///
- /// 获取当前应用中处于激活的一个窗口
- ///
- ///
- public static Window GetActiveWindow() => Application.Current.Windows.OfType().SingleOrDefault(x => x.IsActive);
-
- private static readonly BitArray _cacheValid = new BitArray((int)CacheSlot.NumSlots);
-
- private static bool _setDpiX = true;
-
- private static bool _dpiInitialized;
-
- private static readonly object _dpiLock = new object();
-
- private static int _dpi;
-
- internal static int Dpi
- {
- [SecurityCritical, SecuritySafeCritical]
- get
- {
- if (!_dpiInitialized)
- {
- lock (_dpiLock)
- {
- if (!_dpiInitialized)
- {
- var desktopWnd = new HandleRef(null, IntPtr.Zero);
-
- // Win32Exception will get the Win32 error code so we don't have to
- var dc = UnsafeNativeMethods.GetDC(desktopWnd);
-
- // Detecting error case from unmanaged call, required by PREsharp to throw a Win32Exception
- if (dc == IntPtr.Zero)
- {
- throw new Win32Exception();
- }
-
- try
- {
- _dpi = UnsafeNativeMethods.GetDeviceCaps(new HandleRef(null, dc), NativeMethods.LOGPIXELSY);
- _dpiInitialized = true;
- }
- finally
- {
- UnsafeNativeMethods.ReleaseDC(desktopWnd, new HandleRef(null, dc));
- }
- }
- }
- }
- return _dpi;
- }
- }
-
- private static int _dpiX;
-
- internal static int DpiX
- {
- [SecurityCritical, SecuritySafeCritical]
- get
- {
- if (_setDpiX)
- {
- lock (_cacheValid)
- {
- if (_setDpiX)
- {
- _setDpiX = false;
- var desktopWnd = new HandleRef(null, IntPtr.Zero);
- var dc = UnsafeNativeMethods.GetDC(desktopWnd);
- if (dc == IntPtr.Zero)
- {
- throw new Win32Exception();
- }
- try
- {
- _dpiX = UnsafeNativeMethods.GetDeviceCaps(new HandleRef(null, dc), NativeMethods.LOGPIXELSX);
- _cacheValid[(int)CacheSlot.DpiX] = true;
- }
- finally
- {
- UnsafeNativeMethods.ReleaseDC(desktopWnd, new HandleRef(null, dc));
- }
- }
- }
- }
-
- return _dpiX;
- }
- }
-
- private static Thickness _windowResizeBorderThickness;
-
- internal static Thickness WindowResizeBorderThickness
- {
- [SecurityCritical]
- get
- {
- lock (_cacheValid)
- {
- while (!_cacheValid[(int)CacheSlot.WindowResizeBorderThickness])
- {
- _cacheValid[(int)CacheSlot.WindowResizeBorderThickness] = true;
-
- var frameSize = new Size(NativeMethods.GetSystemMetrics(SM.CXSIZEFRAME), NativeMethods.GetSystemMetrics(SM.CYSIZEFRAME));
- var frameSizeInDips = DpiHelper.DeviceSizeToLogical(frameSize, DpiX / 96.0, Dpi / 96.0);
-
- _windowResizeBorderThickness = new Thickness(frameSizeInDips.Width, frameSizeInDips.Height, frameSizeInDips.Width, frameSizeInDips.Height);
- }
- }
-
- return _windowResizeBorderThickness;
- }
- }
-
- public static Thickness WindowMaximizedPadding
- {
- get
- {
-#if netle40
- return WindowResizeBorderThickness;
-#elif Core
- var hdc = UnsafeNativeMethods.GetDC(IntPtr.Zero);
- var scale = UnsafeNativeMethods.GetDeviceCaps(hdc, NativeMethods.DESKTOPVERTRES) / (float)UnsafeNativeMethods.GetDeviceCaps(hdc, NativeMethods.VERTRES);
- UnsafeNativeMethods.ReleaseDC(IntPtr.Zero, hdc);
- return WindowResizeBorderThickness.Add(new Thickness(4 * scale));
-#else
- return WindowResizeBorderThickness.Add(new Thickness(4));
-#endif
- }
- }
+ public static IntPtr GetHandle(this Visual visual) =>
+ (PresentationSource.FromVisual(visual) as HwndSource)?.Handle ?? IntPtr.Zero;
}
}
\ No newline at end of file
diff --git a/src/Shared/HandyControl_Shared/Tools/Helper/WindowHelper.cs b/src/Shared/HandyControl_Shared/Tools/Helper/WindowHelper.cs
new file mode 100644
index 00000000..c606d165
--- /dev/null
+++ b/src/Shared/HandyControl_Shared/Tools/Helper/WindowHelper.cs
@@ -0,0 +1,152 @@
+using System;
+using System.Collections;
+using System.ComponentModel;
+using System.Linq;
+using System.Runtime.InteropServices;
+using System.Security;
+using System.Windows;
+using System.Windows.Interop;
+using HandyControl.Tools.Extension;
+using HandyControl.Tools.Interop;
+
+namespace HandyControl.Tools
+{
+ public static class WindowHelper
+ {
+ ///
+ /// 获取当前应用中处于激活的一个窗口
+ ///
+ ///
+ public static Window GetActiveWindow() => Application.Current.Windows.OfType().SingleOrDefault(x => x.IsActive);
+
+ private static readonly BitArray _cacheValid = new BitArray((int)CacheSlot.NumSlots);
+
+ private static bool _setDpiX = true;
+
+ private static bool _dpiInitialized;
+
+ private static readonly object _dpiLock = new object();
+
+ private static int _dpi;
+
+ internal static int Dpi
+ {
+ [SecurityCritical, SecuritySafeCritical]
+ get
+ {
+ if (!_dpiInitialized)
+ {
+ lock (_dpiLock)
+ {
+ if (!_dpiInitialized)
+ {
+ var desktopWnd = new HandleRef(null, IntPtr.Zero);
+
+ // Win32Exception will get the Win32 error code so we don't have to
+ var dc = UnsafeNativeMethods.GetDC(desktopWnd);
+
+ // Detecting error case from unmanaged call, required by PREsharp to throw a Win32Exception
+ if (dc == IntPtr.Zero)
+ {
+ throw new Win32Exception();
+ }
+
+ try
+ {
+ _dpi = UnsafeNativeMethods.GetDeviceCaps(new HandleRef(null, dc), NativeMethods.LOGPIXELSY);
+ _dpiInitialized = true;
+ }
+ finally
+ {
+ UnsafeNativeMethods.ReleaseDC(desktopWnd, new HandleRef(null, dc));
+ }
+ }
+ }
+ }
+ return _dpi;
+ }
+ }
+
+ private static int _dpiX;
+
+ internal static int DpiX
+ {
+ [SecurityCritical, SecuritySafeCritical]
+ get
+ {
+ if (_setDpiX)
+ {
+ lock (_cacheValid)
+ {
+ if (_setDpiX)
+ {
+ _setDpiX = false;
+ var desktopWnd = new HandleRef(null, IntPtr.Zero);
+ var dc = UnsafeNativeMethods.GetDC(desktopWnd);
+ if (dc == IntPtr.Zero)
+ {
+ throw new Win32Exception();
+ }
+ try
+ {
+ _dpiX = UnsafeNativeMethods.GetDeviceCaps(new HandleRef(null, dc), NativeMethods.LOGPIXELSX);
+ _cacheValid[(int)CacheSlot.DpiX] = true;
+ }
+ finally
+ {
+ UnsafeNativeMethods.ReleaseDC(desktopWnd, new HandleRef(null, dc));
+ }
+ }
+ }
+ }
+
+ return _dpiX;
+ }
+ }
+
+ private static Thickness _windowResizeBorderThickness;
+
+ internal static Thickness WindowResizeBorderThickness
+ {
+ [SecurityCritical]
+ get
+ {
+ lock (_cacheValid)
+ {
+ while (!_cacheValid[(int)CacheSlot.WindowResizeBorderThickness])
+ {
+ _cacheValid[(int)CacheSlot.WindowResizeBorderThickness] = true;
+
+ var frameSize = new Size(NativeMethods.GetSystemMetrics(SM.CXSIZEFRAME), NativeMethods.GetSystemMetrics(SM.CYSIZEFRAME));
+ var frameSizeInDips = DpiHelper.DeviceSizeToLogical(frameSize, DpiX / 96.0, Dpi / 96.0);
+
+ _windowResizeBorderThickness = new Thickness(frameSizeInDips.Width, frameSizeInDips.Height, frameSizeInDips.Width, frameSizeInDips.Height);
+ }
+ }
+
+ return _windowResizeBorderThickness;
+ }
+ }
+
+ public static Thickness WindowMaximizedPadding
+ {
+ get
+ {
+#if netle40
+ return WindowResizeBorderThickness;
+#elif Core
+ var hdc = UnsafeNativeMethods.GetDC(IntPtr.Zero);
+ var scale = UnsafeNativeMethods.GetDeviceCaps(hdc, NativeMethods.DESKTOPVERTRES) / (float)UnsafeNativeMethods.GetDeviceCaps(hdc, NativeMethods.VERTRES);
+ UnsafeNativeMethods.ReleaseDC(IntPtr.Zero, hdc);
+ return WindowResizeBorderThickness.Add(new Thickness(4 * scale));
+#else
+ return WindowResizeBorderThickness.Add(new Thickness(4));
+#endif
+ }
+ }
+
+ public static IntPtr CreateHandle() => new WindowInteropHelper(new Window()).EnsureHandle();
+
+ public static IntPtr GetHandle(this Window window) => new WindowInteropHelper(window).EnsureHandle();
+ }
+}
diff --git a/src/Shared/HandyControl_Shared/Tools/Hook/ClipboardHook.cs b/src/Shared/HandyControl_Shared/Tools/Hook/ClipboardHook.cs
new file mode 100644
index 00000000..b98bb50a
--- /dev/null
+++ b/src/Shared/HandyControl_Shared/Tools/Hook/ClipboardHook.cs
@@ -0,0 +1,46 @@
+using System;
+using System.Windows.Interop;
+using HandyControl.Tools.Interop;
+
+namespace HandyControl.Tools
+{
+ public class ClipboardHook
+ {
+ private static HwndSource HWndSource;
+
+ private static IntPtr HookId = IntPtr.Zero;
+
+ public static event Action ContentChanged;
+
+ public static void Start()
+ {
+ if (HookId != IntPtr.Zero)
+ {
+ Stop();
+ }
+
+ HookId = WindowHelper.CreateHandle();
+ HWndSource = HwndSource.FromHwnd(HookId);
+ if (HWndSource != null)
+ {
+ HWndSource.AddHook(WinProc);
+ NativeMethods.AddClipboardFormatListener(HookId);
+ }
+ }
+
+ public static void Stop()
+ {
+ HWndSource.RemoveHook(WinProc);
+ NativeMethods.RemoveClipboardFormatListener(HookId);
+ }
+
+ private static IntPtr WinProc(IntPtr hwnd, int msg, IntPtr wparam, IntPtr lparam, ref bool handled)
+ {
+ if (msg == NativeMethods.WM_CLIPBOARDUPDATE)
+ {
+ ContentChanged?.Invoke();
+ }
+ return IntPtr.Zero;
+ }
+ }
+}
diff --git a/src/Shared/HandyControl_Shared/Tools/Hook/SystemMenuHook.cs b/src/Shared/HandyControl_Shared/Tools/Hook/SystemMenuHook.cs
new file mode 100644
index 00000000..afe6f66b
--- /dev/null
+++ b/src/Shared/HandyControl_Shared/Tools/Hook/SystemMenuHook.cs
@@ -0,0 +1,53 @@
+using System;
+using System.Collections.Generic;
+using System.Windows;
+using System.Windows.Interop;
+using HandyControl.Tools.Interop;
+
+namespace HandyControl.Tools
+{
+ public class SystemMenuHook
+ {
+ private static readonly Dictionary DataDic = new Dictionary();
+
+ public static event Action Click;
+
+ public static void Insert(int index, int id, string text, Window window)
+ {
+ var hookId = window.GetHandle();
+ var source = HwndSource.FromHwnd(hookId);
+ if (source != null)
+ {
+ DataDic[id] = source;
+ NativeMethods.InsertMenu(NativeMethods.GetSystemMenu(hookId, false), index, NativeMethods.MF_BYPOSITION, id, text);
+ source.AddHook(WinProc);
+ }
+ }
+
+ public static void InsertSeperator(int index, Window window) => NativeMethods.InsertMenu(
+ NativeMethods.GetSystemMenu(window.GetHandle(), false), index,
+ NativeMethods.MF_BYPOSITION | NativeMethods.MF_SEPARATOR, 0, "");
+
+ public static void Remove(int id)
+ {
+ if (DataDic.TryGetValue(id, out var data))
+ {
+ data.RemoveHook(WinProc);
+ DataDic.Remove(id);
+ }
+ }
+
+ private static IntPtr WinProc(IntPtr hwnd, int msg, IntPtr wparam, IntPtr lparam, ref bool handled)
+ {
+ if (msg == NativeMethods.WM_SYSCOMMAND)
+ {
+ var id = wparam.ToInt32();
+ if (DataDic.ContainsKey(id))
+ {
+ Click?.Invoke(id);
+ }
+ }
+ return IntPtr.Zero;
+ }
+ }
+}
diff --git a/src/Shared/HandyControl_Shared/Tools/Interop/NativeMethods.cs b/src/Shared/HandyControl_Shared/Tools/Interop/NativeMethods.cs
index e41d4e26..b4885c5f 100644
--- a/src/Shared/HandyControl_Shared/Tools/Interop/NativeMethods.cs
+++ b/src/Shared/HandyControl_Shared/Tools/Interop/NativeMethods.cs
@@ -32,10 +32,12 @@ namespace HandyControl.Tools.Interop
NIIF_INFO = 0x00000001,
NIIF_WARNING = 0x00000002,
NIIF_ERROR = 0x00000003,
+ NIIF_LARGE_ICON = 0x00000020,
WM_KEYDOWN = 0x0100,
WM_KEYUP = 0x0101,
WM_SYSKEYDOWN = 0x0104,
WM_SYSKEYUP = 0x0105,
+ WM_SYSCOMMAND = 0x112,
WM_MOUSEMOVE = 0x0200,
WM_LBUTTONDOWN = 0x0201,
WM_LBUTTONUP = 0x0202,
@@ -46,7 +48,10 @@ namespace HandyControl.Tools.Interop
WM_MBUTTONDOWN = 0x0207,
WM_MBUTTONUP = 0x0208,
WM_MBUTTONDBLCLK = 0x0209,
+ WM_CLIPBOARDUPDATE = 0x031D,
WM_USER = 0x0400,
+ MF_BYPOSITION = 0x400,
+ MF_SEPARATOR = 0x800,
TB_GETBUTTON = WM_USER + 23,
TB_BUTTONCOUNT = WM_USER + 24,
TB_GETITEMRECT = WM_USER + 29,
@@ -64,7 +69,8 @@ namespace HandyControl.Tools.Interop
LOGPIXELSX = 88,
LOGPIXELSY = 90,
CXFRAME = 32,
- CXSIZEFRAME = CXFRAME;
+ CXSIZEFRAME = CXFRAME,
+ SW_HIDE = 0;
[Flags]
public enum ProcessAccess
@@ -219,5 +225,22 @@ namespace HandyControl.Tools.Interop
[SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
[DllImport(ExternDll.User32)]
public static extern int GetSystemMetrics(SM nIndex);
+
+ [DllImport(ExternDll.User32)]
+ public static extern IntPtr GetDesktopWindow();
+
+ [DllImport(ExternDll.User32, SetLastError = true)]
+ [return: MarshalAs(UnmanagedType.Bool)]
+ public static extern bool AddClipboardFormatListener(IntPtr hwnd);
+
+ [DllImport(ExternDll.User32, SetLastError = true)]
+ [return: MarshalAs(UnmanagedType.Bool)]
+ public static extern bool RemoveClipboardFormatListener(IntPtr hwnd);
+
+ [DllImport(ExternDll.User32)]
+ public static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert);
+
+ [DllImport(ExternDll.User32)]
+ public static extern bool InsertMenu(IntPtr hMenu, int wPosition, int wFlags, int wIDNewItem, string lpNewItem);
}
}
\ No newline at end of file
diff --git a/src/Shared/HandyControl_Shared/Tools/RegularPatterns.cs b/src/Shared/HandyControl_Shared/Tools/RegularPatterns.cs
index 4ff94eb6..7226a6b0 100644
--- a/src/Shared/HandyControl_Shared/Tools/RegularPatterns.cs
+++ b/src/Shared/HandyControl_Shared/Tools/RegularPatterns.cs
@@ -89,7 +89,7 @@
///
/// 计算性质数字正则匹配
///
- public const string DigitsPattern = @"^[+-]?([0-9]*\.?[0-9]+|[0-9]+\.?[0-9]*)([eE][+-]?[0-9]+)?$";
+ public const string DigitsPattern = @"[+-]?\d*\.?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?";
///
/// 正整数正则匹配