Merge branch 'HandyOrg:master' into japanese-translation

This commit is contained in:
Musashi Miyamoto authored and GitHub committed 2022-03-26 04:35:29 +09:00
commit cf3b59e612
942 files changed
+62191 -61784

No files matched your search

-32
View File
@@ -1,32 +0,0 @@
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: ''
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Environment (please complete the following information):**
- .net: [e.g. 4.6.2]
- IDE [e.g. vs2017]
- Version [e.g. 1.0.0]
**Additional context**
Add any other context about the problem here.
+96
View File
@@ -0,0 +1,96 @@
name: Bug report
description: File a bug report
title: "Bug title"
labels: []
body:
- type: textarea
validations:
required: true
attributes:
label: Describe the bug
description: Please enter a short, clear description of the bug.
- type: textarea
validations:
required: true
attributes:
label: Steps to reproduce the bug
description: Please provide any required setup and steps to reproduce the behavior.
placeholder: |
1. Go to '...'
2. Click on '....'
- type: textarea
attributes:
label: Expected behavior
description: Please provide a description of what you expected to happen
- type: textarea
attributes:
label: Screenshots
description: If applicable, add screenshots here to help explain your problem
- type: dropdown
attributes:
label: NuGet package version
options:
- "HandyControl 3.4.0"
- "HandyControl 3.3.0"
- "HandyControl 3.2.0"
- "HandyControl 3.1.0"
- "HandyControl 3.0.0"
- "HandyControls (Custom version) 3.4.0"
- "HandyControls (Custom version) 3.3.11"
- "HandyControls (Custom version) 3.3.10"
- "HandyControls (Custom version) 3.3.9"
- "HandyControls (Custom version) 3.3.8.1"
- "HandyControls (Custom version) 3.3.8"
- "HandyControls (Custom version) 3.3.7"
- type: dropdown
attributes:
label: IDE
description: Which Visual Studio versions did you see the issue on?
multiple: true
options:
- "Visual Studio 2022-preview"
- "Visual Studio 2022"
- "Visual Studio 2019"
- "Visual Studio 2017"
- type: dropdown
attributes:
label: Framework type
description: please specify for which framework type you have encountered the issue.
multiple: true
options:
- ".Net 6.0"
- ".Net 5.0"
- ".Net Core 3.1"
- ".Net Core 3.0"
- ".Net Framework 4.8"
- ".Net Framework 4.7.2"
- ".Net Framework 4.7.1"
- ".Net Framework 4.7.0"
- ".Net Framework 4.6.2"
- ".Net Framework 4.6.1"
- ".Net Framework 4.6.0"
- ".Net Framework 4.5.2"
- ".Net Framework 4.5.1"
- ".Net Framework 4.5.0"
- ".Net Framework 4.0.0"
- type: dropdown
attributes:
label: Windows version
description: Which Windows versions did you see the issue on?
multiple: true
options:
- "Insider Build (xxxxx)"
- "Windows 11 (22000)"
- "May 2021 Update (19043)"
- "October 2020 Update (19042)"
- "May 2020 Update (19041)"
- "November 2019 Update (18363)"
- "May 2019 Update (18362)"
- "October 2018 Update (17763)"
- "April 2018 Update (17134)"
- "Fall Creators Update (16299)"
- "Creators Update (15063)"
- type: textarea
attributes:
label: Additional context
description: Enter any other applicable info here
+1 -1
View File
@@ -143,7 +143,7 @@ HandyControl 项目已加入 [dotNET China](https://gitee.com/dotnetchina) 组
<a href="https://getquicker.net" target="_blank"><img width="70px" alt="quicker" src="https://files.getquicker.net/_sitefiles/quicker_round_128.png"></a>
<a href="https://www.phpenv.cn" target="_blank"><img width="70px" alt="phpenv" src="https://www.phpenv.cn/usr/themes/phpenv/img/logo.png"></a>
<a href="https://atmb.top" target="_blank"><img width="70px" alt="AutumnBox" src="https://atmb.top/images/icon.png"></a>
<a href="https://github.com/zsh2401/AutumnBox" target="_blank"><img width="70px" alt="AutumnBox" src="https://raw.githubusercontent.com/zsh2401/AutumnBox/master/src/AutumnBox.GUI/Resources/Icons/icon.ico"></a>
如果你的项目没有被列出,请告知我们! 😀
+1 -1
View File
@@ -137,7 +137,7 @@
<a href="https://getquicker.net" target="_blank"><img width="70px" alt="quicker" src="https://i0.hdslb.com/bfs/face/3765a3d0ce5da37e1aaa830d2eec6d3e0806a2d8.jpg@96w_96h_1c.webp"></a>
<a href="https://www.phpenv.cn" target="_blank"><img width="70px" alt="phpenv" src="https://www.phpenv.cn/usr/themes/phpenv/img/logo.png"></a>
<a href="https://atmb.top" target="_blank"><img width="70px" alt="AutumnBox" src="https://atmb.top/images/icon.png"></a>
<a href="https://github.com/zsh2401/AutumnBox" target="_blank"><img width="70px" alt="AutumnBox" src="https://raw.githubusercontent.com/zsh2401/AutumnBox/master/src/AutumnBox.GUI/Resources/Icons/icon.ico"></a>
if your project is not listed here, let us know! 😀
+55
View File
@@ -0,0 +1,55 @@
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
<metadata>
<id>HandyControl.Lang.es</id>
<version>3.3.0</version>
<title>HandyOrg</title>
<authors>HandyOrg</authors>
<owners>HandyOrg</owners>
<requireLicenseAcceptance>true</requireLicenseAcceptance>
<license type="file">LICENSE</license>
<icon>icon.png</icon>
<projectUrl>https://github.com/HandyOrg/HandyControl</projectUrl>
<description>Contains some simple and commonly used WPF controls</description>
<releaseNotes>Changes are detailed at https://github.com/HandyOrg/HandyControl/releases</releaseNotes>
<copyright>Copyright © HandyOrg 2018-2021</copyright>
<tags>WPF C# Control</tags>
<repository type="git" url="https://github.com/HandyOrg/HandyControl" commit="083639031635a4b9618842b2be589324d8676055" />
<dependencies>
<group targetFramework=".NETFramework4.0" />
<group targetFramework=".NETFramework4.5" />
<group targetFramework=".NETFramework4.5.1" />
<group targetFramework=".NETFramework4.5.2" />
<group targetFramework=".NETFramework4.6" />
<group targetFramework=".NETFramework4.6.1" />
<group targetFramework=".NETFramework4.6.2" />
<group targetFramework=".NETFramework4.7" />
<group targetFramework=".NETFramework4.7.1" />
<group targetFramework=".NETFramework4.7.2" />
<group targetFramework=".NETFramework4.8" />
<group targetFramework=".NETCoreApp3.0" />
<group targetFramework=".NETCoreApp3.1" />
<group targetFramework="net5.0" />
<group targetFramework="net6.0" />
</dependencies>
</metadata>
<files>
<file src="lib\net40\es\HandyControl.resources.dll" target="lib\net40\es\HandyControl.resources.dll" />
<file src="lib\net45\es\HandyControl.resources.dll" target="lib\net45\es\HandyControl.resources.dll" />
<file src="lib\net451\es\HandyControl.resources.dll" target="lib\net451\es\HandyControl.resources.dll" />
<file src="lib\net452\es\HandyControl.resources.dll" target="lib\net452\es\HandyControl.resources.dll" />
<file src="lib\net46\es\HandyControl.resources.dll" target="lib\net46\es\HandyControl.resources.dll" />
<file src="lib\net461\es\HandyControl.resources.dll" target="lib\net461\es\HandyControl.resources.dll" />
<file src="lib\net462\es\HandyControl.resources.dll" target="lib\net462\es\HandyControl.resources.dll" />
<file src="lib\net47\es\HandyControl.resources.dll" target="lib\net47\es\HandyControl.resources.dll" />
<file src="lib\net471\es\HandyControl.resources.dll" target="lib\net471\es\HandyControl.resources.dll" />
<file src="lib\net472\es\HandyControl.resources.dll" target="lib\net472\es\HandyControl.resources.dll" />
<file src="lib\net48\es\HandyControl.resources.dll" target="lib\net48\es\HandyControl.resources.dll" />
<file src="lib\net5.0\es\HandyControl.resources.dll" target="lib\net5.0\es\HandyControl.resources.dll" />
<file src="lib\net6.0\es\HandyControl.resources.dll" target="lib\net6.0\es\HandyControl.resources.dll" />
<file src="lib\netcoreapp3.0\es\HandyControl.resources.dll" target="lib\netcoreapp3.0\es\HandyControl.resources.dll" />
<file src="lib\netcoreapp3.1\es\HandyControl.resources.dll" target="lib\netcoreapp3.1\es\HandyControl.resources.dll" />
<file src="icon.png" target="icon.png" />
<file src="LICENSE" target="LICENSE" />
</files>
</package>
+20 -2
View File
@@ -1,7 +1,7 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.28729.10
# Visual Studio Version 17
VisualStudioVersion = 17.1.32228.430
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HandyControl_Net_GE45", "Net_GE45\HandyControl_Net_GE45\HandyControl_Net_GE45.csproj", "{DC966E3D-BCFF-4652-98CF-070E5494749A}"
EndProject
@@ -30,16 +30,31 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
Directory.Build.Props = Directory.Build.Props
EndProjectSection
EndProject
Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Microsoft.Expression.Drawing", "Shared\Microsoft.Expression.Drawing\Microsoft.Expression.Drawing.shproj", "{E5DC7C25-6293-4660-B5FB-186496386B90}"
EndProject
Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "System.Windows.Interactivity", "Shared\System.Windows.Interactivity\System.Windows.Interactivity.shproj", "{6F0C9CFF-2269-46A7-9664-478354C582A4}"
EndProject
Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Microsoft.Expression.Interactions", "Shared\Microsoft.Expression.Interactions\Microsoft.Expression.Interactions.shproj", "{3531857C-28FC-4E0F-82D9-BFBB70740E04}"
EndProject
Global
GlobalSection(SharedMSBuildProjectFiles) = preSolution
Shared\HandyControl_Shared\HandyControl_Shared.projitems*{32204503-2ef0-4681-ae13-aa1feb6c658a}*SharedItemsImports = 5
Shared\Microsoft.Expression.Drawing\Microsoft.Expression.Drawing.projitems*{32204503-2ef0-4681-ae13-aa1feb6c658a}*SharedItemsImports = 5
Shared\Microsoft.Expression.Interactions\Microsoft.Expression.Interactions.projitems*{32204503-2ef0-4681-ae13-aa1feb6c658a}*SharedItemsImports = 5
Shared\Microsoft.Windows.Shell\Microsoft.Windows.Shell.projitems*{32204503-2ef0-4681-ae13-aa1feb6c658a}*SharedItemsImports = 5
Shared\System.Windows.Interactivity\System.Windows.Interactivity.projitems*{32204503-2ef0-4681-ae13-aa1feb6c658a}*SharedItemsImports = 5
Shared\Microsoft.Expression.Interactions\Microsoft.Expression.Interactions.projitems*{3531857c-28fc-4e0f-82d9-bfbb70740e04}*SharedItemsImports = 13
Shared\System.Windows.Interactivity\System.Windows.Interactivity.projitems*{6f0c9cff-2269-46a7-9664-478354c582a4}*SharedItemsImports = 13
Shared\HandyControlDemo_Shared\HandyControlDemo_Shared.projitems*{9a7b52e6-94bb-4e7e-bb6a-7cf6761b79a7}*SharedItemsImports = 5
Shared\HandyControl_Shared\HandyControl_Shared.projitems*{aac11083-faca-405d-9197-5c1212d65656}*SharedItemsImports = 13
Shared\Microsoft.Windows.Shell\Microsoft.Windows.Shell.projitems*{bbe51380-8b21-49ff-9cfc-b29447a40999}*SharedItemsImports = 13
Shared\HandyControlDemo_Shared\HandyControlDemo_Shared.projitems*{c4694269-c9b8-45d5-87f8-d0088c532510}*SharedItemsImports = 13
Shared\HandyControlDemo_Shared\HandyControlDemo_Shared.projitems*{d8ae88f8-c36b-4d10-a7f9-22ffcfba5231}*SharedItemsImports = 5
Shared\HandyControl_Shared\HandyControl_Shared.projitems*{dc966e3d-bcff-4652-98cf-070e5494749a}*SharedItemsImports = 5
Shared\Microsoft.Expression.Drawing\Microsoft.Expression.Drawing.projitems*{dc966e3d-bcff-4652-98cf-070e5494749a}*SharedItemsImports = 5
Shared\Microsoft.Expression.Interactions\Microsoft.Expression.Interactions.projitems*{dc966e3d-bcff-4652-98cf-070e5494749a}*SharedItemsImports = 5
Shared\System.Windows.Interactivity\System.Windows.Interactivity.projitems*{dc966e3d-bcff-4652-98cf-070e5494749a}*SharedItemsImports = 5
Shared\Microsoft.Expression.Drawing\Microsoft.Expression.Drawing.projitems*{e5dc7c25-6293-4660-b5fb-186496386b90}*SharedItemsImports = 13
EndGlobalSection
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -93,6 +108,9 @@ Global
{D8AE88F8-C36B-4D10-A7F9-22FFCFBA5231} = {35E3F9C0-8924-4536-BE09-F3761FDBF066}
{D8A4748C-0500-4F63-BC47-3506658C68F7} = {0938270D-E9F0-489B-AF9E-5C5AD7C69897}
{BBE51380-8B21-49FF-9CFC-B29447A40999} = {0938270D-E9F0-489B-AF9E-5C5AD7C69897}
{E5DC7C25-6293-4660-B5FB-186496386B90} = {0938270D-E9F0-489B-AF9E-5C5AD7C69897}
{6F0C9CFF-2269-46A7-9664-478354C582A4} = {0938270D-E9F0-489B-AF9E-5C5AD7C69897}
{3531857C-28FC-4E0F-82D9-BFBB70740E04} = {0938270D-E9F0-489B-AF9E-5C5AD7C69897}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {D4636382-1A18-4079-A3E7-054DD970F179}
@@ -83,6 +83,9 @@
</ItemGroup>
<Import Project="..\..\Shared\HandyControl_Shared\HandyControl_Shared.projitems" Label="Shared" />
<Import Project="..\..\Shared\Microsoft.Windows.Shell\Microsoft.Windows.Shell.projitems" Label="Shared" />
<Import Project="..\..\Shared\Microsoft.Expression.Drawing\Microsoft.Expression.Drawing.projitems" Label="Shared" />
<Import Project="..\..\Shared\System.Windows.Interactivity\System.Windows.Interactivity.projitems" Label="Shared" />
<Import Project="..\..\Shared\Microsoft.Expression.Interactions\Microsoft.Expression.Interactions.projitems" Label="Shared" />
<ItemGroup>
<Resource Include="..\..\Shared\HandyControl_Shared\Resources\dropper.cur">
<Link>Resources\dropper.cur</Link>
@@ -99,10 +99,10 @@
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TreeView">
<Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}" BorderThickness="{TemplateBinding BorderThickness}" SnapsToDevicePixels="true">
<Border x:Name="Bd" CornerRadius="{Binding Path=(hc:BorderElement.CornerRadius),RelativeSource={RelativeSource TemplatedParent}}" BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}" BorderThickness="{TemplateBinding BorderThickness}" SnapsToDevicePixels="true">
<hc:ToggleBlock IsChecked="{Binding HasItems,RelativeSource={RelativeSource TemplatedParent},Mode=OneWay}" VerticalContentAlignment="Stretch" HorizontalContentAlignment="Stretch">
<hc:ToggleBlock.CheckedContent>
<hc:ScrollViewer x:Name="_tv_scrollviewer_" IsInertiaEnabled="{Binding Path=(hc:ScrollViewer.IsInertiaEnabled),RelativeSource={RelativeSource TemplatedParent}}" Template="{StaticResource ScrollViewerBaseControlTemplate}" Background="{TemplateBinding Background}" CanContentScroll="false" Focusable="false" HorizontalScrollBarVisibility="{TemplateBinding ScrollViewer.HorizontalScrollBarVisibility}" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalScrollBarVisibility="{TemplateBinding ScrollViewer.VerticalScrollBarVisibility}">
<hc:ScrollViewer IsInertiaEnabled="{Binding Path=(hc:ScrollViewer.IsInertiaEnabled),RelativeSource={RelativeSource TemplatedParent}}" CanContentScroll="false" Focusable="false" HorizontalScrollBarVisibility="{TemplateBinding ScrollViewer.HorizontalScrollBarVisibility}" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalScrollBarVisibility="{TemplateBinding ScrollViewer.VerticalScrollBarVisibility}">
<ItemsPresenter/>
</hc:ScrollViewer>
</hc:ToggleBlock.CheckedContent>
File diff suppressed because it is too large. Load diff
@@ -83,6 +83,9 @@
</Content>
</ItemGroup>
<Import Project="..\..\Shared\HandyControl_Shared\HandyControl_Shared.projitems" Label="Shared" />
<Import Project="..\..\Shared\Microsoft.Expression.Drawing\Microsoft.Expression.Drawing.projitems" Label="Shared" />
<Import Project="..\..\Shared\System.Windows.Interactivity\System.Windows.Interactivity.projitems" Label="Shared" />
<Import Project="..\..\Shared\Microsoft.Expression.Interactions\Microsoft.Expression.Interactions.projitems" Label="Shared" />
<ItemGroup>
<Resource Include="..\..\Shared\HandyControl_Shared\Resources\dropper.cur">
<Link>Resources\dropper.cur</Link>
@@ -854,8 +854,8 @@
<Resource Include="..\..\Shared\HandyControlDemo_Shared\ViewModel\Basic\InteractiveDialogViewModel.cs">
<Link>ViewModel\InteractiveDialogViewModel.cs</Link>
</Resource>
<Resource Include="..\..\Shared\HandyControlDemo_Shared\ViewModel\Common\ComboBoxDemoViewModel.cs">
<Link>ViewModel\ComboBoxDemoViewModel.cs</Link>
<Resource Include="..\..\Shared\HandyControlDemo_Shared\ViewModel\Common\InputElementDemoViewModel.cs">
<Link>ViewModel\InputElementDemoViewModel.cs</Link>
</Resource>
<Resource Include="..\..\Shared\HandyControlDemo_Shared\ViewModel\Controls\AutoCompleteTextBoxDemoViewModel.cs">
<Link>ViewModel\AutoCompleteTextBoxDemoViewModel.cs</Link>
@@ -887,9 +887,6 @@
<Resource Include="..\..\Shared\HandyControlDemo_Shared\ViewModel\Controls\PaginationDemoViewModel.cs">
<Link>ViewModel\PaginationDemoViewModel.cs</Link>
</Resource>
<Resource Include="..\..\Shared\HandyControlDemo_Shared\ViewModel\Controls\SearchBarDemoViewModel.cs">
<Link>ViewModel\SearchBarDemoViewModel.cs</Link>
</Resource>
<Resource Include="..\..\Shared\HandyControlDemo_Shared\ViewModel\Controls\SideMenuDemoViewModel.cs">
<Link>ViewModel\SideMenuDemoViewModel.cs</Link>
</Resource>
+90 -91
View File
@@ -15,124 +15,123 @@ using HandyControlDemo.Data;
using HandyControlDemo.Properties.Langs;
using HandyControlDemo.Tools;
namespace HandyControlDemo
namespace HandyControlDemo;
public partial class App
{
public partial class App
{
#pragma warning disable IDE0052
[SuppressMessage("ReSharper", "NotAccessedField.Local")]
private static Mutex AppMutex;
[SuppressMessage("ReSharper", "NotAccessedField.Local")]
private static Mutex AppMutex;
#pragma warning restore IDE0052
public App()
{
public App()
{
#if !NET40
var cachePath = $"{AppDomain.CurrentDomain.BaseDirectory}Cache";
if (!Directory.Exists(cachePath))
{
Directory.CreateDirectory(cachePath);
}
ProfileOptimization.SetProfileRoot(cachePath);
ProfileOptimization.StartProfile("Profile");
#endif
}
protected override void OnStartup(StartupEventArgs e)
var cachePath = $"{AppDomain.CurrentDomain.BaseDirectory}Cache";
if (!Directory.Exists(cachePath))
{
AppMutex = new Mutex(true, "HandyControlDemo", out var createdNew);
Directory.CreateDirectory(cachePath);
}
ProfileOptimization.SetProfileRoot(cachePath);
ProfileOptimization.StartProfile("Profile");
#endif
}
if (!createdNew)
protected override void OnStartup(StartupEventArgs e)
{
AppMutex = new Mutex(true, "HandyControlDemo", out var createdNew);
if (!createdNew)
{
var current = Process.GetCurrentProcess();
foreach (var process in Process.GetProcessesByName(current.ProcessName))
{
var current = Process.GetCurrentProcess();
foreach (var process in Process.GetProcessesByName(current.ProcessName))
if (process.Id != current.Id)
{
if (process.Id != current.Id)
{
Win32Helper.SetForegroundWindow(process.MainWindowHandle);
break;
}
Win32Helper.SetForegroundWindow(process.MainWindowHandle);
break;
}
Shutdown();
}
else
Shutdown();
}
else
{
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);
LangProvider.Culture = new CultureInfo(GlobalData.Config.Lang);
if (GlobalData.Config.Skin != SkinType.Default)
{
var splashScreen = new SplashScreen("Resources/Img/Cover.png");
splashScreen.Show(true);
UpdateSkin(GlobalData.Config.Skin);
}
base.OnStartup(e);
UpdateRegistry();
ShutdownMode = ShutdownMode.OnMainWindowClose;
GlobalData.Init();
ConfigHelper.Instance.SetLang(GlobalData.Config.Lang);
LangProvider.Culture = new CultureInfo(GlobalData.Config.Lang);
if (GlobalData.Config.Skin != SkinType.Default)
{
UpdateSkin(GlobalData.Config.Skin);
}
ConfigHelper.Instance.SetWindowDefaultStyle();
ConfigHelper.Instance.SetNavigationWindowDefaultStyle();
ConfigHelper.Instance.SetWindowDefaultStyle();
ConfigHelper.Instance.SetNavigationWindowDefaultStyle();
#if NET40
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
#else
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
#endif
}
}
}
protected override void OnExit(ExitEventArgs e)
protected override void OnExit(ExitEventArgs e)
{
base.OnExit(e);
GlobalData.Save();
}
internal void UpdateSkin(SkinType skin)
{
var skins0 = Resources.MergedDictionaries[0];
skins0.MergedDictionaries.Clear();
skins0.MergedDictionaries.Add(ResourceHelper.GetSkin(skin));
skins0.MergedDictionaries.Add(ResourceHelper.GetSkin(typeof(App).Assembly, "Resources/Themes", skin));
var skins1 = Resources.MergedDictionaries[1];
skins1.MergedDictionaries.Clear();
skins1.MergedDictionaries.Add(new ResourceDictionary
{
base.OnExit(e);
GlobalData.Save();
}
internal void UpdateSkin(SkinType skin)
Source = new Uri("pack://application:,,,/HandyControl;component/Themes/Theme.xaml")
});
skins1.MergedDictionaries.Add(new ResourceDictionary
{
var skins0 = Resources.MergedDictionaries[0];
skins0.MergedDictionaries.Clear();
skins0.MergedDictionaries.Add(ResourceHelper.GetSkin(skin));
skins0.MergedDictionaries.Add(ResourceHelper.GetSkin(typeof(App).Assembly, "Resources/Themes", skin));
Source = new Uri("pack://application:,,,/HandyControlDemo;component/Resources/Themes/Theme.xaml")
});
var skins1 = Resources.MergedDictionaries[1];
skins1.MergedDictionaries.Clear();
skins1.MergedDictionaries.Add(new ResourceDictionary
{
Source = new Uri("pack://application:,,,/HandyControl;component/Themes/Theme.xaml")
});
skins1.MergedDictionaries.Add(new ResourceDictionary
{
Source = new Uri("pack://application:,,,/HandyControlDemo;component/Resources/Themes/Theme.xaml")
});
Current.MainWindow?.OnApplyTemplate();
}
Current.MainWindow?.OnApplyTemplate();
}
private void UpdateRegistry()
private void UpdateRegistry()
{
var processModule = Process.GetCurrentProcess().MainModule;
if (processModule != null)
{
var processModule = Process.GetCurrentProcess().MainModule;
if (processModule != null)
var registryFilePath = $"{Path.GetDirectoryName(processModule.FileName)}\\Registry.reg";
if (!File.Exists(registryFilePath))
{
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)
{
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}")
{
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
});
}
UseShellExecute = false,
CreateNoWindow = true
});
}
}
}
@@ -1,14 +1,13 @@
using System;
using HandyControl.Data;
namespace HandyControlDemo.Data
namespace HandyControlDemo.Data;
internal class AppConfig
{
internal class AppConfig
{
public static readonly string SavePath = $"{AppDomain.CurrentDomain.BaseDirectory}AppConfig.json";
public static readonly string SavePath = $"{AppDomain.CurrentDomain.BaseDirectory}AppConfig.json";
public string Lang { get; set; } = "zh-cn";
public string Lang { get; set; } = "zh-cn";
public SkinType Skin { get; set; }
}
public SkinType Skin { get; set; }
}
@@ -1,13 +1,12 @@
namespace HandyControlDemo.Data
namespace HandyControlDemo.Data;
public enum DemoType
{
public enum DemoType
{
Type1 = 1,
Type2,
Type3,
Type4,
Type5,
Type6
}
Type1 = 1,
Type2,
Type3,
Type4,
Type5,
Type6
}
@@ -1,38 +1,37 @@
using System.IO;
using Newtonsoft.Json;
namespace HandyControlDemo.Data
namespace HandyControlDemo.Data;
internal class GlobalData
{
internal class GlobalData
public static void Init()
{
public static void Init()
if (File.Exists(AppConfig.SavePath))
{
if (File.Exists(AppConfig.SavePath))
try
{
try
{
var json = File.ReadAllText(AppConfig.SavePath);
Config = (string.IsNullOrEmpty(json) ? new AppConfig() : JsonConvert.DeserializeObject<AppConfig>(json)) ?? new AppConfig();
}
catch
{
Config = new AppConfig();
}
var json = File.ReadAllText(AppConfig.SavePath);
Config = (string.IsNullOrEmpty(json) ? new AppConfig() : JsonConvert.DeserializeObject<AppConfig>(json)) ?? new AppConfig();
}
else
catch
{
Config = new AppConfig();
}
}
public static void Save()
else
{
var json = JsonConvert.SerializeObject(Config);
File.WriteAllText(AppConfig.SavePath, json);
Config = new AppConfig();
}
public static AppConfig Config { get; set; }
public static bool NotifyIconIsShow { get; set; }
}
public static void Save()
{
var json = JsonConvert.SerializeObject(Config);
File.WriteAllText(AppConfig.SavePath, json);
}
public static AppConfig Config { get; set; }
public static bool NotifyIconIsShow { get; set; }
}
@@ -1,58 +1,57 @@
namespace HandyControlDemo.Data
namespace HandyControlDemo.Data;
public class MessageToken
{
public class MessageToken
{
public static readonly string LoadShowContent = nameof(LoadShowContent);
public static readonly string LoadShowContent = nameof(LoadShowContent);
public static readonly string FullSwitch = nameof(FullSwitch);
public static readonly string FullSwitch = nameof(FullSwitch);
public static readonly string ContributorsView = nameof(ContributorsView);
public static readonly string ContributorsView = nameof(ContributorsView);
public static readonly string ClearLeftSelected = nameof(ClearLeftSelected);
public static readonly string ClearLeftSelected = nameof(ClearLeftSelected);
public static readonly string SendChatMessage = nameof(SendChatMessage);
public static readonly string SendChatMessage = nameof(SendChatMessage);
public static readonly string GrowlDemoPanel = nameof(GrowlDemoPanel);
public static readonly string GrowlDemoPanel = nameof(GrowlDemoPanel);
public static readonly string DialogDemoWindow = nameof(DialogDemoWindow);
public static readonly string DialogDemoWindow = nameof(DialogDemoWindow);
public static readonly string MainWindow = nameof(MainWindow);
public static readonly string MainWindow = nameof(MainWindow);
public static readonly string PracticalDemo = nameof(PracticalDemo);
public static readonly string PracticalDemo = nameof(PracticalDemo);
public static readonly string ProjectsView = nameof(ProjectsView);
public static readonly string ProjectsView = nameof(ProjectsView);
public static readonly string BlogsView = nameof(BlogsView);
public static readonly string BlogsView = nameof(BlogsView);
public static readonly string WebsitesView = nameof(WebsitesView);
public static readonly string WebsitesView = nameof(WebsitesView);
public static readonly string NotifyIconDemo = nameof(NotifyIconDemo);
public static readonly string NotifyIconDemo = nameof(NotifyIconDemo);
public static readonly string NotifyIconContextDemo = nameof(NotifyIconContextDemo);
public static readonly string NotifyIconContextDemo = nameof(NotifyIconContextDemo);
public static readonly string CommonWindow = nameof(CommonWindow);
public static readonly string CommonWindow = nameof(CommonWindow);
public static readonly string BlurWindow = nameof(BlurWindow);
public static readonly string BlurWindow = nameof(BlurWindow);
public static readonly string CustomNonClientAreaWindow = nameof(CustomNonClientAreaWindow);
public static readonly string CustomNonClientAreaWindow = nameof(CustomNonClientAreaWindow);
public static readonly string NoNonClientAreaDragableWindow = nameof(NoNonClientAreaDragableWindow);
public static readonly string NoNonClientAreaDragableWindow = nameof(NoNonClientAreaDragableWindow);
public static readonly string QQGroupView = nameof(QQGroupView);
public static readonly string QQGroupView = nameof(QQGroupView);
public static readonly string GlowWindow = nameof(GlowWindow);
public static readonly string GlowWindow = nameof(GlowWindow);
public static readonly string NativeCommonWindow = nameof(NativeCommonWindow);
public static readonly string NativeCommonWindow = nameof(NativeCommonWindow);
public static readonly string NavigationWindow = nameof(NavigationWindow);
public static readonly string NavigationWindow = nameof(NavigationWindow);
public static readonly string TouchDragMoveWindow = nameof(TouchDragMoveWindow);
public static readonly string TouchDragMoveWindow = nameof(TouchDragMoveWindow);
public static readonly string DialogContainer = nameof(DialogContainer);
public static readonly string DialogContainer = nameof(DialogContainer);
public static readonly string LangUpdated = nameof(LangUpdated);
public static readonly string LangUpdated = nameof(LangUpdated);
public static readonly string SkinUpdated = nameof(SkinUpdated);
public static readonly string SkinUpdated = nameof(SkinUpdated);
}
}
@@ -1,12 +1,11 @@
namespace HandyControlDemo.Data
namespace HandyControlDemo.Data;
public class AvatarModel
{
public class AvatarModel
{
public string DisplayName { get; set; }
public string DisplayName { get; set; }
public string Link { get; set; }
public string Link { get; set; }
public string AvatarUri { get; set; }
}
public string AvatarUri { get; set; }
}
@@ -1,11 +1,10 @@
namespace HandyControlDemo.Data
namespace HandyControlDemo.Data;
public class CardModel
{
public class CardModel
{
public string Header { get; set; }
public string Header { get; set; }
public string Content { get; set; }
public string Content { get; set; }
public string Footer { get; set; }
}
public string Footer { get; set; }
}
@@ -1,17 +1,16 @@
using HandyControl.Data;
namespace HandyControlDemo.Data
namespace HandyControlDemo.Data;
public struct ChatInfoModel
{
public struct ChatInfoModel
{
public object Message { get; set; }
public object Message { get; set; }
public string SenderId { get; set; }
public string SenderId { get; set; }
public ChatRoleType Role { get; set; }
public ChatRoleType Role { get; set; }
public ChatMessageType Type { get; set; }
public ChatMessageType Type { get; set; }
public object Enclosure { get; set; }
}
public object Enclosure { get; set; }
}
@@ -1,9 +1,8 @@
namespace HandyControlDemo.Data
{
public class CoverViewDemoModel
{
public string ImgPath { get; set; }
namespace HandyControlDemo.Data;
public string BackgroundToken { get; set; }
}
public class CoverViewDemoModel
{
public string ImgPath { get; set; }
public string BackgroundToken { get; set; }
}
@@ -1,22 +1,21 @@
using System.Collections.Generic;
namespace HandyControlDemo.Data
namespace HandyControlDemo.Data;
public class DemoDataModel
{
public class DemoDataModel
{
public int Index { get; set; }
public int Index { get; set; }
public string Name { get; set; }
public string Name { get; set; }
public bool IsSelected { get; set; }
public bool IsSelected { get; set; }
public string Remark { get; set; }
public string Remark { get; set; }
public DemoType Type { get; set; }
public DemoType Type { get; set; }
public string ImgPath { get; set; }
public string ImgPath { get; set; }
public List<DemoDataModel> DataList { get; set; }
}
public List<DemoDataModel> DataList { get; set; }
}
@@ -1,38 +1,37 @@
using System.Collections.Generic;
using GalaSoft.MvvmLight;
namespace HandyControlDemo.Data
namespace HandyControlDemo.Data;
public class DemoInfoModel : ViewModelBase
{
public class DemoInfoModel : ViewModelBase
public string Key { get; set; }
private string _title;
public string Title
{
public string Key { get; set; }
private string _title;
public string Title
{
get => _title;
get => _title;
#if NET40
set => Set(nameof(Title), ref _title, value);
#else
set => Set(ref _title, value);
set => Set(ref _title, value);
#endif
}
}
private int _selectedIndex;
private int _selectedIndex;
public int SelectedIndex
{
get => _selectedIndex;
public int SelectedIndex
{
get => _selectedIndex;
#if NET40
set => Set(nameof(SelectedIndex), ref _selectedIndex, value);
#else
set => Set(ref _selectedIndex, value);
set => Set(ref _selectedIndex, value);
#endif
}
public bool IsGroupEnabled { get; set; }
public IList<DemoItemModel> DemoItemList { get; set; }
}
public bool IsGroupEnabled { get; set; }
public IList<DemoItemModel> DemoItemList { get; set; }
}
@@ -1,40 +1,39 @@
using GalaSoft.MvvmLight;
namespace HandyControlDemo.Data
namespace HandyControlDemo.Data;
public class DemoItemModel : ObservableObject
{
public class DemoItemModel : ObservableObject
private bool _isVisible = true;
private string _queriesText = string.Empty;
public string Name { get; set; }
public string GroupName { get; set; }
public string TargetCtlName { get; set; }
public string ImageName { get; set; }
public bool IsNew { get; set; }
public string QueriesText
{
private bool _isVisible = true;
private string _queriesText = string.Empty;
public string Name { get; set; }
public string GroupName { get; set; }
public string TargetCtlName { get; set; }
public string ImageName { get; set; }
public bool IsNew { get; set; }
public string QueriesText
{
get => _queriesText;
get => _queriesText;
#if NET40
set => Set(nameof(QueriesText), ref _queriesText, value);
set => Set(nameof(QueriesText), ref _queriesText, value);
#else
set => Set(ref _queriesText, value);
set => Set(ref _queriesText, value);
#endif
}
}
public bool IsVisible
{
get => _isVisible;
public bool IsVisible
{
get => _isVisible;
#if NET40
set => Set(nameof(IsVisible), ref _isVisible, value);
set => Set(nameof(IsVisible), ref _isVisible, value);
#else
set => Set(ref _isVisible, value);
set => Set(ref _isVisible, value);
#endif
}
}
}
@@ -1,13 +1,12 @@
using System.Windows.Media;
namespace HandyControlDemo.Data
namespace HandyControlDemo.Data;
public class GeometryItemModel
{
public class GeometryItemModel
{
public Geometry Data { get; set; }
public Geometry Data { get; set; }
public string Key { get; set; }
public string Key { get; set; }
public bool Line { get; set; }
}
public bool Line { get; set; }
}
@@ -2,32 +2,31 @@
using System.Windows;
using System.Windows.Media;
namespace HandyControlDemo.Data
namespace HandyControlDemo.Data;
public class PropertyGridDemoModel
{
public class PropertyGridDemoModel
{
[Category("Category1")]
public string String { get; set; }
[Category("Category1")]
public string String { get; set; }
[Category("Category2")]
public int Integer { get; set; }
[Category("Category2")]
public int Integer { get; set; }
[Category("Category2")]
public bool Boolean { get; set; }
[Category("Category2")]
public bool Boolean { get; set; }
[Category("Category1")]
public Gender Enum { get; set; }
[Category("Category1")]
public Gender Enum { get; set; }
public HorizontalAlignment HorizontalAlignment { get; set; }
public HorizontalAlignment HorizontalAlignment { get; set; }
public VerticalAlignment VerticalAlignment { get; set; }
public VerticalAlignment VerticalAlignment { get; set; }
public ImageSource ImageSource { get; set; }
}
public ImageSource ImageSource { get; set; }
}
public enum Gender
{
Male,
Female
}
public enum Gender
{
Male,
Female
}
@@ -1,9 +1,8 @@
namespace HandyControlDemo.Data
{
public class StepBarDemoModel
{
public string Header { get; set; }
namespace HandyControlDemo.Data;
public string Content { get; set; }
}
public class StepBarDemoModel
{
public string Header { get; set; }
public string Content { get; set; }
}
@@ -1,9 +1,8 @@
namespace HandyControlDemo.Data
{
public class TabControlDemoModel
{
public string Header { get; set; }
namespace HandyControlDemo.Data;
public string BackgroundToken { get; set; }
}
public class TabControlDemoModel
{
public string Header { get; set; }
public string BackgroundToken { get; set; }
}
@@ -41,6 +41,7 @@
<Compile Include="$(MSBuildThisFileDirectory)Tools\Helper\VersionHelper.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Tools\Helper\Win32Helper.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Tools\HighlightingProvider.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Tools\ValidationRule\NumericUpDownDemoRule.cs" />
<Compile Include="$(MSBuildThisFileDirectory)UserControl\Basic\Avatar.xaml.cs">
<DependentUpon>Avatar.xaml</DependentUpon>
</Compile>
@@ -410,7 +411,6 @@
</Compile>
<Compile Include="$(MSBuildThisFileDirectory)ViewModel\Basic\ChatBoxViewModel.cs" />
<Compile Include="$(MSBuildThisFileDirectory)ViewModel\Basic\InteractiveDialogViewModel.cs" />
<Compile Include="$(MSBuildThisFileDirectory)ViewModel\Common\ComboBoxDemoViewModel.cs" />
<Compile Include="$(MSBuildThisFileDirectory)ViewModel\Controls\AutoCompleteTextBoxDemoViewModel.cs" />
<Compile Include="$(MSBuildThisFileDirectory)ViewModel\Controls\BadgeDemoViewModel.cs" />
<Compile Include="$(MSBuildThisFileDirectory)ViewModel\Controls\CardDemoViewModel.cs" />
@@ -421,13 +421,13 @@
<Compile Include="$(MSBuildThisFileDirectory)ViewModel\Controls\NotificationDemoViewModel.cs" />
<Compile Include="$(MSBuildThisFileDirectory)ViewModel\Controls\NotifyIconDemoViewModel.cs" />
<Compile Include="$(MSBuildThisFileDirectory)ViewModel\Controls\PaginationDemoViewModel.cs" />
<Compile Include="$(MSBuildThisFileDirectory)ViewModel\Controls\SearchBarDemoViewModel.cs" />
<Compile Include="$(MSBuildThisFileDirectory)ViewModel\Controls\SideMenuDemoViewModel.cs" />
<Compile Include="$(MSBuildThisFileDirectory)ViewModel\Controls\SplitButtonDemoViewModel.cs" />
<Compile Include="$(MSBuildThisFileDirectory)ViewModel\Controls\SpriteDemoViewModel.cs" />
<Compile Include="$(MSBuildThisFileDirectory)ViewModel\Controls\StepBarDemoViewModel.cs" />
<Compile Include="$(MSBuildThisFileDirectory)ViewModel\Controls\TabControlDemoViewModel.cs" />
<Compile Include="$(MSBuildThisFileDirectory)ViewModel\Controls\TagDemoViewModel.cs" />
<Compile Include="$(MSBuildThisFileDirectory)ViewModel\Common\InputElementDemoViewModel.cs" />
<Compile Include="$(MSBuildThisFileDirectory)ViewModel\Controls\WindowDemoViewModel.cs" />
<Compile Include="$(MSBuildThisFileDirectory)ViewModel\DemoViewModelBase`1.cs" />
<Compile Include="$(MSBuildThisFileDirectory)ViewModel\Main\ItemsDisplayViewModel.cs" />
@@ -10,45 +10,44 @@ using HandyControlDemo.Tools;
using HandyControlDemo.UserControl;
using HandyControlDemo.ViewModel;
namespace HandyControlDemo
namespace HandyControlDemo;
public partial class MainWindow
{
public partial class MainWindow
public MainWindow() => InitializeComponent();
protected override void OnContentRendered(EventArgs e)
{
public MainWindow() => InitializeComponent();
base.OnContentRendered(e);
protected override void OnContentRendered(EventArgs e)
DataContext = ViewModelLocator.Instance.Main;
NonClientAreaContent = new NonClientAreaContent();
ControlMain.Content = new MainWindowContent();
GlobalShortcut.Init(new List<KeyBinding>
{
base.OnContentRendered(e);
new(ViewModelLocator.Instance.Main.GlobalShortcutInfoCmd, Key.I, ModifierKeys.Control | ModifierKeys.Alt),
new(ViewModelLocator.Instance.Main.GlobalShortcutWarningCmd, Key.E, ModifierKeys.Control | ModifierKeys.Alt)
});
DataContext = ViewModelLocator.Instance.Main;
NonClientAreaContent = new NonClientAreaContent();
ControlMain.Content = new MainWindowContent();
Dialog.SetToken(this, MessageToken.MainWindow);
WindowAttach.SetIgnoreAltF4(this, true);
GlobalShortcut.Init(new List<KeyBinding>
{
new(ViewModelLocator.Instance.Main.GlobalShortcutInfoCmd, Key.I, ModifierKeys.Control | ModifierKeys.Alt),
new(ViewModelLocator.Instance.Main.GlobalShortcutWarningCmd, Key.E, ModifierKeys.Control | ModifierKeys.Alt)
});
Messenger.Default.Send(true, MessageToken.FullSwitch);
Messenger.Default.Send(AssemblyHelper.CreateInternalInstance($"UserControl.{MessageToken.PracticalDemo}"), MessageToken.LoadShowContent);
}
Dialog.SetToken(this, MessageToken.MainWindow);
WindowAttach.SetIgnoreAltF4(this, true);
Messenger.Default.Send(true, MessageToken.FullSwitch);
Messenger.Default.Send(AssemblyHelper.CreateInternalInstance($"UserControl.{MessageToken.PracticalDemo}"), MessageToken.LoadShowContent);
protected override void OnClosing(CancelEventArgs e)
{
if (GlobalData.NotifyIconIsShow)
{
MessageBox.Info(Properties.Langs.Lang.AppClosingTip, Properties.Langs.Lang.Tip);
Hide();
e.Cancel = true;
}
protected override void OnClosing(CancelEventArgs e)
else
{
if (GlobalData.NotifyIconIsShow)
{
MessageBox.Info(Properties.Langs.Lang.AppClosingTip, Properties.Langs.Lang.Tip);
Hide();
e.Cancel = true;
}
else
{
base.OnClosing(e);
}
base.OnClosing(e);
}
}
}
File diff suppressed because it is too large. Load diff
@@ -4,16 +4,15 @@ using HandyControl.Data;
using HandyControl.Themes;
using HandyControl.Tools;
namespace HandyControlDemo.Resources
{
public class DemoTheme : Theme
{
public override ResourceDictionary GetSkin(SkinType skinType) =>
ResourceHelper.GetSkin(typeof(App).Assembly, "Resources/Themes", skinType);
namespace HandyControlDemo.Resources;
public override ResourceDictionary GetTheme() => new()
{
Source = new Uri("pack://application:,,,/HandyControlDemo;component/Resources/Themes/Theme.xaml")
};
}
public class DemoTheme : Theme
{
public override ResourceDictionary GetSkin(SkinType skinType) =>
ResourceHelper.GetSkin(typeof(App).Assembly, "Resources/Themes", skinType);
public override ResourceDictionary GetTheme() => new()
{
Source = new Uri("pack://application:,,,/HandyControlDemo;component/Resources/Themes/Theme.xaml")
};
}
@@ -42,7 +42,6 @@
<Style x:Key="ListBoxItemTransparent" BasedOn="{StaticResource ListBoxItemBaseStyle}" TargetType="ListBoxItem">
<Setter Property="Visibility" Value="{Binding IsVisible,Converter={StaticResource Boolean2VisibilityConverter}}"/>
<Setter Property="hc:BorderElement.CornerRadius" Value="4"/>
<Setter Property="Background" Value="Transparent"/>
</Style>
@@ -79,8 +78,10 @@
</Style>
<Style x:Key="ListBoxTransparent" BasedOn="{StaticResource ListBoxBaseStyle}" TargetType="ListBox">
<Setter Property="hc:BorderElement.CornerRadius" Value="4"/>
<Setter Property="Background" Value="Transparent"/>
<Setter Property="ItemContainerStyle" Value="{StaticResource ListBoxItemTransparent}"/>
<Setter Property="hc:ScrollViewer.IsInertiaEnabled" Value="True"/>
</Style>
<ItemsPanelTemplate x:Key="FluidMoveBehaviorWrapPanelItemsPanelTemplate">
@@ -176,7 +177,7 @@
</Style>
</ControlTemplate.Resources>
<Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}">
<ScrollViewer Name="PART_ScrollViewer" Padding="{TemplateBinding Padding}" HorizontalContentAlignment="Left" VerticalContentAlignment="Top" CanContentScroll="True" Content="{Binding TextArea,RelativeSource={RelativeSource TemplatedParent}}" Focusable="False" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" />
<hc:ScrollViewer IsInertiaEnabled="True" Name="PART_ScrollViewer" Padding="{TemplateBinding Padding}" HorizontalContentAlignment="Left" VerticalContentAlignment="Top" CanContentScroll="True" Content="{Binding TextArea,RelativeSource={RelativeSource TemplatedParent}}" Focusable="False" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="WordWrap" Value="True">
@@ -12,443 +12,430 @@ using HandyControlDemo.Properties.Langs;
using HandyControlDemo.Tools.Converter;
using Newtonsoft.Json;
namespace HandyControlDemo.Service
namespace HandyControlDemo.Service;
public class DataService
{
public class DataService
internal ObservableCollection<TabControlDemoModel> GetTabControlDemoDataList()
{
internal ObservableCollection<TabControlDemoModel> GetTabControlDemoDataList()
return new()
{
return new()
new TabControlDemoModel
{
new TabControlDemoModel
{
Header = "Success",
BackgroundToken = ResourceToken.SuccessBrush
},
new TabControlDemoModel
{
Header = "Primary",
BackgroundToken = ResourceToken.PrimaryBrush
},
new TabControlDemoModel
{
Header = "Warning",
BackgroundToken = ResourceToken.WarningBrush
},
new TabControlDemoModel
{
Header = "Danger",
BackgroundToken = ResourceToken.DangerBrush
},
new TabControlDemoModel
{
Header = "Info",
BackgroundToken = ResourceToken.InfoBrush
}
};
}
internal List<DemoDataModel> GetDemoDataList()
{
var list = new List<DemoDataModel>();
for (var i = 1; i <= 20; i++)
Header = "Success",
BackgroundToken = ResourceToken.SuccessBrush
},
new TabControlDemoModel
{
var dataList = new List<DemoDataModel>();
for (var j = 0; j < 3; j++)
{
dataList.Add(new DemoDataModel
{
Index = j,
IsSelected = j % 2 == 0,
Name = $"SubName{j}",
Type = (DemoType) j
});
}
var model = new DemoDataModel
{
Index = i,
IsSelected = i % 2 == 0,
Name = $"Name{i}",
Type = (DemoType) (i % 6 + 1),
DataList = dataList,
ImgPath = $"/HandyControlDemo;component/Resources/Img/Avatar/avatar{i % 6 + 1}.png",
Remark = new string(i.ToString()[0], 10)
};
list.Add(model);
Header = "Primary",
BackgroundToken = ResourceToken.PrimaryBrush
},
new TabControlDemoModel
{
Header = "Warning",
BackgroundToken = ResourceToken.WarningBrush
},
new TabControlDemoModel
{
Header = "Danger",
BackgroundToken = ResourceToken.DangerBrush
},
new TabControlDemoModel
{
Header = "Info",
BackgroundToken = ResourceToken.InfoBrush
}
};
}
return list;
}
internal List<DemoDataModel> GetDemoDataList(int count)
internal List<DemoDataModel> GetDemoDataList()
{
var list = new List<DemoDataModel>();
for (var i = 1; i <= 20; i++)
{
var list = new List<DemoDataModel>();
for (var i = 1; i <= count; i++)
var dataList = new List<DemoDataModel>();
for (var j = 0; j < 3; j++)
{
var index = i % 6 + 1;
var model = new DemoDataModel
dataList.Add(new DemoDataModel
{
Index = i,
IsSelected = i % 2 == 0,
Name = $"Name{i}",
Type = (DemoType) index,
ImgPath = $"/HandyControlDemo;component/Resources/Img/Avatar/avatar{index}.png",
Remark = new string(i.ToString()[0], 10)
};
list.Add(model);
}
return list;
}
internal List<string> GetComboBoxDemoDataList()
{
var converter = new StringRepeatConverter();
var list = new List<string>();
for (var i = 1; i <= 9; i++)
{
list.Add($"{converter.Convert(Lang.Text, null, i, CultureInfo.CurrentCulture)}{i}");
}
return list;
}
internal List<AvatarModel> GetContributorDataList()
{
var client = new WebClient();
client.Headers.Add("User-Agent", "request");
var list = new List<AvatarModel>();
try
{
var json = client.DownloadString(new Uri("https://api.github.com/repos/nabian/handycontrol/contributors"));
var objList = JsonConvert.DeserializeObject<List<dynamic>>(json);
list.AddRange(objList.Select(item => new AvatarModel
{
DisplayName = item.login,
AvatarUri = item.avatar_url,
Link = item.html_url
}));
}
catch (Exception e)
{
HandyControl.Controls.MessageBox.Error(e.Message, Lang.Error);
}
return list;
}
internal List<AvatarModel> GetBlogDataList()
{
return new()
{
new AvatarModel
{
DisplayName = "林德熙",
AvatarUri = "https://avatars3.githubusercontent.com/u/16054566?s=400&v=4",
Link = "https://blog.lindexi.com/"
},
new AvatarModel
{
DisplayName = "吕毅",
AvatarUri = "https://avatars2.githubusercontent.com/u/9959623?s=400&v=4",
Link = "https://blog.walterlv.com/"
},
new AvatarModel
{
DisplayName = "DinoChan",
AvatarUri = "https://avatars1.githubusercontent.com/u/6076257?s=400&v=4",
Link = "https://www.cnblogs.com/dino623/"
},
new AvatarModel
{
DisplayName = "noctwolf",
AvatarUri = "https://avatars3.githubusercontent.com/u/21022467?s=400&v=4",
Link = "https://www.cnblogs.com/noctwolf/"
},
new AvatarModel
{
DisplayName = "关关长语",
AvatarUri = "https://avatars3.githubusercontent.com/u/25916858?s=400&v=4",
Link = "https://blog.csdn.net/qq_28806349/category_11213909.html"
}
};
}
internal List<AvatarModel> GetProjectDataList()
{
return new()
{
new AvatarModel
{
DisplayName = "phpEnv",
AvatarUri = "https://cdn.phpenv.cn:444/logo.png",
Link = "https://www.phpenv.cn/"
},
new AvatarModel
{
DisplayName = "AutumnBox",
AvatarUri = "https://raw.githubusercontent.com/zsh2401/AutumnBox/master/src/AutumnBox.GUI/Resources/Images/icon.png",
Link = "https://github.com/zsh2401/AutumnBox"
},
new AvatarModel
{
DisplayName = "quicker",
AvatarUri = "https://files.getquicker.net/_sitefiles/quicker_round_128.png",
Link = "https://getquicker.net"
}
};
}
internal List<AvatarModel> GetWebsiteDataList()
{
return new()
{
new AvatarModel
{
DisplayName = "Dotnet9",
AvatarUri = "https://pic.cnblogs.com/avatar/1663243/20191124121029.png",
Link = "https://dotnet9.com/"
}
};
}
internal ObservableCollection<CardModel> GetCardDataList()
{
return new()
{
new CardModel
{
Header = "Atomic",
Content = "/HandyControlDemo;component/Resources/Img/Album/1.jpg",
Footer = "Stive Morgan"
},
new CardModel
{
Header = "Zinderlong",
Content = "/HandyControlDemo;component/Resources/Img/Album/2.jpg",
Footer = "Zonderling"
},
new CardModel
{
Header = "Busy Doin' Nothin'",
Content = "/HandyControlDemo;component/Resources/Img/Album/3.jpg",
Footer = "Ace Wilder"
},
new CardModel
{
Header = "Wrong",
Content = "/HandyControlDemo;component/Resources/Img/Album/4.jpg",
Footer = "Blaxy Girls"
},
new CardModel
{
Header = "The Lights",
Content = "/HandyControlDemo;component/Resources/Img/Album/5.jpg",
Footer = "Panda Eyes"
},
new CardModel
{
Header = "EA7-50-Cent Disco",
Content = "/HandyControlDemo;component/Resources/Img/Album/6.jpg",
Footer = "еяхат музыка"
},
new CardModel
{
Header = "Monsters",
Content = "/HandyControlDemo;component/Resources/Img/Album/7.jpg",
Footer = "Different Heaven"
},
new CardModel
{
Header = "Gangsta Walk",
Content = "/HandyControlDemo;component/Resources/Img/Album/8.jpg",
Footer = "Illusionize"
},
new CardModel
{
Header = "Won't Back Down",
Content = "/HandyControlDemo;component/Resources/Img/Album/9.jpg",
Footer = "Boehm / Benjamin Francis Leftwich"
},
new CardModel
{
Header = "Katchi",
Content = "/HandyControlDemo;component/Resources/Img/Album/10.jpg",
Footer = "Ofenbach / Nick Waterhouse"
}
};
}
internal CardModel GetCardData()
{
return new()
{
Content = $"/HandyControlDemo;component/Resources/Img/Album/{DateTime.Now.Second % 10 + 1}.jpg"
};
}
internal List<StepBarDemoModel> GetStepBarDemoDataList()
{
return new()
{
new StepBarDemoModel
{
Header = LangKeys.Step,
Content = LangKeys.Register
},
new StepBarDemoModel
{
Header = LangKeys.Step,
Content = LangKeys.BasicInfo
},
new StepBarDemoModel
{
Header = LangKeys.Step,
Content = LangKeys.UploadFile
},
new StepBarDemoModel
{
Header = LangKeys.Step,
Content = LangKeys.Complete
}
};
}
internal ObservableCollection<CoverViewDemoModel> GetCoverViewDemoDataList()
{
return new()
{
new CoverViewDemoModel
{
ImgPath = "/HandyControlDemo;component/Resources/Img/Album/1.jpg",
BackgroundToken = ResourceToken.SuccessBrush
},
new CoverViewDemoModel
{
ImgPath = "/HandyControlDemo;component/Resources/Img/Album/2.jpg",
BackgroundToken = ResourceToken.PrimaryBrush
},
new CoverViewDemoModel
{
ImgPath = "/HandyControlDemo;component/Resources/Img/Album/3.jpg",
BackgroundToken = ResourceToken.WarningBrush
},
new CoverViewDemoModel
{
ImgPath = "/HandyControlDemo;component/Resources/Img/Album/4.jpg",
BackgroundToken = ResourceToken.DangerBrush
},
new CoverViewDemoModel
{
ImgPath = "/HandyControlDemo;component/Resources/Img/Album/5.jpg",
BackgroundToken = ResourceToken.SuccessBrush
},
new CoverViewDemoModel
{
ImgPath = "/HandyControlDemo;component/Resources/Img/Album/6.jpg",
BackgroundToken = ResourceToken.PrimaryBrush
},
new CoverViewDemoModel
{
ImgPath = "/HandyControlDemo;component/Resources/Img/Album/7.jpg",
BackgroundToken = ResourceToken.InfoBrush
},
new CoverViewDemoModel
{
ImgPath = "/HandyControlDemo;component/Resources/Img/Album/8.jpg",
BackgroundToken = ResourceToken.WarningBrush
},
new CoverViewDemoModel
{
ImgPath = "/HandyControlDemo;component/Resources/Img/Album/9.jpg",
BackgroundToken = ResourceToken.PrimaryBrush
},
new CoverViewDemoModel
{
ImgPath = "/HandyControlDemo;component/Resources/Img/Album/10.jpg",
BackgroundToken = ResourceToken.DangerBrush
}
};
}
internal List<DemoInfoModel> GetDemoInfo()
{
var infoList = new List<DemoInfoModel>();
var stream = Application.GetResourceStream(new Uri("Data/DemoInfo.json", UriKind.Relative))?.Stream;
if (stream == null) return infoList;
string jsonStr;
using (var reader = new StreamReader(stream))
{
jsonStr = reader.ReadToEnd();
}
var jsonObj = JsonConvert.DeserializeObject<dynamic>(jsonStr);
foreach (var item in jsonObj)
{
var titleKey = (string) item.title;
var title = titleKey;
List<DemoItemModel> list = Convert2DemoItemList(item.demoItemList);
var demoInfoModel = new DemoInfoModel
{
Key = titleKey,
Title = title,
DemoItemList = list,
SelectedIndex = (int) item.selectedIndex,
IsGroupEnabled = (bool) item.group
};
infoList.Add(demoInfoModel);
}
return infoList;
}
private List<DemoItemModel> Convert2DemoItemList(dynamic list)
{
var resultList = new List<DemoItemModel>();
foreach (var item in list)
{
var name = (string) item[0];
string targetCtlName = item[1];
string imageName = item[2];
var isNew = !string.IsNullOrEmpty((string) item[3]);
var groupName = (string) item[4];
if (string.IsNullOrEmpty(groupName))
{
groupName = "Misc";
}
resultList.Add(new DemoItemModel
{
Name = name,
TargetCtlName = targetCtlName,
ImageName = $"../../Resources/Img/LeftMainContent/{imageName}.png",
IsNew = isNew,
GroupName = groupName
Index = j,
IsSelected = j % 2 == 0,
Name = $"SubName{j}",
Type = (DemoType) j
});
}
return resultList;
var model = new DemoDataModel
{
Index = i,
IsSelected = i % 2 == 0,
Name = $"Name{i}",
Type = (DemoType) (i % 6 + 1),
DataList = dataList,
ImgPath = $"/HandyControlDemo;component/Resources/Img/Avatar/avatar{i % 6 + 1}.png",
Remark = new string(i.ToString()[0], 10)
};
list.Add(model);
}
public string GetDemoUrl(DemoInfoModel demoInfo, DemoItemModel demoItem)
return list;
}
internal List<DemoDataModel> GetDemoDataList(int count)
{
var list = new List<DemoDataModel>();
for (var i = 1; i <= count; i++)
{
var key = demoInfo.Key switch
var index = i % 6 + 1;
var model = new DemoDataModel
{
"Styles" => "native_controls",
"Controls" => "extend_controls",
"Tools" => "tools",
_ => string.Empty
Index = i,
IsSelected = i % 2 == 0,
Name = $"Name{i}",
Type = (DemoType) index,
ImgPath = $"/HandyControlDemo;component/Resources/Img/Avatar/avatar{index}.png",
Remark = new string(i.ToString()[0], 10)
};
list.Add(model);
}
return list;
}
internal List<AvatarModel> GetContributorDataList()
{
var client = new WebClient();
client.Headers.Add("User-Agent", "request");
var list = new List<AvatarModel>();
try
{
var json = client.DownloadString(new Uri("https://api.github.com/repos/nabian/handycontrol/contributors"));
var objList = JsonConvert.DeserializeObject<List<dynamic>>(json);
list.AddRange(objList.Select(item => new AvatarModel
{
DisplayName = item.login,
AvatarUri = item.avatar_url,
Link = item.html_url
}));
}
catch (Exception e)
{
HandyControl.Controls.MessageBox.Error(e.Message, Lang.Error);
}
return list;
}
internal List<AvatarModel> GetBlogDataList()
{
return new()
{
new AvatarModel
{
DisplayName = "林德熙",
AvatarUri = "https://avatars3.githubusercontent.com/u/16054566?s=400&v=4",
Link = "https://blog.lindexi.com/"
},
new AvatarModel
{
DisplayName = "吕毅",
AvatarUri = "https://avatars2.githubusercontent.com/u/9959623?s=400&v=4",
Link = "https://blog.walterlv.com/"
},
new AvatarModel
{
DisplayName = "DinoChan",
AvatarUri = "https://avatars1.githubusercontent.com/u/6076257?s=400&v=4",
Link = "https://www.cnblogs.com/dino623/"
},
new AvatarModel
{
DisplayName = "noctwolf",
AvatarUri = "https://avatars3.githubusercontent.com/u/21022467?s=400&v=4",
Link = "https://www.cnblogs.com/noctwolf/"
},
new AvatarModel
{
DisplayName = "关关长语",
AvatarUri = "https://avatars3.githubusercontent.com/u/25916858?s=400&v=4",
Link = "https://blog.csdn.net/qq_28806349/category_11213909.html"
}
};
}
internal List<AvatarModel> GetProjectDataList()
{
return new()
{
new AvatarModel
{
DisplayName = "phpEnv",
AvatarUri = "https://cdn.phpenv.cn:444/logo.png",
Link = "https://www.phpenv.cn/"
},
new AvatarModel
{
DisplayName = "AutumnBox",
AvatarUri = "https://raw.githubusercontent.com/zsh2401/AutumnBox/master/src/AutumnBox.GUI/Resources/Images/icon.png",
Link = "https://github.com/zsh2401/AutumnBox"
},
new AvatarModel
{
DisplayName = "quicker",
AvatarUri = "https://files.getquicker.net/_sitefiles/quicker_round_128.png",
Link = "https://getquicker.net"
}
};
}
internal List<AvatarModel> GetWebsiteDataList()
{
return new()
{
new AvatarModel
{
DisplayName = "Dotnet9",
AvatarUri = "https://pic.cnblogs.com/avatar/1663243/20191124121029.png",
Link = "https://dotnet9.com/"
}
};
}
internal ObservableCollection<CardModel> GetCardDataList()
{
return new()
{
new CardModel
{
Header = "Atomic",
Content = "/HandyControlDemo;component/Resources/Img/Album/1.jpg",
Footer = "Stive Morgan"
},
new CardModel
{
Header = "Zinderlong",
Content = "/HandyControlDemo;component/Resources/Img/Album/2.jpg",
Footer = "Zonderling"
},
new CardModel
{
Header = "Busy Doin' Nothin'",
Content = "/HandyControlDemo;component/Resources/Img/Album/3.jpg",
Footer = "Ace Wilder"
},
new CardModel
{
Header = "Wrong",
Content = "/HandyControlDemo;component/Resources/Img/Album/4.jpg",
Footer = "Blaxy Girls"
},
new CardModel
{
Header = "The Lights",
Content = "/HandyControlDemo;component/Resources/Img/Album/5.jpg",
Footer = "Panda Eyes"
},
new CardModel
{
Header = "EA7-50-Cent Disco",
Content = "/HandyControlDemo;component/Resources/Img/Album/6.jpg",
Footer = "еяхат музыка"
},
new CardModel
{
Header = "Monsters",
Content = "/HandyControlDemo;component/Resources/Img/Album/7.jpg",
Footer = "Different Heaven"
},
new CardModel
{
Header = "Gangsta Walk",
Content = "/HandyControlDemo;component/Resources/Img/Album/8.jpg",
Footer = "Illusionize"
},
new CardModel
{
Header = "Won't Back Down",
Content = "/HandyControlDemo;component/Resources/Img/Album/9.jpg",
Footer = "Boehm / Benjamin Francis Leftwich"
},
new CardModel
{
Header = "Katchi",
Content = "/HandyControlDemo;component/Resources/Img/Album/10.jpg",
Footer = "Ofenbach / Nick Waterhouse"
}
};
}
internal CardModel GetCardData()
{
return new()
{
Content = $"/HandyControlDemo;component/Resources/Img/Album/{DateTime.Now.Second % 10 + 1}.jpg"
};
}
internal List<StepBarDemoModel> GetStepBarDemoDataList()
{
return new()
{
new StepBarDemoModel
{
Header = LangKeys.Step,
Content = LangKeys.Register
},
new StepBarDemoModel
{
Header = LangKeys.Step,
Content = LangKeys.BasicInfo
},
new StepBarDemoModel
{
Header = LangKeys.Step,
Content = LangKeys.UploadFile
},
new StepBarDemoModel
{
Header = LangKeys.Step,
Content = LangKeys.Complete
}
};
}
internal ObservableCollection<CoverViewDemoModel> GetCoverViewDemoDataList()
{
return new()
{
new CoverViewDemoModel
{
ImgPath = "/HandyControlDemo;component/Resources/Img/Album/1.jpg",
BackgroundToken = ResourceToken.SuccessBrush
},
new CoverViewDemoModel
{
ImgPath = "/HandyControlDemo;component/Resources/Img/Album/2.jpg",
BackgroundToken = ResourceToken.PrimaryBrush
},
new CoverViewDemoModel
{
ImgPath = "/HandyControlDemo;component/Resources/Img/Album/3.jpg",
BackgroundToken = ResourceToken.WarningBrush
},
new CoverViewDemoModel
{
ImgPath = "/HandyControlDemo;component/Resources/Img/Album/4.jpg",
BackgroundToken = ResourceToken.DangerBrush
},
new CoverViewDemoModel
{
ImgPath = "/HandyControlDemo;component/Resources/Img/Album/5.jpg",
BackgroundToken = ResourceToken.SuccessBrush
},
new CoverViewDemoModel
{
ImgPath = "/HandyControlDemo;component/Resources/Img/Album/6.jpg",
BackgroundToken = ResourceToken.PrimaryBrush
},
new CoverViewDemoModel
{
ImgPath = "/HandyControlDemo;component/Resources/Img/Album/7.jpg",
BackgroundToken = ResourceToken.InfoBrush
},
new CoverViewDemoModel
{
ImgPath = "/HandyControlDemo;component/Resources/Img/Album/8.jpg",
BackgroundToken = ResourceToken.WarningBrush
},
new CoverViewDemoModel
{
ImgPath = "/HandyControlDemo;component/Resources/Img/Album/9.jpg",
BackgroundToken = ResourceToken.PrimaryBrush
},
new CoverViewDemoModel
{
ImgPath = "/HandyControlDemo;component/Resources/Img/Album/10.jpg",
BackgroundToken = ResourceToken.DangerBrush
}
};
}
internal List<DemoInfoModel> GetDemoInfo()
{
var infoList = new List<DemoInfoModel>();
var stream = Application.GetResourceStream(new Uri("Data/DemoInfo.json", UriKind.Relative))?.Stream;
if (stream == null) return infoList;
string jsonStr;
using (var reader = new StreamReader(stream))
{
jsonStr = reader.ReadToEnd();
}
var jsonObj = JsonConvert.DeserializeObject<dynamic>(jsonStr);
foreach (var item in jsonObj)
{
var titleKey = (string) item.title;
var title = titleKey;
List<DemoItemModel> list = Convert2DemoItemList(item.demoItemList);
var demoInfoModel = new DemoInfoModel
{
Key = titleKey,
Title = title,
DemoItemList = list,
SelectedIndex = (int) item.selectedIndex,
IsGroupEnabled = (bool) item.group
};
var domainName = LangProvider.Culture == null || LangProvider.Culture.Name.ToLower() == "zh-cn"
? "handyorg"
: "ghost1372";
return $"https://{domainName}.github.io/handycontrol/{key}/{demoItem.Name[0].ToString().ToLower()}{demoItem.Name.Substring(1)}";
infoList.Add(demoInfoModel);
}
return infoList;
}
private List<DemoItemModel> Convert2DemoItemList(dynamic list)
{
var resultList = new List<DemoItemModel>();
foreach (var item in list)
{
var name = (string) item[0];
string targetCtlName = item[1];
string imageName = item[2];
var isNew = !string.IsNullOrEmpty((string) item[3]);
var groupName = (string) item[4];
if (string.IsNullOrEmpty(groupName))
{
groupName = "Misc";
}
resultList.Add(new DemoItemModel
{
Name = name,
TargetCtlName = targetCtlName,
ImageName = $"../../Resources/Img/LeftMainContent/{imageName}.png",
IsNew = isNew,
GroupName = groupName
});
}
return resultList;
}
public string GetDemoUrl(DemoInfoModel demoInfo, DemoItemModel demoItem)
{
var key = demoInfo.Key switch
{
"Styles" => "native_controls",
"Controls" => "extend_controls",
"Tools" => "tools",
_ => string.Empty
};
var domainName = LangProvider.Culture == null || LangProvider.Culture.Name.ToLower() == "zh-cn"
? "handyorg"
: "ghost1372";
return $"https://{domainName}.github.io/handycontrol/{key}/{demoItem.Name[0].ToString().ToLower()}{demoItem.Name.Substring(1)}";
}
}
@@ -5,29 +5,28 @@ using System.Windows.Media;
using HandyControl.Data;
using HandyControl.Tools;
namespace HandyControlDemo.Tools.Converter
namespace HandyControlDemo.Tools.Converter;
public class HatchBrushConverter : IValueConverter
{
public class HatchBrushConverter : IValueConverter
private readonly HatchBrushGenerator _brushGenerator;
public HatchBrushConverter()
{
private readonly HatchBrushGenerator _brushGenerator;
_brushGenerator = new HatchBrushGenerator();
}
public HatchBrushConverter()
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is HatchStyle style)
{
_brushGenerator = new HatchBrushGenerator();
return _brushGenerator.GetHatchBrush(style, ResourceHelper.GetResource<Color>(ResourceToken.DarkPrimaryColor), Colors.Transparent);
}
return Brushes.Transparent;
}
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is HatchStyle style)
{
return _brushGenerator.GetHatchBrush(style, ResourceHelper.GetResource<Color>(ResourceToken.DarkPrimaryColor), Colors.Transparent);
}
return Brushes.Transparent;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotSupportedException();
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotSupportedException();
}
}
@@ -4,18 +4,17 @@ using System.Windows.Data;
using System.Windows.Media;
using HandyControl.Tools;
namespace HandyControlDemo.Tools.Converter
{
public class String2BrushConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return value is string str ? ResourceHelper.GetResource<Brush>(str) : default;
}
namespace HandyControlDemo.Tools.Converter;
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotSupportedException();
}
public class String2BrushConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return value is string str ? ResourceHelper.GetResource<Brush>(str) : default;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotSupportedException();
}
}
@@ -3,43 +3,42 @@ using System.Globalization;
using System.Text;
using System.Windows.Data;
namespace HandyControlDemo.Tools.Converter
namespace HandyControlDemo.Tools.Converter;
public class StringRepeatConverter : IValueConverter
{
public class StringRepeatConverter : IValueConverter
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
if (value is string strValue)
{
if (value is string strValue)
var builder = new StringBuilder();
int num;
if (parameter is string numStr)
{
var builder = new StringBuilder();
int num;
if (parameter is string numStr)
{
if (!int.TryParse(numStr, out num))
{
return strValue;
}
}
else if (parameter is int intValue)
{
num = intValue;
}
else
if (!int.TryParse(numStr, out num))
{
return strValue;
}
for (var i = 0; i < num; i++)
{
builder.Append(strValue);
}
return builder.ToString();
}
return string.Empty;
else if (parameter is int intValue)
{
num = intValue;
}
else
{
return strValue;
}
for (var i = 0; i < num; i++)
{
builder.Append(strValue);
}
return builder.ToString();
}
return string.Empty;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotSupportedException();
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotSupportedException();
}
}
@@ -1,12 +1,11 @@
using HandyControlDemo.Properties.Langs;
namespace HandyControlDemo.Tools.Extension
namespace HandyControlDemo.Tools.Extension;
public class LangExtension : HandyControl.Tools.Extension.LangExtension
{
public class LangExtension : HandyControl.Tools.Extension.LangExtension
public LangExtension()
{
public LangExtension()
{
Source = LangProvider.Instance;
}
Source = LangProvider.Instance;
}
}
@@ -1,37 +1,36 @@
using System;
using System.Collections.Generic;
namespace HandyControlDemo.Tools
namespace HandyControlDemo.Tools;
internal class AssemblyHelper
{
internal class AssemblyHelper
private static readonly string NameSpaceStr = typeof(AssemblyHelper).Assembly.GetName().Name;
private static readonly Dictionary<string, object> CacheDic = new();
public static void Register(string name, object instance) => CacheDic[name] = instance;
public static object ResolveByKey(string key)
{
private static readonly string NameSpaceStr = typeof(AssemblyHelper).Assembly.GetName().Name;
private static readonly Dictionary<string, object> CacheDic = new();
public static void Register(string name, object instance) => CacheDic[name] = instance;
public static object ResolveByKey(string key)
if (CacheDic.TryGetValue(key, out var value))
{
if (CacheDic.TryGetValue(key, out var value))
{
return value;
}
return null;
return value;
}
public static object CreateInternalInstance(string className)
return null;
}
public static object CreateInternalInstance(string className)
{
try
{
try
{
var type = Type.GetType($"{NameSpaceStr}.{className}");
return type == null ? null : Activator.CreateInstance(type);
}
catch
{
return null;
}
var type = Type.GetType($"{NameSpaceStr}.{className}");
return type == null ? null : Activator.CreateInstance(type);
}
catch
{
return null;
}
}
}
@@ -1,15 +1,15 @@
using System.Diagnostics;
using System.Reflection;
namespace HandyControlDemo.Tools
namespace HandyControlDemo.Tools;
internal class VersionHelper
{
internal class VersionHelper
internal static string GetVersion()
{
internal static string GetVersion()
{
var versionInfo = FileVersionInfo.GetVersionInfo(Assembly.GetEntryAssembly().Location);
var versionInfo = FileVersionInfo.GetVersionInfo(Assembly.GetEntryAssembly().Location);
#if NET40
var netVersion = "NET 40";
var netVersion = "NET 40";
#elif NET45
var netVersion = "NET 45";
#elif NET451
@@ -35,14 +35,13 @@ namespace HandyControlDemo.Tools
#elif NET6_0
var netVersion = "NET 60";
#elif NETCOREAPP3_0
var netVersion = "CORE 30";
var netVersion = "CORE 30";
#elif NETCOREAPP3_1
var netVersion = "CORE 31";
#endif
return $"v {versionInfo.FileVersion} {netVersion}";
}
internal static string GetCopyright() =>
FileVersionInfo.GetVersionInfo(Assembly.GetEntryAssembly().Location).LegalCopyright;
return $"v {versionInfo.FileVersion} {netVersion}";
}
internal static string GetCopyright() =>
FileVersionInfo.GetVersionInfo(Assembly.GetEntryAssembly().Location).LegalCopyright;
}
@@ -1,14 +1,13 @@
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);
namespace HandyControlDemo.Tools;
[DllImport("winmm.dll", EntryPoint = "mciSendString", CharSet = CharSet.Auto)]
public static extern int MciSendString(string lpstrCommand, string lpstrReturnString, int uReturnLength, int hwndCallback);
}
internal class Win32Helper
{
[DllImport("user32.dll", ExactSpelling = true, CharSet = CharSet.Auto)]
public static extern bool SetForegroundWindow(IntPtr hWnd);
[DllImport("winmm.dll", EntryPoint = "mciSendString", CharSet = CharSet.Auto)]
public static extern int MciSendString(string lpstrCommand, string lpstrReturnString, int uReturnLength, int hwndCallback);
}
@@ -6,75 +6,74 @@ using HandyControl.Data;
using ICSharpCode.AvalonEdit.Highlighting;
using ICSharpCode.AvalonEdit.Highlighting.Xshd;
namespace HandyControlDemo.Tools
namespace HandyControlDemo.Tools;
internal class HighlightingProvider
{
internal class HighlightingProvider
public static HighlightingProvider Default = new Lazy<HighlightingProvider>(() => new HighlightingProvider()).Value;
protected static readonly Lazy<IHighlightingDefinition> DefaultDefinition = new(() => HighlightingManager.Instance.GetDefinition("C#"));
private static readonly Dictionary<SkinType, HighlightingProvider> Providers = new();
protected Dictionary<string, Lazy<IHighlightingDefinition>> Definition;
public static void Register(SkinType skinType, HighlightingProvider provider)
{
public static HighlightingProvider Default = new Lazy<HighlightingProvider>(() => new HighlightingProvider()).Value;
protected static readonly Lazy<IHighlightingDefinition> DefaultDefinition = new(() => HighlightingManager.Instance.GetDefinition("C#"));
private static readonly Dictionary<SkinType, HighlightingProvider> Providers = new();
protected Dictionary<string, Lazy<IHighlightingDefinition>> Definition;
public static void Register(SkinType skinType, HighlightingProvider provider)
{
Providers[skinType] = provider ?? throw new ArgumentNullException(nameof(provider));
provider.InitDefinitions();
}
public static IHighlightingDefinition GetDefinition(SkinType skinType, string name)
{
if (Providers.TryGetValue(skinType, out var provider))
{
return provider.GetDefinition(name);
}
return DefaultDefinition.Value;
}
protected static IHighlightingDefinition LoadDefinition(string xshdName)
{
var streamResourceInfo = Application.GetResourceStream(new Uri($"pack://application:,,,/Resources/xshd/{xshdName}.xshd"));
if (streamResourceInfo == null)
{
return DefaultDefinition.Value;
}
using var reader = new XmlTextReader(streamResourceInfo.Stream);
return HighlightingLoader.Load(reader, HighlightingManager.Instance);
}
protected virtual IHighlightingDefinition GetDefinition(string name)
{
if (Definition.TryGetValue(name, out var definition))
{
return definition.Value;
}
return DefaultDefinition.Value;
}
protected virtual void InitDefinitions()
{
Definition = new Dictionary<string, Lazy<IHighlightingDefinition>>
{
["XML"] = new(() => HighlightingManager.Instance.GetDefinition("XML")),
["C#"] = new(() => DefaultDefinition.Value)
};
}
Providers[skinType] = provider ?? throw new ArgumentNullException(nameof(provider));
provider.InitDefinitions();
}
internal class HighlightingProviderDark : HighlightingProvider
public static IHighlightingDefinition GetDefinition(SkinType skinType, string name)
{
protected override void InitDefinitions()
if (Providers.TryGetValue(skinType, out var provider))
{
Definition = new Dictionary<string, Lazy<IHighlightingDefinition>>
{
["XML"] = new(() => LoadDefinition("XML-Dark")),
["C#"] = new(() => LoadDefinition("CSharp-Dark")),
};
return provider.GetDefinition(name);
}
return DefaultDefinition.Value;
}
protected static IHighlightingDefinition LoadDefinition(string xshdName)
{
var streamResourceInfo = Application.GetResourceStream(new Uri($"pack://application:,,,/Resources/xshd/{xshdName}.xshd"));
if (streamResourceInfo == null)
{
return DefaultDefinition.Value;
}
using var reader = new XmlTextReader(streamResourceInfo.Stream);
return HighlightingLoader.Load(reader, HighlightingManager.Instance);
}
protected virtual IHighlightingDefinition GetDefinition(string name)
{
if (Definition.TryGetValue(name, out var definition))
{
return definition.Value;
}
return DefaultDefinition.Value;
}
protected virtual void InitDefinitions()
{
Definition = new Dictionary<string, Lazy<IHighlightingDefinition>>
{
["XML"] = new(() => HighlightingManager.Instance.GetDefinition("XML")),
["C#"] = new(() => DefaultDefinition.Value)
};
}
}
internal class HighlightingProviderDark : HighlightingProvider
{
protected override void InitDefinitions()
{
Definition = new Dictionary<string, Lazy<IHighlightingDefinition>>
{
["XML"] = new(() => LoadDefinition("XML-Dark")),
["C#"] = new(() => LoadDefinition("CSharp-Dark")),
};
}
}
@@ -0,0 +1,19 @@
using System.Globalization;
using System.Windows.Controls;
namespace HandyControlDemo.Tools;
public class NumericUpDownDemoRule : ValidationRule
{
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
if (value is not double doubleValue)
{
return new ValidationResult(false, HandyControl.Properties.Langs.Lang.FormatError);
}
return doubleValue % 2 > double.Epsilon
? new ValidationResult(false, Properties.Langs.Lang.Error)
: ValidationResult.ValidResult;
}
}
@@ -1,40 +1,39 @@
using System.Windows;
using System.Windows.Media.Imaging;
namespace HandyControlDemo.UserControl
namespace HandyControlDemo.UserControl;
public partial class Avatar
{
public partial class Avatar
public Avatar()
{
public Avatar()
{
InitializeComponent();
}
InitializeComponent();
}
public static readonly DependencyProperty SourceProperty = DependencyProperty.Register(
"Source", typeof(BitmapFrame), typeof(Avatar), new PropertyMetadata(default(BitmapFrame)));
public static readonly DependencyProperty SourceProperty = DependencyProperty.Register(
"Source", typeof(BitmapFrame), typeof(Avatar), new PropertyMetadata(default(BitmapFrame)));
public BitmapFrame Source
{
get => (BitmapFrame) GetValue(SourceProperty);
set => SetValue(SourceProperty, value);
}
public BitmapFrame Source
{
get => (BitmapFrame) GetValue(SourceProperty);
set => SetValue(SourceProperty, value);
}
public static readonly DependencyProperty UserNameProperty = DependencyProperty.Register(
"DisplayName", typeof(string), typeof(Avatar), new PropertyMetadata(default(string)));
public static readonly DependencyProperty UserNameProperty = DependencyProperty.Register(
"DisplayName", typeof(string), typeof(Avatar), new PropertyMetadata(default(string)));
public string DisplayName
{
get => (string) GetValue(UserNameProperty);
set => SetValue(UserNameProperty, value);
}
public string DisplayName
{
get => (string) GetValue(UserNameProperty);
set => SetValue(UserNameProperty, value);
}
public static readonly DependencyProperty LinkProperty = DependencyProperty.Register(
"Link", typeof(string), typeof(Avatar), new PropertyMetadata(default(string)));
public static readonly DependencyProperty LinkProperty = DependencyProperty.Register(
"Link", typeof(string), typeof(Avatar), new PropertyMetadata(default(string)));
public string Link
{
get => (string) GetValue(LinkProperty);
set => SetValue(LinkProperty, value);
}
public string Link
{
get => (string) GetValue(LinkProperty);
set => SetValue(LinkProperty, value);
}
}
@@ -1,22 +1,21 @@
using System.Windows.Controls;
using HandyControl.Tools;
namespace HandyControlDemo.UserControl
namespace HandyControlDemo.UserControl;
public partial class ChatBox
{
public partial class ChatBox
private ScrollViewer _scrollViewer;
public ChatBox()
{
private ScrollViewer _scrollViewer;
InitializeComponent();
ListBoxChat.ItemContainerGenerator.ItemsChanged += ItemContainerGenerator_ItemsChanged;
}
public ChatBox()
{
InitializeComponent();
ListBoxChat.ItemContainerGenerator.ItemsChanged += ItemContainerGenerator_ItemsChanged;
}
private void ItemContainerGenerator_ItemsChanged(object sender, System.Windows.Controls.Primitives.ItemsChangedEventArgs e)
{
_scrollViewer ??= VisualHelper.GetChild<ScrollViewer>(ListBoxChat);
_scrollViewer?.ScrollToBottom();
}
private void ItemContainerGenerator_ItemsChanged(object sender, System.Windows.Controls.Primitives.ItemsChangedEventArgs e)
{
_scrollViewer ??= VisualHelper.GetChild<ScrollViewer>(ListBoxChat);
_scrollViewer?.ScrollToBottom();
}
}
@@ -1,19 +1,18 @@
using System.Windows;
using HandyControlDemo.Data;
namespace HandyControlDemo.UserControl
namespace HandyControlDemo.UserControl;
public partial class GeometryItem
{
public partial class GeometryItem
public GeometryItem() => InitializeComponent();
public static readonly DependencyProperty InfoProperty = DependencyProperty.Register(
"Info", typeof(GeometryItemModel), typeof(GeometryItem), new PropertyMetadata(default(GeometryItemModel)));
public GeometryItemModel Info
{
public GeometryItem() => InitializeComponent();
public static readonly DependencyProperty InfoProperty = DependencyProperty.Register(
"Info", typeof(GeometryItemModel), typeof(GeometryItem), new PropertyMetadata(default(GeometryItemModel)));
public GeometryItemModel Info
{
get => (GeometryItemModel) GetValue(InfoProperty);
set => SetValue(InfoProperty, value);
}
get => (GeometryItemModel) GetValue(InfoProperty);
set => SetValue(InfoProperty, value);
}
}
@@ -1,7 +1,6 @@
namespace HandyControlDemo.UserControl
namespace HandyControlDemo.UserControl;
internal interface IFull
{
internal interface IFull
{
}
}
@@ -1,10 +1,9 @@
namespace HandyControlDemo.UserControl
namespace HandyControlDemo.UserControl;
public partial class InteractiveDialog
{
public partial class InteractiveDialog
public InteractiveDialog()
{
public InteractiveDialog()
{
InitializeComponent();
}
InitializeComponent();
}
}
@@ -1,10 +1,9 @@
namespace HandyControlDemo.UserControl
namespace HandyControlDemo.UserControl;
public partial class TextDialog
{
public partial class TextDialog
public TextDialog()
{
public TextDialog()
{
InitializeComponent();
}
InitializeComponent();
}
}
@@ -2,23 +2,22 @@
using System.Windows.Controls.Primitives;
using HandyControl.Tools;
namespace HandyControlDemo.UserControl
namespace HandyControlDemo.UserControl;
public partial class TextDialogWithTimer
{
public partial class TextDialogWithTimer
public TextDialogWithTimer()
{
public TextDialogWithTimer()
{
InitializeComponent();
InitializeComponent();
var animation = AnimationHelper.CreateAnimation(100, 5000);
animation.EasingFunction = null;
animation.Completed += Animation_Completed;
ProgressBarTimer.BeginAnimation(RangeBase.ValueProperty, animation);
}
var animation = AnimationHelper.CreateAnimation(100, 5000);
animation.EasingFunction = null;
animation.Completed += Animation_Completed;
ProgressBarTimer.BeginAnimation(RangeBase.ValueProperty, animation);
}
private void Animation_Completed(object sender, EventArgs e)
{
ButtonClose.Command.Execute(null);
}
private void Animation_Completed(object sender, EventArgs e)
{
ButtonClose.Command.Execute(null);
}
}
@@ -1,10 +1,9 @@
namespace HandyControlDemo.UserControl
namespace HandyControlDemo.UserControl;
public partial class AnimationPathDemoCtl
{
public partial class AnimationPathDemoCtl
public AnimationPathDemoCtl()
{
public AnimationPathDemoCtl()
{
InitializeComponent();
}
InitializeComponent();
}
}
@@ -1,10 +1,9 @@
namespace HandyControlDemo.UserControl
namespace HandyControlDemo.UserControl;
public partial class AutoCompleteTextBoxDemoCtl
{
public partial class AutoCompleteTextBoxDemoCtl
public AutoCompleteTextBoxDemoCtl()
{
public AutoCompleteTextBoxDemoCtl()
{
InitializeComponent();
}
InitializeComponent();
}
}
@@ -7,25 +7,25 @@
Background="{DynamicResource RegionBrush}"
DataContext="{Binding BadgeDemo, Source={StaticResource Locator}}">
<hc:TransitioningContentControl>
<StackPanel Margin="32" Orientation="Horizontal">
<hc:UniformSpacingPanel Margin="32" Spacing="32" ChildWrapping="Wrap" VerticalAlignment="Center" HorizontalAlignment="Center">
<hc:Badge Text="New" BadgeMargin="0,-14,-20,0" Height="30">
<Button Content="{ex:Lang Key={x:Static langs:LangKeys.Comment}}"/>
</hc:Badge>
<hc:Badge Text="New" BadgeMargin="0,-14,-20,0" Height="30" Margin="32,0,0,0" Style="{StaticResource BadgeDanger}">
<hc:Badge Text="New" BadgeMargin="0,-14,-20,0" Height="30" Style="{StaticResource BadgeDanger}">
<Button Content="{ex:Lang Key={x:Static langs:LangKeys.Comment}}"/>
</hc:Badge>
<hc:Badge Value="{Binding Count}" BadgeMargin="0,-14,-10,0" Height="30" Margin="32,0,0,0" Style="{StaticResource BadgePrimary}">
<hc:Badge Value="{Binding Count}" BadgeMargin="0,-14,-10,0" Height="30" Style="{StaticResource BadgePrimary}">
<Button Content="{ex:Lang Key={x:Static langs:LangKeys.Click2Count}}" Command="{Binding CountCmd}"/>
</hc:Badge>
<hc:Badge Value="100" BadgeMargin="0,-14,-20,0" Height="30" Margin="32,0,0,0" Style="{StaticResource BadgeDanger}">
<hc:Badge Value="100" BadgeMargin="0,-14,-20,0" Height="30" Style="{StaticResource BadgeDanger}">
<Button Content="{ex:Lang Key={x:Static langs:LangKeys.Comment}}"/>
</hc:Badge>
<hc:Badge Status="Dot" Height="30" Margin="32,0,0,0" Style="{StaticResource BadgeDanger}">
<hc:Badge Status="Dot" Height="30" Style="{StaticResource BadgeDanger}">
<Button Content="{ex:Lang Key={x:Static langs:LangKeys.Reply}}"/>
</hc:Badge>
<hc:Badge Status="Processing" Height="30" Margin="32,0,0,0" Style="{StaticResource BadgeDanger}">
<hc:Badge Status="Processing" Height="30" Style="{StaticResource BadgeDanger}">
<Button Content="{ex:Lang Key={x:Static langs:LangKeys.Reply}}" />
</hc:Badge>
</StackPanel>
</hc:UniformSpacingPanel>
</hc:TransitioningContentControl>
</UserControl>
@@ -1,10 +1,9 @@
namespace HandyControlDemo.UserControl
namespace HandyControlDemo.UserControl;
public partial class BadgeDemoCtl
{
public partial class BadgeDemoCtl
public BadgeDemoCtl()
{
public BadgeDemoCtl()
{
InitializeComponent();
}
InitializeComponent();
}
}
@@ -6,67 +6,69 @@
xmlns:langs="clr-namespace:HandyControlDemo.Properties.Langs"
xmlns:ex="clr-namespace:HandyControlDemo.Tools.Extension">
<hc:TransitioningContentControl>
<WrapPanel Margin="16" VerticalAlignment="Center">
<StackPanel Margin="16">
<hc:ButtonGroup>
<RadioButton Content="{ex:Lang Key={x:Static langs:LangKeys.RadioButton}}" IsChecked="True"/>
<RadioButton Content="{ex:Lang Key={x:Static langs:LangKeys.RadioButton}}"/>
<RadioButton Content="{ex:Lang Key={x:Static langs:LangKeys.RadioButton}}"/>
<RadioButton Content="{ex:Lang Key={x:Static langs:LangKeys.RadioButton}}"/>
<RadioButton Content="{ex:Lang Key={x:Static langs:LangKeys.RadioButton}}"/>
</hc:ButtonGroup>
<hc:ButtonGroup Margin="0,32,0,0">
<Button Content="{ex:Lang Key={x:Static langs:LangKeys.Button}}"/>
<Button Content="{ex:Lang Key={x:Static langs:LangKeys.Button}}"/>
<Button Content="{ex:Lang Key={x:Static langs:LangKeys.Button}}"/>
<Button Content="{ex:Lang Key={x:Static langs:LangKeys.Button}}"/>
<Button Content="{ex:Lang Key={x:Static langs:LangKeys.Button}}"/>
</hc:ButtonGroup>
<hc:ButtonGroup Margin="0,32,0,0" Style="{StaticResource ButtonGroupSolid}">
<ToggleButton Content="{ex:Lang Key={x:Static langs:LangKeys.ToggleButton}}"/>
<ToggleButton Content="{ex:Lang Key={x:Static langs:LangKeys.ToggleButton}}"/>
<ToggleButton Content="{ex:Lang Key={x:Static langs:LangKeys.ToggleButton}}" IsChecked="True"/>
<ToggleButton Content="{ex:Lang Key={x:Static langs:LangKeys.ToggleButton}}"/>
<ToggleButton Content="{ex:Lang Key={x:Static langs:LangKeys.ToggleButton}}"/>
</hc:ButtonGroup>
<hc:ButtonGroup Margin="0,32,0,0">
<RadioButton Content="{ex:Lang Key={x:Static langs:LangKeys.RadioButton}}" IsChecked="True"/>
<RadioButton Content="{ex:Lang Key={x:Static langs:LangKeys.RadioButton}}"/>
<Button Content="{ex:Lang Key={x:Static langs:LangKeys.Button}}"/>
<ToggleButton Content="{ex:Lang Key={x:Static langs:LangKeys.ToggleButton}}"/>
<ToggleButton Content="{ex:Lang Key={x:Static langs:LangKeys.ToggleButton}}" IsChecked="True"/>
</hc:ButtonGroup>
</StackPanel>
<StackPanel Margin="16" Orientation="Horizontal">
<hc:ButtonGroup Orientation="Vertical">
<RadioButton Content="{ex:Lang Key={x:Static langs:LangKeys.RadioButton}}" IsChecked="True"/>
<RadioButton Content="{ex:Lang Key={x:Static langs:LangKeys.RadioButton}}"/>
<RadioButton Content="{ex:Lang Key={x:Static langs:LangKeys.RadioButton}}"/>
<RadioButton Content="{ex:Lang Key={x:Static langs:LangKeys.RadioButton}}"/>
<RadioButton Content="{ex:Lang Key={x:Static langs:LangKeys.RadioButton}}"/>
</hc:ButtonGroup>
<hc:ButtonGroup Margin="32,0,0,0" Orientation="Vertical">
<Button Content="{ex:Lang Key={x:Static langs:LangKeys.Button}}"/>
<Button Content="{ex:Lang Key={x:Static langs:LangKeys.Button}}"/>
<Button Content="{ex:Lang Key={x:Static langs:LangKeys.Button}}"/>
<Button Content="{ex:Lang Key={x:Static langs:LangKeys.Button}}"/>
<Button Content="{ex:Lang Key={x:Static langs:LangKeys.Button}}"/>
</hc:ButtonGroup>
<hc:ButtonGroup Margin="32,0,0,0" Style="{StaticResource ButtonGroupSolid}" Orientation="Vertical">
<ToggleButton Content="{ex:Lang Key={x:Static langs:LangKeys.ToggleButton}}"/>
<ToggleButton Content="{ex:Lang Key={x:Static langs:LangKeys.ToggleButton}}"/>
<ToggleButton Content="{ex:Lang Key={x:Static langs:LangKeys.ToggleButton}}" IsChecked="True"/>
<ToggleButton Content="{ex:Lang Key={x:Static langs:LangKeys.ToggleButton}}"/>
<ToggleButton Content="{ex:Lang Key={x:Static langs:LangKeys.ToggleButton}}"/>
</hc:ButtonGroup>
<hc:ButtonGroup Margin="32,0,0,0" Orientation="Vertical">
<RadioButton Content="{ex:Lang Key={x:Static langs:LangKeys.RadioButton}}" IsChecked="True"/>
<RadioButton Content="{ex:Lang Key={x:Static langs:LangKeys.RadioButton}}"/>
<Button Content="{ex:Lang Key={x:Static langs:LangKeys.Button}}"/>
<ToggleButton Content="{ex:Lang Key={x:Static langs:LangKeys.ToggleButton}}"/>
<ToggleButton Content="{ex:Lang Key={x:Static langs:LangKeys.ToggleButton}}" IsChecked="True"/>
</hc:ButtonGroup>
</StackPanel>
</WrapPanel>
<hc:ScrollViewer IsInertiaEnabled="True">
<hc:UniformSpacingPanel Margin="32" Spacing="32" ChildWrapping="Wrap" VerticalAlignment="Center">
<hc:UniformSpacingPanel Spacing="32" Orientation="Vertical">
<hc:ButtonGroup>
<RadioButton Content="{ex:Lang Key={x:Static langs:LangKeys.RadioButton}}" IsChecked="True"/>
<RadioButton Content="{ex:Lang Key={x:Static langs:LangKeys.RadioButton}}"/>
<RadioButton Content="{ex:Lang Key={x:Static langs:LangKeys.RadioButton}}"/>
<RadioButton Content="{ex:Lang Key={x:Static langs:LangKeys.RadioButton}}"/>
<RadioButton Content="{ex:Lang Key={x:Static langs:LangKeys.RadioButton}}"/>
</hc:ButtonGroup>
<hc:ButtonGroup>
<Button Content="{ex:Lang Key={x:Static langs:LangKeys.Button}}"/>
<Button Content="{ex:Lang Key={x:Static langs:LangKeys.Button}}"/>
<Button Content="{ex:Lang Key={x:Static langs:LangKeys.Button}}"/>
<Button Content="{ex:Lang Key={x:Static langs:LangKeys.Button}}"/>
<Button Content="{ex:Lang Key={x:Static langs:LangKeys.Button}}"/>
</hc:ButtonGroup>
<hc:ButtonGroup Style="{StaticResource ButtonGroupSolid}">
<ToggleButton Content="{ex:Lang Key={x:Static langs:LangKeys.ToggleButton}}"/>
<ToggleButton Content="{ex:Lang Key={x:Static langs:LangKeys.ToggleButton}}"/>
<ToggleButton Content="{ex:Lang Key={x:Static langs:LangKeys.ToggleButton}}" IsChecked="True"/>
<ToggleButton Content="{ex:Lang Key={x:Static langs:LangKeys.ToggleButton}}"/>
<ToggleButton Content="{ex:Lang Key={x:Static langs:LangKeys.ToggleButton}}"/>
</hc:ButtonGroup>
<hc:ButtonGroup>
<RadioButton Content="{ex:Lang Key={x:Static langs:LangKeys.RadioButton}}" IsChecked="True"/>
<RadioButton Content="{ex:Lang Key={x:Static langs:LangKeys.RadioButton}}"/>
<Button Content="{ex:Lang Key={x:Static langs:LangKeys.Button}}"/>
<ToggleButton Content="{ex:Lang Key={x:Static langs:LangKeys.ToggleButton}}"/>
<ToggleButton Content="{ex:Lang Key={x:Static langs:LangKeys.ToggleButton}}" IsChecked="True"/>
</hc:ButtonGroup>
</hc:UniformSpacingPanel>
<hc:UniformSpacingPanel Spacing="32" ChildWrapping="Wrap">
<hc:ButtonGroup Orientation="Vertical">
<RadioButton Content="{ex:Lang Key={x:Static langs:LangKeys.RadioButton}}" IsChecked="True"/>
<RadioButton Content="{ex:Lang Key={x:Static langs:LangKeys.RadioButton}}"/>
<RadioButton Content="{ex:Lang Key={x:Static langs:LangKeys.RadioButton}}"/>
<RadioButton Content="{ex:Lang Key={x:Static langs:LangKeys.RadioButton}}"/>
<RadioButton Content="{ex:Lang Key={x:Static langs:LangKeys.RadioButton}}"/>
</hc:ButtonGroup>
<hc:ButtonGroup Orientation="Vertical">
<Button Content="{ex:Lang Key={x:Static langs:LangKeys.Button}}"/>
<Button Content="{ex:Lang Key={x:Static langs:LangKeys.Button}}"/>
<Button Content="{ex:Lang Key={x:Static langs:LangKeys.Button}}"/>
<Button Content="{ex:Lang Key={x:Static langs:LangKeys.Button}}"/>
<Button Content="{ex:Lang Key={x:Static langs:LangKeys.Button}}"/>
</hc:ButtonGroup>
<hc:ButtonGroup Style="{StaticResource ButtonGroupSolid}" Orientation="Vertical">
<ToggleButton Content="{ex:Lang Key={x:Static langs:LangKeys.ToggleButton}}"/>
<ToggleButton Content="{ex:Lang Key={x:Static langs:LangKeys.ToggleButton}}"/>
<ToggleButton Content="{ex:Lang Key={x:Static langs:LangKeys.ToggleButton}}" IsChecked="True"/>
<ToggleButton Content="{ex:Lang Key={x:Static langs:LangKeys.ToggleButton}}"/>
<ToggleButton Content="{ex:Lang Key={x:Static langs:LangKeys.ToggleButton}}"/>
</hc:ButtonGroup>
<hc:ButtonGroup Orientation="Vertical">
<RadioButton Content="{ex:Lang Key={x:Static langs:LangKeys.RadioButton}}" IsChecked="True"/>
<RadioButton Content="{ex:Lang Key={x:Static langs:LangKeys.RadioButton}}"/>
<Button Content="{ex:Lang Key={x:Static langs:LangKeys.Button}}"/>
<ToggleButton Content="{ex:Lang Key={x:Static langs:LangKeys.ToggleButton}}"/>
<ToggleButton Content="{ex:Lang Key={x:Static langs:LangKeys.ToggleButton}}" IsChecked="True"/>
</hc:ButtonGroup>
</hc:UniformSpacingPanel>
</hc:UniformSpacingPanel>
</hc:ScrollViewer>
</hc:TransitioningContentControl>
</UserControl>
@@ -1,40 +1,39 @@
using System.Windows;
using System.Windows.Media.Imaging;
namespace HandyControlDemo.UserControl
namespace HandyControlDemo.UserControl;
public partial class ButtonGroupDemoCtl
{
public partial class ButtonGroupDemoCtl
public ButtonGroupDemoCtl()
{
public ButtonGroupDemoCtl()
{
InitializeComponent();
}
InitializeComponent();
}
public static readonly DependencyProperty SourceProperty = DependencyProperty.Register(
"Source", typeof(BitmapFrame), typeof(Avatar), new PropertyMetadata(default(BitmapFrame)));
public static readonly DependencyProperty SourceProperty = DependencyProperty.Register(
"Source", typeof(BitmapFrame), typeof(Avatar), new PropertyMetadata(default(BitmapFrame)));
public BitmapFrame Source
{
get => (BitmapFrame) GetValue(SourceProperty);
set => SetValue(SourceProperty, value);
}
public BitmapFrame Source
{
get => (BitmapFrame) GetValue(SourceProperty);
set => SetValue(SourceProperty, value);
}
public static readonly DependencyProperty UserNameProperty = DependencyProperty.Register(
"DisplayName", typeof(string), typeof(Avatar), new PropertyMetadata(default(string)));
public static readonly DependencyProperty UserNameProperty = DependencyProperty.Register(
"DisplayName", typeof(string), typeof(Avatar), new PropertyMetadata(default(string)));
public string DisplayName
{
get => (string) GetValue(UserNameProperty);
set => SetValue(UserNameProperty, value);
}
public string DisplayName
{
get => (string) GetValue(UserNameProperty);
set => SetValue(UserNameProperty, value);
}
public static readonly DependencyProperty LinkProperty = DependencyProperty.Register(
"Link", typeof(string), typeof(Avatar), new PropertyMetadata(default(string)));
public static readonly DependencyProperty LinkProperty = DependencyProperty.Register(
"Link", typeof(string), typeof(Avatar), new PropertyMetadata(default(string)));
public string Link
{
get => (string) GetValue(LinkProperty);
set => SetValue(LinkProperty, value);
}
public string Link
{
get => (string) GetValue(LinkProperty);
set => SetValue(LinkProperty, value);
}
}
@@ -1,10 +1,9 @@
namespace HandyControlDemo.UserControl
namespace HandyControlDemo.UserControl;
public partial class CalendarWithClockDemoCtl
{
public partial class CalendarWithClockDemoCtl
public CalendarWithClockDemoCtl()
{
public CalendarWithClockDemoCtl()
{
InitializeComponent();
}
InitializeComponent();
}
}
@@ -6,7 +6,7 @@
xmlns:hc="https://handyorg.github.io/handycontrol"
xmlns:data="clr-namespace:HandyControlDemo.Data">
<hc:TransitioningContentControl>
<ListBox Margin="32" BorderThickness="0" Style="{StaticResource WrapPanelHorizontalListBox}" ItemsPanel="{StaticResource FluidMoveBehaviorWrapPanelItemsPanelTemplate}" ItemsSource="{Binding DataList}">
<ListBox Margin="32" hc:ScrollViewer.IsInertiaEnabled="True" BorderThickness="0" Style="{StaticResource WrapPanelHorizontalListBox}" ItemsPanel="{StaticResource FluidMoveBehaviorWrapPanelItemsPanelTemplate}" ItemsSource="{Binding DataList}">
<ListBox.ItemTemplate>
<DataTemplate DataType="data:CardModel">
<hc:Card MaxWidth="240" BorderThickness="0" Effect="{StaticResource EffectShadow2}" Margin="8" Footer="{Binding Footer}">
@@ -1,10 +1,9 @@
namespace HandyControlDemo.UserControl
namespace HandyControlDemo.UserControl;
public partial class CardDemoCtl
{
public partial class CardDemoCtl
public CardDemoCtl()
{
public CardDemoCtl()
{
InitializeComponent();
}
InitializeComponent();
}
}
@@ -4,7 +4,7 @@
Background="{DynamicResource RegionBrush}"
xmlns:hc="https://handyorg.github.io/handycontrol">
<hc:TransitioningContentControl>
<hc:Carousel Margin="32" IsCenter="True" AutoRun="True" Width="600" Height="330" VerticalAlignment="Center">
<hc:Carousel Margin="32" IsCenter="True" AutoRun="True" MaxWidth="600" Height="330" VerticalAlignment="Center">
<Image Width="600" Stretch="UniformToFill" Source="/HandyControlDemo;component/Resources/Img/1.jpg"/>
<Image Width="300" Stretch="UniformToFill" Source="/HandyControlDemo;component/Resources/Img/2.jpg"/>
<hc:SimplePanel Width="600">
@@ -1,11 +1,10 @@
namespace HandyControlDemo.UserControl
namespace HandyControlDemo.UserControl;
public partial class CarouselDemoCtl
{
public partial class CarouselDemoCtl
public CarouselDemoCtl()
{
public CarouselDemoCtl()
{
InitializeComponent();
}
InitializeComponent();
}
}
@@ -5,17 +5,19 @@
xmlns:hc="https://handyorg.github.io/handycontrol"
Background="{DynamicResource RegionBrush}">
<hc:TransitioningContentControl>
<StackPanel Orientation="Horizontal" Margin="32">
<userControl:ChatBox>
<userControl:ChatBox.Background>
<ImageBrush ImageSource="/HandyControlDemo;component/Resources/Img/Chat/chat_back1.jpg" Stretch="Uniform"/>
</userControl:ChatBox.Background>
</userControl:ChatBox>
<userControl:ChatBox Margin="32,0,0,0">
<userControl:ChatBox.Background>
<ImageBrush ImageSource="/HandyControlDemo;component/Resources/Img/Chat/chat_back2.jpg" Stretch="Uniform"/>
</userControl:ChatBox.Background>
</userControl:ChatBox>
</StackPanel>
<hc:ScrollViewer IsInertiaEnabled="True">
<hc:UniformSpacingPanel Spacing="32" ChildWrapping="Wrap" Margin="32">
<userControl:ChatBox>
<userControl:ChatBox.Background>
<ImageBrush ImageSource="/HandyControlDemo;component/Resources/Img/Chat/chat_back1.jpg" Stretch="Uniform"/>
</userControl:ChatBox.Background>
</userControl:ChatBox>
<userControl:ChatBox>
<userControl:ChatBox.Background>
<ImageBrush ImageSource="/HandyControlDemo;component/Resources/Img/Chat/chat_back2.jpg" Stretch="Uniform"/>
</userControl:ChatBox.Background>
</userControl:ChatBox>
</hc:UniformSpacingPanel>
</hc:ScrollViewer>
</hc:TransitioningContentControl>
</UserControl>
@@ -1,10 +1,9 @@
namespace HandyControlDemo.UserControl
namespace HandyControlDemo.UserControl;
public partial class ChatBubbleDemoCtl
{
public partial class ChatBubbleDemoCtl
public ChatBubbleDemoCtl()
{
public ChatBubbleDemoCtl()
{
InitializeComponent();
}
InitializeComponent();
}
}
@@ -1,13 +1,13 @@
<UserControl x:Class="HandyControlDemo.UserControl.CheckComboBoxDemoCtl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
DataContext="{Binding ComboBoxDemo,Source={StaticResource Locator}}"
DataContext="{Binding InputElementDemo,Source={StaticResource Locator}}"
xmlns:langs="clr-namespace:HandyControlDemo.Properties.Langs"
xmlns:ex="clr-namespace:HandyControlDemo.Tools.Extension"
xmlns:hc="https://handyorg.github.io/handycontrol"
Background="{DynamicResource RegionBrush}">
<hc:TransitioningContentControl>
<ScrollViewer>
<hc:ScrollViewer IsInertiaEnabled="True">
<hc:UniformSpacingPanel Spacing="32" Margin="32" ChildWrapping="Wrap">
<StackPanel>
<hc:CheckComboBox ShowClearButton="True" MaxWidth="380" ItemsSource="{Binding DataList}" ShowSelectAllButton="True"/>
@@ -50,6 +50,6 @@
<hc:CheckComboBox MaxWidth="380" ItemsSource="{Binding DataList}" ShowClearButton="True" Width="380" hc:InfoElement.TitleWidth="140" hc:InfoElement.TitlePlacement="Left" hc:InfoElement.Placeholder="{ex:Lang Key={x:Static langs:LangKeys.PlsEnterContent}}" hc:InfoElement.Title="{ex:Lang Key={x:Static langs:LangKeys.TitleDemoStr3}}" Style="{StaticResource CheckComboBoxPlus.Small}" hc:InfoElement.Necessary="True" Margin="0,16,0,0"/>
</StackPanel>
</hc:UniformSpacingPanel>
</ScrollViewer>
</hc:ScrollViewer>
</hc:TransitioningContentControl>
</UserControl>
@@ -1,10 +1,9 @@
namespace HandyControlDemo.UserControl
namespace HandyControlDemo.UserControl;
public partial class CheckComboBoxDemoCtl
{
public partial class CheckComboBoxDemoCtl
public CheckComboBoxDemoCtl()
{
public CheckComboBoxDemoCtl()
{
InitializeComponent();
}
InitializeComponent();
}
}
@@ -1,10 +1,9 @@
namespace HandyControlDemo.UserControl
namespace HandyControlDemo.UserControl;
public partial class CirclePanelDemoCtl
{
public partial class CirclePanelDemoCtl
public CirclePanelDemoCtl()
{
public CirclePanelDemoCtl()
{
InitializeComponent();
}
InitializeComponent();
}
}
@@ -4,9 +4,11 @@
xmlns:hc="https://handyorg.github.io/handycontrol"
Background="{DynamicResource RegionBrush}">
<hc:TransitioningContentControl>
<StackPanel Orientation="Horizontal" Margin="32">
<hc:Clock/>
<hc:ListClock Margin="16,0,0,0"/>
</StackPanel>
<hc:ScrollViewer IsInertiaEnabled="True">
<hc:UniformSpacingPanel Spacing="16" ChildWrapping="Wrap" Margin="32">
<hc:Clock/>
<hc:ListClock/>
</hc:UniformSpacingPanel>
</hc:ScrollViewer>
</hc:TransitioningContentControl>
</UserControl>
@@ -1,11 +1,10 @@
namespace HandyControlDemo.UserControl
namespace HandyControlDemo.UserControl;
public partial class ClockDemoCtl
{
public partial class ClockDemoCtl
public ClockDemoCtl()
{
public ClockDemoCtl()
{
InitializeComponent();
}
InitializeComponent();
}
}
@@ -1,11 +1,10 @@
namespace HandyControlDemo.UserControl
namespace HandyControlDemo.UserControl;
public partial class ColorPickerDemoCtl
{
public partial class ColorPickerDemoCtl
public ColorPickerDemoCtl()
{
public ColorPickerDemoCtl()
{
InitializeComponent();
}
InitializeComponent();
}
}
@@ -1,13 +1,13 @@
<UserControl x:Class="HandyControlDemo.UserControl.ComboBoxDemoCtl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
DataContext="{Binding ComboBoxDemo,Source={StaticResource Locator}}"
DataContext="{Binding InputElementDemo,Source={StaticResource Locator}}"
xmlns:hc="https://handyorg.github.io/handycontrol"
xmlns:langs="clr-namespace:HandyControlDemo.Properties.Langs"
xmlns:ex="clr-namespace:HandyControlDemo.Tools.Extension"
Background="{DynamicResource RegionBrush}">
<hc:TransitioningContentControl>
<ScrollViewer>
<hc:ScrollViewer IsInertiaEnabled="True">
<hc:UniformSpacingPanel Spacing="32" Margin="32" ChildWrapping="Wrap">
<StackPanel>
<hc:ComboBox ShowClearButton="True" ItemsSource="{Binding DataList}" SelectedIndex="0"/>
@@ -40,6 +40,6 @@
<hc:ComboBox AutoComplete="True" ShowClearButton="True" ItemsSource="{Binding DataList}" IsEditable="True" Width="380" hc:InfoElement.TitleWidth="140" hc:InfoElement.Placeholder="{ex:Lang Key={x:Static langs:LangKeys.PlsEnterContent}}" hc:InfoElement.TitlePlacement="Left" hc:InfoElement.Title="{ex:Lang Key={x:Static langs:LangKeys.TitleDemoStr3}}" hc:InfoElement.Necessary="True" Margin="0,32,0,0" Style="{StaticResource ComboBoxPlus.Small}"/>
</StackPanel>
</hc:UniformSpacingPanel>
</ScrollViewer>
</hc:ScrollViewer>
</hc:TransitioningContentControl>
</UserControl>
@@ -1,10 +1,9 @@
namespace HandyControlDemo.UserControl
namespace HandyControlDemo.UserControl;
public partial class ComboBoxDemoCtl
{
public partial class ComboBoxDemoCtl
public ComboBoxDemoCtl()
{
public ComboBoxDemoCtl()
{
InitializeComponent();
}
InitializeComponent();
}
}
@@ -4,7 +4,7 @@
xmlns:hc="https://handyorg.github.io/handycontrol"
Background="{DynamicResource RegionBrush}">
<hc:TransitioningContentControl>
<hc:ScrollViewer VerticalAlignment="Center">
<hc:ScrollViewer IsInertiaEnabled="True">
<WrapPanel ItemHeight="384" ItemWidth="632">
<hc:CompareSlider Value="5" Width="600" Height="352">
<hc:CompareSlider.TargetContent>
@@ -1,11 +1,10 @@
namespace HandyControlDemo.UserControl
namespace HandyControlDemo.UserControl;
public partial class CompareSliderDemoCtl
{
public partial class CompareSliderDemoCtl
public CompareSliderDemoCtl()
{
public CompareSliderDemoCtl()
{
InitializeComponent();
}
InitializeComponent();
}
}
@@ -4,6 +4,8 @@
xmlns:hc="https://handyorg.github.io/handycontrol"
Background="{DynamicResource RegionBrush}">
<hc:TransitioningContentControl>
<hc:CoverFlow x:Name="CoverFlowMain" Margin="32" Width="500" Height="300"/>
<Viewbox MaxWidth="500">
<hc:CoverFlow x:Name="CoverFlowMain" Margin="32" Width="500" Height="300"/>
</Viewbox>
</hc:TransitioningContentControl>
</UserControl>
@@ -1,28 +1,27 @@
using System;
namespace HandyControlDemo.UserControl
namespace HandyControlDemo.UserControl;
public partial class CoverFlowDemoCtl
{
public partial class CoverFlowDemoCtl
public CoverFlowDemoCtl()
{
public CoverFlowDemoCtl()
InitializeComponent();
CoverFlowMain.AddRange(new[]
{
InitializeComponent();
new Uri(@"pack://application:,,,/Resources/Img/Album/1.jpg"),
new Uri(@"pack://application:,,,/Resources/Img/Album/2.jpg"),
new Uri(@"pack://application:,,,/Resources/Img/Album/3.jpg"),
new Uri(@"pack://application:,,,/Resources/Img/Album/4.jpg"),
new Uri(@"pack://application:,,,/Resources/Img/Album/5.jpg"),
new Uri(@"pack://application:,,,/Resources/Img/Album/6.jpg"),
new Uri(@"pack://application:,,,/Resources/Img/Album/7.jpg"),
new Uri(@"pack://application:,,,/Resources/Img/Album/8.jpg"),
new Uri(@"pack://application:,,,/Resources/Img/Album/9.jpg"),
new Uri(@"pack://application:,,,/Resources/Img/Album/10.jpg")
});
CoverFlowMain.AddRange(new[]
{
new Uri(@"pack://application:,,,/Resources/Img/Album/1.jpg"),
new Uri(@"pack://application:,,,/Resources/Img/Album/2.jpg"),
new Uri(@"pack://application:,,,/Resources/Img/Album/3.jpg"),
new Uri(@"pack://application:,,,/Resources/Img/Album/4.jpg"),
new Uri(@"pack://application:,,,/Resources/Img/Album/5.jpg"),
new Uri(@"pack://application:,,,/Resources/Img/Album/6.jpg"),
new Uri(@"pack://application:,,,/Resources/Img/Album/7.jpg"),
new Uri(@"pack://application:,,,/Resources/Img/Album/8.jpg"),
new Uri(@"pack://application:,,,/Resources/Img/Album/9.jpg"),
new Uri(@"pack://application:,,,/Resources/Img/Album/10.jpg")
});
CoverFlowMain.PageIndex = 2;
}
CoverFlowMain.PageIndex = 2;
}
}
@@ -7,19 +7,21 @@
DataContext="{Binding CoverView,Source={StaticResource Locator}}"
Background="{DynamicResource RegionBrush}">
<hc:TransitioningContentControl>
<hc:CoverView Margin="27" Width="880" Height="432" ItemWidth="160" ItemHeight="160" ItemsSource="{Binding DataList}">
<hc:CoverView.ItemHeaderTemplate>
<DataTemplate>
<Image Source="{Binding ImgPath}"/>
</DataTemplate>
</hc:CoverView.ItemHeaderTemplate>
<hc:CoverView.ItemTemplate>
<DataTemplate>
<Border Margin="10" Height="300" Background="{Binding BackgroundToken,Converter={StaticResource String2BrushConverter}}">
<TextBlock Text="{ex:Lang Key={x:Static langs:LangKeys.ContentDemoStr}}" VerticalAlignment="Center" HorizontalAlignment="Center" Foreground="White"/>
</Border>
</DataTemplate>
</hc:CoverView.ItemTemplate>
</hc:CoverView>
<hc:ScrollViewer IsInertiaEnabled="True">
<hc:CoverView Margin="27" MaxWidth="880" ItemWidth="160" ItemHeight="160" ItemsSource="{Binding DataList}">
<hc:CoverView.ItemHeaderTemplate>
<DataTemplate>
<Image Source="{Binding ImgPath}"/>
</DataTemplate>
</hc:CoverView.ItemHeaderTemplate>
<hc:CoverView.ItemTemplate>
<DataTemplate>
<Border Margin="10" Height="300" Background="{Binding BackgroundToken,Converter={StaticResource String2BrushConverter}}">
<TextBlock Text="{ex:Lang Key={x:Static langs:LangKeys.ContentDemoStr}}" VerticalAlignment="Center" HorizontalAlignment="Center" Foreground="White"/>
</Border>
</DataTemplate>
</hc:CoverView.ItemTemplate>
</hc:CoverView>
</hc:ScrollViewer>
</hc:TransitioningContentControl>
</UserControl>
@@ -1,10 +1,9 @@
namespace HandyControlDemo.UserControl
namespace HandyControlDemo.UserControl;
public partial class CoverViewDemoCtl
{
public partial class CoverViewDemoCtl
public CoverViewDemoCtl()
{
public CoverViewDemoCtl()
{
InitializeComponent();
}
InitializeComponent();
}
}
@@ -7,16 +7,29 @@
xmlns:ex="clr-namespace:HandyControlDemo.Tools.Extension"
Background="{DynamicResource RegionBrush}">
<hc:TransitioningContentControl>
<StackPanel Margin="32">
<hc:DatePicker ShowClearButton="True" SelectedDate="{x:Static system:DateTime.Now}"/>
<hc:DatePicker Margin="0,16,0,0" IsEnabled="False" SelectedDate="{x:Static system:DateTime.Now}"/>
<hc:ScrollViewer IsInertiaEnabled="True">
<hc:UniformSpacingPanel Spacing="32" Margin="32" ChildWrapping="Wrap">
<StackPanel>
<hc:DatePicker ShowClearButton="True" SelectedDate="{x:Static system:DateTime.Now}"/>
<hc:DatePicker Margin="0,16,0,0" IsEnabled="False" SelectedDate="{x:Static system:DateTime.Now}"/>
<hc:DatePicker ShowClearButton="True" SelectedDate="{x:Static system:DateTime.Now}" hc:InfoElement.Title="{ex:Lang Key={x:Static langs:LangKeys.TitleDemoStr1}}" Margin="0,32,0,0"/>
<hc:DatePicker SelectedDate="{x:Static system:DateTime.Now}" hc:InfoElement.Placeholder="{ex:Lang Key={x:Static langs:LangKeys.PlsEnterContent}}" hc:InfoElement.Title="{ex:Lang Key={x:Static langs:LangKeys.TitleDemoStr2}}" hc:InfoElement.Necessary="True" Margin="0,16,0,0"/>
<hc:DatePicker ShowClearButton="True" SelectedDate="{x:Static system:DateTime.Now}" hc:InfoElement.Title="{ex:Lang Key={x:Static langs:LangKeys.TitleDemoStr1}}" Margin="0,32,0,0"/>
<hc:DatePicker SelectedDate="{x:Static system:DateTime.Now}" hc:InfoElement.Placeholder="{ex:Lang Key={x:Static langs:LangKeys.PlsEnterContent}}" hc:InfoElement.Title="{ex:Lang Key={x:Static langs:LangKeys.TitleDemoStr2}}" hc:InfoElement.Necessary="True" Margin="0,16,0,0"/>
<hc:DatePicker ShowClearButton="True" SelectedDate="{x:Static system:DateTime.Now}" Width="380" hc:InfoElement.TitleWidth="140" hc:InfoElement.TitlePlacement="Left" hc:InfoElement.Title="{ex:Lang Key={x:Static langs:LangKeys.TitleDemoStr3}}" Margin="0,32,0,0"/>
<hc:DatePicker Width="380" hc:InfoElement.TitleWidth="140" hc:InfoElement.TitlePlacement="Left" hc:InfoElement.Placeholder="{ex:Lang Key={x:Static langs:LangKeys.PlsEnterContent}}" hc:InfoElement.Title="{ex:Lang Key={x:Static langs:LangKeys.TitleDemoStr3}}" hc:InfoElement.Necessary="True" Margin="0,16,0,0"/>
<hc:DatePicker ShowClearButton="True" SelectedDate="{x:Static system:DateTime.Now}" Width="380" hc:InfoElement.TitleWidth="140" hc:InfoElement.TitlePlacement="Left" hc:InfoElement.Title="{ex:Lang Key={x:Static langs:LangKeys.TitleDemoStr3}}" Margin="0,32,0,0"/>
<hc:DatePicker Width="380" hc:InfoElement.TitleWidth="140" hc:InfoElement.TitlePlacement="Left" hc:InfoElement.Placeholder="{ex:Lang Key={x:Static langs:LangKeys.PlsEnterContent}}" hc:InfoElement.Title="{ex:Lang Key={x:Static langs:LangKeys.TitleDemoStr3}}" hc:InfoElement.Necessary="True" Margin="0,16,0,0"/>
</StackPanel>
<StackPanel>
<hc:DatePicker ShowClearButton="True" SelectedDate="{x:Static system:DateTime.Now}" Style="{StaticResource DatePickerPlus.Small}"/>
<hc:DatePicker Margin="0,16,0,0" IsEnabled="False" SelectedDate="{x:Static system:DateTime.Now}" Style="{StaticResource DatePickerPlus.Small}"/>
</StackPanel>
<hc:DatePicker ShowClearButton="True" SelectedDate="{x:Static system:DateTime.Now}" hc:InfoElement.Title="{ex:Lang Key={x:Static langs:LangKeys.TitleDemoStr1}}" Margin="0,32,0,0" Style="{StaticResource DatePickerPlus.Small}"/>
<hc:DatePicker SelectedDate="{x:Static system:DateTime.Now}" hc:InfoElement.Placeholder="{ex:Lang Key={x:Static langs:LangKeys.PlsEnterContent}}" hc:InfoElement.Title="{ex:Lang Key={x:Static langs:LangKeys.TitleDemoStr2}}" hc:InfoElement.Necessary="True" Margin="0,16,0,0" Style="{StaticResource DatePickerPlus.Small}"/>
<hc:DatePicker ShowClearButton="True" SelectedDate="{x:Static system:DateTime.Now}" Width="380" hc:InfoElement.TitleWidth="140" hc:InfoElement.TitlePlacement="Left" hc:InfoElement.Title="{ex:Lang Key={x:Static langs:LangKeys.TitleDemoStr3}}" Margin="0,32,0,0" Style="{StaticResource DatePickerPlus.Small}"/>
<hc:DatePicker Width="380" hc:InfoElement.TitleWidth="140" hc:InfoElement.TitlePlacement="Left" hc:InfoElement.Placeholder="{ex:Lang Key={x:Static langs:LangKeys.PlsEnterContent}}" hc:InfoElement.Title="{ex:Lang Key={x:Static langs:LangKeys.TitleDemoStr3}}" hc:InfoElement.Necessary="True" Margin="0,16,0,0" Style="{StaticResource DatePickerPlus.Small}"/>
</StackPanel>
</hc:UniformSpacingPanel>
</hc:ScrollViewer>
</hc:TransitioningContentControl>
</UserControl>
@@ -1,10 +1,9 @@
namespace HandyControlDemo.UserControl
namespace HandyControlDemo.UserControl;
public partial class DatePickerDemoCtl
{
public partial class DatePickerDemoCtl
public DatePickerDemoCtl()
{
public DatePickerDemoCtl()
{
InitializeComponent();
}
InitializeComponent();
}
}
@@ -6,27 +6,49 @@
xmlns:ex="clr-namespace:HandyControlDemo.Tools.Extension"
Background="{DynamicResource RegionBrush}">
<hc:TransitioningContentControl>
<StackPanel Margin="32" Orientation="Horizontal">
<StackPanel>
<hc:DateTimePicker ShowClearButton="True"/>
<hc:DateTimePicker Margin="0,16,0,0" IsEnabled="False"/>
<hc:ScrollViewer IsInertiaEnabled="True">
<hc:UniformSpacingPanel Spacing="32" Margin="32" ChildWrapping="Wrap">
<StackPanel>
<hc:DateTimePicker ShowClearButton="True"/>
<hc:DateTimePicker Margin="0,16,0,0" IsEnabled="False"/>
<hc:DateTimePicker ShowClearButton="True" Style="{StaticResource DateTimePickerExtend}" hc:InfoElement.Title="{ex:Lang Key={x:Static langs:LangKeys.TitleDemoStr1}}" Margin="0,32,0,0"/>
<hc:DateTimePicker hc:InfoElement.Placeholder="{ex:Lang Key={x:Static langs:LangKeys.PlsEnterContent}}" hc:InfoElement.Title="{ex:Lang Key={x:Static langs:LangKeys.TitleDemoStr2}}" Style="{StaticResource DateTimePickerExtend}" hc:InfoElement.Necessary="True" Margin="0,16,0,0"/>
<hc:DateTimePicker ShowClearButton="True" Style="{StaticResource DateTimePickerExtend}" hc:InfoElement.Title="{ex:Lang Key={x:Static langs:LangKeys.TitleDemoStr1}}" Margin="0,32,0,0"/>
<hc:DateTimePicker hc:InfoElement.Placeholder="{ex:Lang Key={x:Static langs:LangKeys.PlsEnterContent}}" hc:InfoElement.Title="{ex:Lang Key={x:Static langs:LangKeys.TitleDemoStr2}}" Style="{StaticResource DateTimePickerExtend}" hc:InfoElement.Necessary="True" Margin="0,16,0,0"/>
<hc:DateTimePicker ShowClearButton="True" Width="380" hc:InfoElement.TitleWidth="140" hc:InfoElement.TitlePlacement="Left" Style="{StaticResource DateTimePickerExtend}" hc:InfoElement.Title="{ex:Lang Key={x:Static langs:LangKeys.TitleDemoStr3}}" Margin="0,32,0,0"/>
<hc:DateTimePicker Width="380" hc:InfoElement.TitleWidth="140" hc:InfoElement.TitlePlacement="Left" hc:InfoElement.Placeholder="{ex:Lang Key={x:Static langs:LangKeys.PlsEnterContent}}" hc:InfoElement.Title="{ex:Lang Key={x:Static langs:LangKeys.TitleDemoStr3}}" Style="{StaticResource DateTimePickerExtend}" hc:InfoElement.Necessary="True" Margin="0,16,0,0"/>
</StackPanel>
<StackPanel Margin="32,0,0,0">
<hc:DateTimePicker ShowClearButton="True" Style="{StaticResource DateTimePickerPlus}"/>
<hc:DateTimePicker Margin="0,16,0,0" IsEnabled="False" Style="{StaticResource DateTimePickerPlus}"/>
<hc:DateTimePicker ShowClearButton="True" Width="380" hc:InfoElement.TitleWidth="140" hc:InfoElement.TitlePlacement="Left" Style="{StaticResource DateTimePickerExtend}" hc:InfoElement.Title="{ex:Lang Key={x:Static langs:LangKeys.TitleDemoStr3}}" Margin="0,32,0,0"/>
<hc:DateTimePicker Width="380" hc:InfoElement.TitleWidth="140" hc:InfoElement.TitlePlacement="Left" hc:InfoElement.Placeholder="{ex:Lang Key={x:Static langs:LangKeys.PlsEnterContent}}" hc:InfoElement.Title="{ex:Lang Key={x:Static langs:LangKeys.TitleDemoStr3}}" Style="{StaticResource DateTimePickerExtend}" hc:InfoElement.Necessary="True" Margin="0,16,0,0"/>
</StackPanel>
<StackPanel>
<hc:DateTimePicker ShowClearButton="True" Style="{StaticResource DateTimePickerPlus}"/>
<hc:DateTimePicker Margin="0,16,0,0" IsEnabled="False" Style="{StaticResource DateTimePickerPlus}"/>
<hc:DateTimePicker ShowClearButton="True" Style="{StaticResource DateTimePickerPlus}" hc:InfoElement.Title="{ex:Lang Key={x:Static langs:LangKeys.TitleDemoStr1}}" Margin="0,32,0,0"/>
<hc:DateTimePicker hc:InfoElement.Placeholder="{ex:Lang Key={x:Static langs:LangKeys.PlsEnterContent}}" hc:InfoElement.Title="{ex:Lang Key={x:Static langs:LangKeys.TitleDemoStr2}}" Style="{StaticResource DateTimePickerPlus}" hc:InfoElement.Necessary="True" Margin="0,16,0,0"/>
<hc:DateTimePicker ShowClearButton="True" Style="{StaticResource DateTimePickerPlus}" hc:InfoElement.Title="{ex:Lang Key={x:Static langs:LangKeys.TitleDemoStr1}}" Margin="0,32,0,0"/>
<hc:DateTimePicker hc:InfoElement.Placeholder="{ex:Lang Key={x:Static langs:LangKeys.PlsEnterContent}}" hc:InfoElement.Title="{ex:Lang Key={x:Static langs:LangKeys.TitleDemoStr2}}" Style="{StaticResource DateTimePickerPlus}" hc:InfoElement.Necessary="True" Margin="0,16,0,0"/>
<hc:DateTimePicker ShowClearButton="True" Width="380" hc:InfoElement.TitleWidth="140" hc:InfoElement.TitlePlacement="Left" Style="{StaticResource DateTimePickerPlus}" hc:InfoElement.Title="{ex:Lang Key={x:Static langs:LangKeys.TitleDemoStr3}}" Margin="0,32,0,0"/>
<hc:DateTimePicker Width="380" hc:InfoElement.TitleWidth="140" hc:InfoElement.TitlePlacement="Left" hc:InfoElement.Placeholder="{ex:Lang Key={x:Static langs:LangKeys.PlsEnterContent}}" hc:InfoElement.Title="{ex:Lang Key={x:Static langs:LangKeys.TitleDemoStr3}}" Style="{StaticResource DateTimePickerPlus}" hc:InfoElement.Necessary="True" Margin="0,16,0,0"/>
</StackPanel>
</StackPanel>
<hc:DateTimePicker ShowClearButton="True" Width="380" hc:InfoElement.TitleWidth="140" hc:InfoElement.TitlePlacement="Left" Style="{StaticResource DateTimePickerPlus}" hc:InfoElement.Title="{ex:Lang Key={x:Static langs:LangKeys.TitleDemoStr3}}" Margin="0,32,0,0"/>
<hc:DateTimePicker Width="380" hc:InfoElement.TitleWidth="140" hc:InfoElement.TitlePlacement="Left" hc:InfoElement.Placeholder="{ex:Lang Key={x:Static langs:LangKeys.PlsEnterContent}}" hc:InfoElement.Title="{ex:Lang Key={x:Static langs:LangKeys.TitleDemoStr3}}" Style="{StaticResource DateTimePickerPlus}" hc:InfoElement.Necessary="True" Margin="0,16,0,0"/>
</StackPanel>
<StackPanel>
<hc:DateTimePicker ShowClearButton="True" Style="{StaticResource DateTimePicker.Small}"/>
<hc:DateTimePicker Margin="0,16,0,0" IsEnabled="False" Style="{StaticResource DateTimePicker.Small}"/>
<hc:DateTimePicker ShowClearButton="True" Style="{StaticResource DateTimePickerExtend.Small}" hc:InfoElement.Title="{ex:Lang Key={x:Static langs:LangKeys.TitleDemoStr1}}" Margin="0,32,0,0"/>
<hc:DateTimePicker hc:InfoElement.Placeholder="{ex:Lang Key={x:Static langs:LangKeys.PlsEnterContent}}" hc:InfoElement.Title="{ex:Lang Key={x:Static langs:LangKeys.TitleDemoStr2}}" Style="{StaticResource DateTimePickerExtend.Small}" hc:InfoElement.Necessary="True" Margin="0,16,0,0"/>
<hc:DateTimePicker ShowClearButton="True" Width="380" hc:InfoElement.TitleWidth="140" hc:InfoElement.TitlePlacement="Left" Style="{StaticResource DateTimePickerExtend.Small}" hc:InfoElement.Title="{ex:Lang Key={x:Static langs:LangKeys.TitleDemoStr3}}" Margin="0,32,0,0"/>
<hc:DateTimePicker Width="380" hc:InfoElement.TitleWidth="140" hc:InfoElement.TitlePlacement="Left" hc:InfoElement.Placeholder="{ex:Lang Key={x:Static langs:LangKeys.PlsEnterContent}}" hc:InfoElement.Title="{ex:Lang Key={x:Static langs:LangKeys.TitleDemoStr3}}" Style="{StaticResource DateTimePickerExtend.Small}" hc:InfoElement.Necessary="True" Margin="0,16,0,0"/>
</StackPanel>
<StackPanel>
<hc:DateTimePicker ShowClearButton="True" Style="{StaticResource DateTimePickerPlus.Small}"/>
<hc:DateTimePicker Margin="0,16,0,0" IsEnabled="False" Style="{StaticResource DateTimePickerPlus.Small}"/>
<hc:DateTimePicker ShowClearButton="True" Style="{StaticResource DateTimePickerPlus.Small}" hc:InfoElement.Title="{ex:Lang Key={x:Static langs:LangKeys.TitleDemoStr1}}" Margin="0,32,0,0"/>
<hc:DateTimePicker hc:InfoElement.Placeholder="{ex:Lang Key={x:Static langs:LangKeys.PlsEnterContent}}" hc:InfoElement.Title="{ex:Lang Key={x:Static langs:LangKeys.TitleDemoStr2}}" Style="{StaticResource DateTimePickerPlus.Small}" hc:InfoElement.Necessary="True" Margin="0,16,0,0"/>
<hc:DateTimePicker ShowClearButton="True" Width="380" hc:InfoElement.TitleWidth="140" hc:InfoElement.TitlePlacement="Left" Style="{StaticResource DateTimePickerPlus.Small}" hc:InfoElement.Title="{ex:Lang Key={x:Static langs:LangKeys.TitleDemoStr3}}" Margin="0,32,0,0"/>
<hc:DateTimePicker Width="380" hc:InfoElement.TitleWidth="140" hc:InfoElement.TitlePlacement="Left" hc:InfoElement.Placeholder="{ex:Lang Key={x:Static langs:LangKeys.PlsEnterContent}}" hc:InfoElement.Title="{ex:Lang Key={x:Static langs:LangKeys.TitleDemoStr3}}" Style="{StaticResource DateTimePickerPlus.Small}" hc:InfoElement.Necessary="True" Margin="0,16,0,0"/>
</StackPanel>
</hc:UniformSpacingPanel>
</hc:ScrollViewer>
</hc:TransitioningContentControl>
</UserControl>
@@ -1,10 +1,9 @@
namespace HandyControlDemo.UserControl
namespace HandyControlDemo.UserControl;
public partial class DateTimePickerDemoCtl
{
public partial class DateTimePickerDemoCtl
public DateTimePickerDemoCtl()
{
public DateTimePickerDemoCtl()
{
InitializeComponent();
}
InitializeComponent();
}
}
@@ -1,10 +1,9 @@
namespace HandyControlDemo.UserControl
namespace HandyControlDemo.UserControl;
public partial class DialogDemoCtl
{
public partial class DialogDemoCtl
public DialogDemoCtl()
{
public DialogDemoCtl()
{
InitializeComponent();
}
InitializeComponent();
}
}
@@ -6,39 +6,41 @@
xmlns:langs="clr-namespace:HandyControlDemo.Properties.Langs"
xmlns:ex="clr-namespace:HandyControlDemo.Tools.Extension">
<hc:TransitioningContentControl>
<WrapPanel Margin="16">
<StackPanel Margin="16" Width="300">
<hc:Divider/>
<hc:Divider Content="{ex:Lang Key={x:Static langs:LangKeys.Title}}"/>
<hc:Divider Content="{ex:Lang Key={x:Static langs:LangKeys.Title}}" Padding="10,0"/>
<hc:Divider LineStrokeThickness="2" LineStroke="{DynamicResource DarkPrimaryBrush}"/>
<hc:Divider LineStrokeDashArray="2,2"/>
</StackPanel>
<StackPanel Margin="16" Width="300">
<hc:Divider Content="{ex:Lang Key={x:Static langs:LangKeys.Title}}" HorizontalContentAlignment="Left"/>
<hc:Divider Content="{ex:Lang Key={x:Static langs:LangKeys.Title}}" Padding="10,0" HorizontalContentAlignment="Right"/>
<StackPanel Orientation="Horizontal">
<Button Content="{ex:Lang Key={x:Static langs:LangKeys.Button}}"/>
<hc:Divider Orientation="Vertical" MaxHeight="16"/>
<Button Content="{ex:Lang Key={x:Static langs:LangKeys.Button}}"/>
<hc:Divider Orientation="Vertical" MaxHeight="16"/>
<Button Content="{ex:Lang Key={x:Static langs:LangKeys.Button}}"/>
<hc:ScrollViewer IsInertiaEnabled="True">
<hc:UniformSpacingPanel Margin="32" Spacing="32" ChildWrapping="Wrap">
<StackPanel Width="300">
<hc:Divider/>
<hc:Divider Content="{ex:Lang Key={x:Static langs:LangKeys.Title}}"/>
<hc:Divider Content="{ex:Lang Key={x:Static langs:LangKeys.Title}}" Padding="10,0"/>
<hc:Divider LineStrokeThickness="2" LineStroke="{DynamicResource DarkPrimaryBrush}"/>
<hc:Divider LineStrokeDashArray="2,2"/>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="0,16,0,0">
<Button Content="{ex:Lang Key={x:Static langs:LangKeys.Button}}"/>
<hc:Divider LineStrokeThickness="2" Orientation="Vertical" MaxHeight="16"/>
<Button Content="{ex:Lang Key={x:Static langs:LangKeys.Button}}"/>
<hc:Divider LineStrokeThickness="2" Orientation="Vertical" MaxHeight="16"/>
<Button Content="{ex:Lang Key={x:Static langs:LangKeys.Button}}"/>
<StackPanel Width="300">
<hc:Divider Content="{ex:Lang Key={x:Static langs:LangKeys.Title}}" HorizontalContentAlignment="Left"/>
<hc:Divider Content="{ex:Lang Key={x:Static langs:LangKeys.Title}}" Padding="10,0" HorizontalContentAlignment="Right"/>
<StackPanel Orientation="Horizontal">
<Button Content="{ex:Lang Key={x:Static langs:LangKeys.Button}}"/>
<hc:Divider Orientation="Vertical" MaxHeight="16"/>
<Button Content="{ex:Lang Key={x:Static langs:LangKeys.Button}}"/>
<hc:Divider Orientation="Vertical" MaxHeight="16"/>
<Button Content="{ex:Lang Key={x:Static langs:LangKeys.Button}}"/>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="0,16,0,0">
<Button Content="{ex:Lang Key={x:Static langs:LangKeys.Button}}"/>
<hc:Divider LineStrokeThickness="2" Orientation="Vertical" MaxHeight="16"/>
<Button Content="{ex:Lang Key={x:Static langs:LangKeys.Button}}"/>
<hc:Divider LineStrokeThickness="2" Orientation="Vertical" MaxHeight="16"/>
<Button Content="{ex:Lang Key={x:Static langs:LangKeys.Button}}"/>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="0,16,0,0">
<Button Content="{ex:Lang Key={x:Static langs:LangKeys.Button}}"/>
<hc:Divider LineStrokeThickness="2" LineStroke="{DynamicResource DarkPrimaryBrush}" Orientation="Vertical" MaxHeight="16"/>
<Button Content="{ex:Lang Key={x:Static langs:LangKeys.Button}}"/>
<hc:Divider LineStrokeThickness="2" LineStroke="{DynamicResource DarkPrimaryBrush}" Orientation="Vertical" MaxHeight="16"/>
<Button Content="{ex:Lang Key={x:Static langs:LangKeys.Button}}"/>
</StackPanel>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="0,16,0,0">
<Button Content="{ex:Lang Key={x:Static langs:LangKeys.Button}}"/>
<hc:Divider LineStrokeThickness="2" LineStroke="{DynamicResource DarkPrimaryBrush}" Orientation="Vertical" MaxHeight="16"/>
<Button Content="{ex:Lang Key={x:Static langs:LangKeys.Button}}"/>
<hc:Divider LineStrokeThickness="2" LineStroke="{DynamicResource DarkPrimaryBrush}" Orientation="Vertical" MaxHeight="16"/>
<Button Content="{ex:Lang Key={x:Static langs:LangKeys.Button}}"/>
</StackPanel>
</StackPanel>
</WrapPanel>
</hc:UniformSpacingPanel>
</hc:ScrollViewer>
</hc:TransitioningContentControl>
</UserControl>
@@ -1,10 +1,9 @@
namespace HandyControlDemo.UserControl
namespace HandyControlDemo.UserControl;
public partial class DividerDemoCtl
{
public partial class DividerDemoCtl
public DividerDemoCtl()
{
public DividerDemoCtl()
{
InitializeComponent();
}
InitializeComponent();
}
}
@@ -1,10 +1,9 @@
namespace HandyControlDemo.UserControl
namespace HandyControlDemo.UserControl;
public partial class DrawerDemoCtl
{
public partial class DrawerDemoCtl
public DrawerDemoCtl()
{
public DrawerDemoCtl()
{
InitializeComponent();
}
InitializeComponent();
}
}
@@ -6,8 +6,20 @@
xmlns:langs="clr-namespace:HandyControlDemo.Properties.Langs"
xmlns:ex="clr-namespace:HandyControlDemo.Tools.Extension">
<hc:TransitioningContentControl>
<StackPanel Margin="32" VerticalAlignment="Center">
<hc:ElementGroup Orientation="Horizontal">
<hc:UniformSpacingPanel Margin="32" VerticalAlignment="Center" Orientation="Vertical" Spacing="16">
<hc:ElementGroup Orientation="Horizontal" Layout="Stack">
<Button HorizontalAlignment="Stretch" Width="auto" Content="{ex:Lang Key={x:Static langs:LangKeys.Button}}"/>
<Button HorizontalAlignment="Stretch" Width="auto" Content="{ex:Lang Key={x:Static langs:LangKeys.Button}}"/>
<Button HorizontalAlignment="Stretch" Width="auto" Content="{ex:Lang Key={x:Static langs:LangKeys.Button}}"/>
<Button HorizontalAlignment="Stretch" Width="auto" Content="{ex:Lang Key={x:Static langs:LangKeys.Button}}"/>
</hc:ElementGroup>
<hc:ElementGroup Orientation="Horizontal" MaxWidth="500">
<ToggleButton HorizontalAlignment="Stretch" Width="auto" Content="{ex:Lang Key={x:Static langs:LangKeys.ToggleButton}}"/>
<Button HorizontalAlignment="Stretch" Width="auto" Content="{ex:Lang Key={x:Static langs:LangKeys.Button}}"/>
<ToggleButton HorizontalAlignment="Stretch" Width="auto" Content="{ex:Lang Key={x:Static langs:LangKeys.ToggleButton}}"/>
<Button HorizontalAlignment="Stretch" Width="auto" Content="{ex:Lang Key={x:Static langs:LangKeys.Button}}"/>
</hc:ElementGroup>
<hc:ElementGroup Orientation="Horizontal" Layout="Stack">
<Border Style="{StaticResource BorderRegion}" Padding="6,0">
<Path Data="{StaticResource ClockGeometry}" Width="16" Height="16" Stretch="Uniform" Fill="{DynamicResource BorderBrush}"/>
</Border>
@@ -15,11 +27,20 @@
<Button Content="{ex:Lang Key={x:Static langs:LangKeys.Button}}"/>
<ToggleButton Content="{ex:Lang Key={x:Static langs:LangKeys.ToggleButton}}"/>
</hc:ElementGroup>
<hc:ElementGroup Margin="0,16,0,0">
<TextBox/>
<Button HorizontalAlignment="Stretch" Width="auto" Content="{ex:Lang Key={x:Static langs:LangKeys.Button}}"/>
<ToggleButton HorizontalAlignment="Stretch" Width="auto" Content="{ex:Lang Key={x:Static langs:LangKeys.ToggleButton}}"/>
<hc:ElementGroup>
<hc:ElementGroup.ItemsPanel>
<ItemsPanelTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
</Grid>
</ItemsPanelTemplate>
</hc:ElementGroup.ItemsPanel>
<TextBox HorizontalAlignment="Stretch" DockPanel.Dock="Left"/>
<Button Grid.Column="1" Width="100" Content="{ex:Lang Key={x:Static langs:LangKeys.Button}}" DockPanel.Dock="Right" HorizontalAlignment="Right" Style="{StaticResource ButtonPrimary}"/>
</hc:ElementGroup>
</StackPanel>
</hc:UniformSpacingPanel>
</hc:TransitioningContentControl>
</UserControl>
@@ -1,10 +1,9 @@
namespace HandyControlDemo.UserControl
namespace HandyControlDemo.UserControl;
public partial class ElementGroupDemoCtl
{
public partial class ElementGroupDemoCtl
public ElementGroupDemoCtl()
{
public ElementGroupDemoCtl()
{
InitializeComponent();
}
InitializeComponent();
}
}
@@ -12,7 +12,7 @@
</Style>
</UserControl.Resources>
<hc:TransitioningContentControl>
<ScrollViewer>
<hc:ScrollViewer IsInertiaEnabled="True">
<hc:FlexPanel Margin="32" AlignItems="FlexStart" AlignContent="SpaceBetween" JustifyContent="SpaceAround" FlexWrap="WrapReverse" FlexDirection="RowReverse">
<Border hc:FlexPanel.Order="99" Height="50" Style="{StaticResource Border4FlexPanelDemoStyle}">
<TextBlock Text="0" Style="{StaticResource TextBlockTitle}"/>
@@ -45,6 +45,6 @@
<TextBlock Text="9" Style="{StaticResource TextBlockTitle}"/>
</Border>
</hc:FlexPanel>
</ScrollViewer>
</hc:ScrollViewer>
</hc:TransitioningContentControl>
</UserControl>
@@ -1,10 +1,9 @@
namespace HandyControlDemo.UserControl
namespace HandyControlDemo.UserControl;
public partial class FlexPanelDemoCtl : IFull
{
public partial class FlexPanelDemoCtl : IFull
public FlexPanelDemoCtl()
{
public FlexPanelDemoCtl()
{
InitializeComponent();
}
InitializeComponent();
}
}
@@ -4,6 +4,8 @@
Background="{DynamicResource RegionBrush}"
xmlns:hc="https://handyorg.github.io/handycontrol">
<hc:TransitioningContentControl>
<hc:FlipClock Margin="32"/>
<Viewbox MaxWidth="520">
<hc:FlipClock Margin="32"/>
</Viewbox>
</hc:TransitioningContentControl>
</UserControl>
@@ -1,10 +1,9 @@
namespace HandyControlDemo.UserControl
namespace HandyControlDemo.UserControl;
public partial class FlipClockDemoCtl
{
public partial class FlipClockDemoCtl
public FlipClockDemoCtl()
{
public FlipClockDemoCtl()
{
InitializeComponent();
}
InitializeComponent();
}
}
@@ -1,10 +1,9 @@
namespace HandyControlDemo.UserControl
namespace HandyControlDemo.UserControl;
public partial class FloatingBlockDemoCtl
{
public partial class FloatingBlockDemoCtl
public FloatingBlockDemoCtl()
{
public FloatingBlockDemoCtl()
{
InitializeComponent();
}
InitializeComponent();
}
}
@@ -1,17 +1,16 @@
using System;
namespace HandyControlDemo.UserControl
{
public partial class GifImageDemoCtl : IDisposable
{
public GifImageDemoCtl()
{
InitializeComponent();
}
namespace HandyControlDemo.UserControl;
public void Dispose()
{
GifImageMain.Dispose();
}
public partial class GifImageDemoCtl : IDisposable
{
public GifImageDemoCtl()
{
InitializeComponent();
}
public void Dispose()
{
GifImageMain.Dispose();
}
}
@@ -4,7 +4,7 @@
xmlns:hc="https://handyorg.github.io/handycontrol"
Background="{DynamicResource RegionBrush}">
<hc:TransitioningContentControl>
<hc:SimplePanel Width="500" Height="400">
<hc:SimplePanel Height="400">
<hc:ScrollViewer Name="ScrollViewerDemo" IsInertiaEnabled="True" Margin="0,10,0,0">
<Border Height="2000" Margin="8,0">
<Border.Background>
@@ -1,10 +1,9 @@
namespace HandyControlDemo.UserControl
namespace HandyControlDemo.UserControl;
public partial class GotoTopDemoCtl
{
public partial class GotoTopDemoCtl
public GotoTopDemoCtl()
{
public GotoTopDemoCtl()
{
InitializeComponent();
}
InitializeComponent();
}
}
@@ -4,24 +4,26 @@
xmlns:hc="https://handyorg.github.io/handycontrol"
Background="{DynamicResource RegionBrush}">
<hc:TransitioningContentControl>
<StackPanel Margin="32" Orientation="Horizontal">
<UniformGrid Rows="3" Columns="3" Width="240" Height="240">
<hc:Gravatar Id="User1"/>
<hc:Gravatar Id="User2"/>
<hc:Gravatar Style="{StaticResource GravatarCircleImg}">
<Image Source="/HandyControlDemo;component/Resources/Img/Album/2.jpg"/>
</hc:Gravatar>
<hc:Gravatar Id="User4"/>
<hc:Gravatar Id="User5" Style="{StaticResource GravatarCircle}"/>
<hc:Gravatar Id="User6"/>
<hc:Gravatar Style="{StaticResource GravatarCircle}" Source="/HandyControlDemo;component/Resources/Img/Album/1.jpg"/>
<hc:Gravatar Id="User8"/>
<hc:Gravatar Id="User9"/>
</UniformGrid>
<StackPanel Margin="16,0,0,0" Height="220" VerticalAlignment="Center">
<TextBox Text="User1" Name="TextBoxName" Width="180"/>
<hc:Gravatar Height="180" Width="180" Id="{Binding Text,ElementName=TextBoxName}" Margin="10"/>
</StackPanel>
</StackPanel>
<hc:ScrollViewer IsInertiaEnabled="True">
<hc:UniformSpacingPanel Margin="32" ChildWrapping="Wrap" Spacing="16" ItemHorizontalAlignment="Center">
<UniformGrid Rows="3" Columns="3" Width="240" Height="240">
<hc:Gravatar Id="User1"/>
<hc:Gravatar Id="User2"/>
<hc:Gravatar Style="{StaticResource GravatarCircleImg}">
<Image Source="/HandyControlDemo;component/Resources/Img/Album/2.jpg"/>
</hc:Gravatar>
<hc:Gravatar Id="User4"/>
<hc:Gravatar Id="User5" Style="{StaticResource GravatarCircle}"/>
<hc:Gravatar Id="User6"/>
<hc:Gravatar Style="{StaticResource GravatarCircle}" Source="/HandyControlDemo;component/Resources/Img/Album/1.jpg"/>
<hc:Gravatar Id="User8"/>
<hc:Gravatar Id="User9"/>
</UniformGrid>
<StackPanel Width="240" Height="220" VerticalAlignment="Center">
<TextBox Text="User1" Name="TextBoxName" Width="180"/>
<hc:Gravatar Height="180" Width="180" Id="{Binding Text,ElementName=TextBoxName}" Margin="10"/>
</StackPanel>
</hc:UniformSpacingPanel>
</hc:ScrollViewer>
</hc:TransitioningContentControl>
</UserControl>
@@ -1,10 +1,9 @@
namespace HandyControlDemo.UserControl
namespace HandyControlDemo.UserControl;
public partial class GravatarDemoCtl
{
public partial class GravatarDemoCtl
public GravatarDemoCtl()
{
public GravatarDemoCtl()
{
InitializeComponent();
}
InitializeComponent();
}
}
@@ -6,7 +6,7 @@
xmlns:langs="clr-namespace:HandyControlDemo.Properties.Langs"
xmlns:ex="clr-namespace:HandyControlDemo.Tools.Extension"
Background="{DynamicResource RegionBrush}">
<ScrollViewer>
<hc:ScrollViewer IsInertiaEnabled="True">
<StackPanel Margin="32">
<TextBlock Text="{ex:Lang Key={x:Static langs:LangKeys.BasicLayout}}" Style="{StaticResource TextBlockLargeBold}" HorizontalAlignment="Left"/>
<hc:Row Margin="0,20,0,0">
@@ -154,5 +154,5 @@
</hc:Col>
</hc:Row>
</StackPanel>
</ScrollViewer>
</hc:ScrollViewer>
</UserControl>
@@ -1,10 +1,9 @@
namespace HandyControlDemo.UserControl
namespace HandyControlDemo.UserControl;
public partial class GridDemoCtl : IFull
{
public partial class GridDemoCtl : IFull
public GridDemoCtl()
{
public GridDemoCtl()
{
InitializeComponent();
}
InitializeComponent();
}
}
@@ -1,11 +1,10 @@
namespace HandyControlDemo.UserControl
namespace HandyControlDemo.UserControl;
public partial class GrowlDemoCtl
{
public partial class GrowlDemoCtl
public GrowlDemoCtl()
{
public GrowlDemoCtl()
{
InitializeComponent();
}
InitializeComponent();
}
}
@@ -1,10 +1,9 @@
namespace HandyControlDemo.UserControl
namespace HandyControlDemo.UserControl;
public partial class HoneycombPanelDemoCtl
{
public partial class HoneycombPanelDemoCtl
public HoneycombPanelDemoCtl()
{
public HoneycombPanelDemoCtl()
{
InitializeComponent();
}
InitializeComponent();
}
}
Loaded 100 of 942 files, more files were not shown because too many files have changed in this diff. Show more