This commit is contained in:
NaBian committed 2020-10-02 10:00:52 +08:00
commit 46d8e8bc65
125 files changed
+3743 -866

No files matched your search

+5
View File
@@ -0,0 +1,5 @@
blank_issues_enabled: false
contact_links:
- name: Read the Docs
url: http://handyorg.github.io
about: Be sure you've read the docs! See English documentation here http://ghost1372.github.io
+1 -1
View File
@@ -1,7 +1,7 @@
---
name: Feature request
about: Suggest an idea for this project
title: ''
title: '[Feature request]'
labels: ''
assignees: ''
+2 -1
View File
@@ -10,4 +10,5 @@ build/*
!build/build.ps1
!build/tools/
build/tools/*
!build/tools/packages.config
!build/tools/packages.config
!build/tools/VisualStudioToolsManifest.xml
+10 -3
View File
@@ -33,7 +33,7 @@
## Contributors
<a href="https://github.com/ghost1372" target="_blank"><img style="border-radius:50%!important" width="64px" alt="ghost1372" src="https://avatars0.githubusercontent.com/u/9213496?s=64&amp;v=4"></a>
<a href="https://github.com/ghost1372" target="_blank"><img style="border-radius:50%!important" width="64px" alt="ghost1372" src="https://avatars0.githubusercontent.com/u/9213496?s=64&v=4"></a>
<a href="https://github.com/DingpingZhang" target="_blank"><img style="border-radius:50%!important" width="64px" alt="DingpingZhang" src="https://avatars0.githubusercontent.com/u/8541016?s=64&v=4"></a>
<a href="https://github.com/M0n7y5" target="_blank"><img style="border-radius:50%!important" width="64px" alt="M0n7y5" src="https://avatars0.githubusercontent.com/u/17201053?s=64&v=4"></a>
<a href="https://github.com/guanguanchuangyu" target="_blank"><img style="border-radius:50%!important" width="64px" alt="guanguanchuangyu" src="https://avatars1.githubusercontent.com/u/25916858?s=64&v=4"></a>
@@ -53,6 +53,8 @@
<a href="https://github.com/lindexi" target="_blank"><img style="border-radius:50%!important" width="64px" alt="lindexi" src="https://avatars3.githubusercontent.com/u/16054566?s=64&v=4"></a>
<a href="https://github.com/danwalmsley" target="_blank"><img style="border-radius:50%!important" width="64px" alt="danwalmsley" src="https://avatars1.githubusercontent.com/u/4672627?s=64&v=4"></a>
<a href="https://github.com/varKeytrap" target="_blank"><img style="border-radius:50%!important" width="64px" alt="varKeytrap" src="https://avatars0.githubusercontent.com/u/17864005?s=64&v=4"></a>
<a href="https://github.com/xsnakes" target="_blank"><img style="border-radius:50%!important" width="64px" alt="xsnakes" src="https://avatars1.githubusercontent.com/u/4363683?s=64&v=4"></a>
<a href="https://github.com/mmasdivins" target="_blank"><img style="border-radius:50%!important" width="64px" alt="mmasdivins" src="https://avatars1.githubusercontent.com/u/63245359?s=64&v=4"></a>
## Backers
@@ -76,6 +78,7 @@
<a href="https://github.com/sanshiliuxiao" target="_blank"><img style="border-radius:50%!important" width="64px" alt="sanshiliuxiao" src="https://avatars3.githubusercontent.com/u/25658690?s=64&v=4"></a>
<a href="https://github.com/QJJMSK" target="_blank"><img style="border-radius:50%!important" width="64px" alt="QJJMSK" src="https://avatars2.githubusercontent.com/u/28100716?s=64&v=4"></a>
<a href="https://github.com/dspcjy" target="_blank"><img style="border-radius:50%!important" width="64px" alt="dspcjy" src="https://avatars3.githubusercontent.com/u/17764711?s=64&v=4"></a>
<a href="https://github.com/yaronzz" target="_blank"><img style="border-radius:50%!important" width="64px" alt="yaronzz" src="https://avatars0.githubusercontent.com/u/15530958?s=64&v=4"></a>
## Special thanks to
@@ -124,6 +127,10 @@ Step 4: Enjoy coding
## Latest examples
### FlexPanel
![FlexPanel](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/FlexPanel.gif)
### CheckComboBox
![CheckComboBox](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/CheckComboBox.png)
@@ -140,12 +147,12 @@ Step 4: Enjoy coding
![Screenshot](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/Screenshot.png)
## History publication
### GooeyEffect
![GooeyEffect](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/GooeyEffect.gif)
## History publication
### GlowWindow
![GlowWindow](https://gitee.com/handyorg/HandyOrgResource/raw/master/HandyControl/Resources/GlowWindow.png)
+10 -3
View File
@@ -33,7 +33,7 @@
## Contributors
<a href="https://github.com/ghost1372" target="_blank"><img style="border-radius:50%!important" width="64px" alt="ghost1372" src="https://avatars0.githubusercontent.com/u/9213496?s=64&amp;v=4"></a>
<a href="https://github.com/ghost1372" target="_blank"><img style="border-radius:50%!important" width="64px" alt="ghost1372" src="https://avatars0.githubusercontent.com/u/9213496?s=64&v=4"></a>
<a href="https://github.com/DingpingZhang" target="_blank"><img style="border-radius:50%!important" width="64px" alt="DingpingZhang" src="https://avatars0.githubusercontent.com/u/8541016?s=64&v=4"></a>
<a href="https://github.com/M0n7y5" target="_blank"><img style="border-radius:50%!important" width="64px" alt="M0n7y5" src="https://avatars0.githubusercontent.com/u/17201053?s=64&v=4"></a>
<a href="https://github.com/guanguanchuangyu" target="_blank"><img style="border-radius:50%!important" width="64px" alt="guanguanchuangyu" src="https://avatars1.githubusercontent.com/u/25916858?s=64&v=4"></a>
@@ -53,6 +53,8 @@
<a href="https://github.com/lindexi" target="_blank"><img style="border-radius:50%!important" width="64px" alt="lindexi" src="https://avatars3.githubusercontent.com/u/16054566?s=64&v=4"></a>
<a href="https://github.com/danwalmsley" target="_blank"><img style="border-radius:50%!important" width="64px" alt="danwalmsley" src="https://avatars1.githubusercontent.com/u/4672627?s=64&v=4"></a>
<a href="https://github.com/varKeytrap" target="_blank"><img style="border-radius:50%!important" width="64px" alt="varKeytrap" src="https://avatars0.githubusercontent.com/u/17864005?s=64&v=4"></a>
<a href="https://github.com/xsnakes" target="_blank"><img style="border-radius:50%!important" width="64px" alt="xsnakes" src="https://avatars1.githubusercontent.com/u/4363683?s=64&v=4"></a>
<a href="https://github.com/mmasdivins" target="_blank"><img style="border-radius:50%!important" width="64px" alt="mmasdivins" src="https://avatars1.githubusercontent.com/u/63245359?s=64&v=4"></a>
## Backers
@@ -76,6 +78,7 @@
<a href="https://github.com/sanshiliuxiao" target="_blank"><img style="border-radius:50%!important" width="64px" alt="sanshiliuxiao" src="https://avatars3.githubusercontent.com/u/25658690?s=64&v=4"></a>
<a href="https://github.com/QJJMSK" target="_blank"><img style="border-radius:50%!important" width="64px" alt="QJJMSK" src="https://avatars2.githubusercontent.com/u/28100716?s=64&v=4"></a>
<a href="https://github.com/dspcjy" target="_blank"><img style="border-radius:50%!important" width="64px" alt="dspcjy" src="https://avatars3.githubusercontent.com/u/17764711?s=64&v=4"></a>
<a href="https://github.com/yaronzz" target="_blank"><img style="border-radius:50%!important" width="64px" alt="yaronzz" src="https://avatars0.githubusercontent.com/u/15530958?s=64&v=4"></a>
## Special thanks to
@@ -124,6 +127,10 @@ Step 4: Enjoy coding
## Latest examples
### FlexPanel
![FlexPanel](https://raw.githubusercontent.com/HandyOrg/HandyOrgResource/master/HandyControl/Resources/FlexPanel.gif)
### CheckComboBox
![CheckComboBox](https://raw.githubusercontent.com/HandyOrg/HandyOrgResource/master/HandyControl/Resources/CheckComboBox.png)
@@ -140,12 +147,12 @@ Step 4: Enjoy coding
![Screenshot](https://raw.githubusercontent.com/HandyOrg/HandyOrgResource/master/HandyControl/Resources/Screenshot.png)
## History publication
### GooeyEffect
![GooeyEffect](https://raw.githubusercontent.com/HandyOrg/HandyOrgResource/master/HandyControl/Resources/GooeyEffect.gif)
## History publication
### GlowWindow
![GlowWindow](https://raw.githubusercontent.com/HandyOrg/HandyOrgResource/master/HandyControl/Resources/GlowWindow.png)
+1 -1
View File
@@ -64,7 +64,7 @@ Task("Build")
{
Configuration = "Release",
Framework = "net5.0",
OutputDirectory = "lib/net50"
OutputDirectory = "lib/net5.0"
};
DotNetCoreBuild("../src/Net_40/HandyControl_Net_40/HandyControl_Net_40.csproj", settingsNet40);
+14 -1
View File
@@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
<metadata>
<id>HandyControl</id>
<version>2.5.0.2</version>
<version>3.0.0-rc.1</version>
<title>HandyOrg</title>
<authors>HandyOrg</authors>
<owners>HandyOrg</owners>
@@ -25,6 +25,7 @@
<group targetFramework=".NETFramework4.8" />
<group targetFramework=".NETCoreApp3.0" />
<group targetFramework=".NETCoreApp3.1" />
<group targetFramework=".NETCoreApp5.0" />
</dependencies>
</metadata>
<files>
@@ -74,6 +75,17 @@
<file src="lib\net48\HandyControl.dll" target="lib\net48\HandyControl.dll" />
<file src="lib\net48\HandyControl.pdb" target="lib\net48\HandyControl.pdb" />
<file src="lib\net48\HandyControl.xml" target="lib\net48\HandyControl.xml" />
<file src="lib\net5.0\en\HandyControl.resources.dll" target="lib\net5.0\en\HandyControl.resources.dll" />
<file src="lib\net5.0\fa\HandyControl.resources.dll" target="lib\net5.0\fa\HandyControl.resources.dll" />
<file src="lib\net5.0\fr\HandyControl.resources.dll" target="lib\net5.0\fr\HandyControl.resources.dll" />
<file src="lib\net5.0\ko-KR\HandyControl.resources.dll" target="lib\net5.0\ko-KR\HandyControl.resources.dll" />
<file src="lib\net5.0\pt-BR\HandyControl.resources.dll" target="lib\net5.0\pt-BR\HandyControl.resources.dll" />
<file src="lib\net5.0\ru\HandyControl.resources.dll" target="lib\net5.0\ru\HandyControl.resources.dll" />
<file src="lib\net5.0\tr\HandyControl.resources.dll" target="lib\net5.0\tr\HandyControl.resources.dll" />
<file src="lib\net5.0\HandyControl.deps.json" target="lib\net5.0\HandyControl.deps.json" />
<file src="lib\net5.0\HandyControl.dll" target="lib\net5.0\HandyControl.dll" />
<file src="lib\net5.0\HandyControl.pdb" target="lib\net5.0\HandyControl.pdb" />
<file src="lib\net5.0\HandyControl.xml" target="lib\net5.0\HandyControl.xml" />
<file src="lib\netcoreapp3.0\en\HandyControl.resources.dll" target="lib\netcoreapp3.0\en\HandyControl.resources.dll" />
<file src="lib\netcoreapp3.0\fa\HandyControl.resources.dll" target="lib\netcoreapp3.0\fa\HandyControl.resources.dll" />
<file src="lib\netcoreapp3.0\fr\HandyControl.resources.dll" target="lib\netcoreapp3.0\fr\HandyControl.resources.dll" />
@@ -96,5 +108,6 @@
<file src="lib\netcoreapp3.1\HandyControl.xml" target="lib\netcoreapp3.1\HandyControl.xml" />
<file src="icon.png" target="icon.png" />
<file src="LICENSE" target="LICENSE" />
<file src="tools\VisualStudioToolsManifest.xml" target="tools\VisualStudioToolsManifest.xml" />
</files>
</package>
+81
View File
@@ -0,0 +1,81 @@
<FileList>
<File Reference="HandyControl.dll">
<ToolboxItems UIFramework="WPF" VSCategory="HandyControl" BlendCategory="HandyControl">
<Item Type="HandyControl.Controls.AnimationPath" />
<Item Type="HandyControl.Expression.Shapes.Arc" />
<Item Type="HandyControl.Controls.Badge" />
<Item Type="HandyControl.Controls.BlendEffectBox" />
<Item Type="HandyControl.Controls.ButtonGroup" />
<Item Type="HandyControl.Controls.CalendarWithClock" />
<Item Type="HandyControl.Controls.Card" />
<Item Type="HandyControl.Controls.Carousel" />
<Item Type="HandyControl.Controls.ChatBubble" />
<Item Type="HandyControl.Controls.CheckComboBox" />
<Item Type="HandyControl.Controls.CirclePanel" />
<Item Type="HandyControl.Controls.CircleProgressBar" />
<Item Type="HandyControl.Controls.Clock" />
<Item Type="HandyControl.Controls.Col" />
<Item Type="HandyControl.Controls.ColorPicker" />
<Item Type="HandyControl.Controls.ComboBox" />
<Item Type="HandyControl.Controls.CompareSlider" />
<Item Type="HandyControl.Controls.ContextMenuButton" />
<Item Type="HandyControl.Controls.ContextMenuToggleButton" />
<Item Type="HandyControl.Controls.CoverFlow" />
<Item Type="HandyControl.Controls.CoverView" />
<Item Type="HandyControl.Controls.DashedBorder" />
<Item Type="HandyControl.Controls.DatePicker" />
<Item Type="HandyControl.Controls.DateTimePicker" />
<Item Type="HandyControl.Controls.DialogContainer" />
<Item Type="HandyControl.Controls.Divider" />
<Item Type="HandyControl.Controls.Drawer" />
<Item Type="HandyControl.Controls.FlexPanel" />
<Item Type="HandyControl.Controls.FlipClock" />
<Item Type="HandyControl.Controls.FloatingBlock" />
<Item Type="HandyControl.Controls.GifImage" />
<Item Type="HandyControl.Controls.GotoTop" />
<Item Type="HandyControl.Controls.Gravatar" />
<Item Type="HandyControl.Controls.HoneycombPanel" />
<Item Type="HandyControl.Controls.ImageBlock" />
<Item Type="HandyControl.Controls.ImageSelector" />
<Item Type="HandyControl.Controls.ImageViewer" />
<Item Type="HandyControl.Controls.ListClock" />
<Item Type="HandyControl.Controls.LoadingCircle" />
<Item Type="HandyControl.Controls.LoadingLine" />
<Item Type="HandyControl.Controls.Magnifier" />
<Item Type="HandyControl.Controls.NotifyIcon" />
<Item Type="HandyControl.Controls.NumericUpDown" />
<Item Type="HandyControl.Controls.OutlineText" />
<Item Type="HandyControl.Controls.Pagination" />
<Item Type="HandyControl.Controls.PasswordBox" />
<Item Type="HandyControl.Controls.PinBox" />
<Item Type="HandyControl.Controls.Poptip" />
<Item Type="HandyControl.Controls.PreviewSlider" />
<Item Type="HandyControl.Controls.ProgressButton" />
<Item Type="HandyControl.Controls.PropertyGrid" />
<Item Type="HandyControl.Controls.RangeSlider" />
<Item Type="HandyControl.Controls.Rate" />
<Item Type="HandyControl.Controls.RelativePanel" />
<Item Type="HandyControl.Controls.Row" />
<Item Type="HandyControl.Controls.RunningBlock" />
<Item Type="HandyControl.Controls.ScrollViewer" />
<Item Type="HandyControl.Controls.SearchBar" />
<Item Type="HandyControl.Controls.Shield" />
<Item Type="HandyControl.Controls.SideMenu" />
<Item Type="HandyControl.Controls.SimplePanel" />
<Item Type="HandyControl.Controls.SimpleText" />
<Item Type="HandyControl.Controls.SplitButton" />
<Item Type="HandyControl.Controls.StepBar" />
<Item Type="HandyControl.Controls.TabControl" />
<Item Type="HandyControl.Controls.Tag" />
<Item Type="HandyControl.Controls.TextBox" />
<Item Type="HandyControl.Controls.TimeBar" />
<Item Type="HandyControl.Controls.TimePicker" />
<Item Type="HandyControl.Controls.ToggleBlock" />
<Item Type="HandyControl.Controls.Transfer" />
<Item Type="HandyControl.Controls.TransitioningContentControl" />
<Item Type="HandyControl.Controls.WaterfallPanel" />
<Item Type="HandyControl.Controls.Watermark" />
<Item Type="HandyControl.Controls.WaveProgressBar" />
</ToolboxItems>
</File>
</FileList>
+5 -5
View File
@@ -3,9 +3,9 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.28729.10
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HandyControl_Net_GE45", "Net_GE45\HandyControl_Net_GE45\HandyControl_Net_GE45.csproj", "{DC966E3D-BCFF-4652-98CF-070E5494749A}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HandyControl_Net_GE45", "Net_GE45\HandyControl_Net_GE45\HandyControl_Net_GE45.csproj", "{DC966E3D-BCFF-4652-98CF-070E5494749A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HandyControlDemo_Net_GE45", "Net_GE45\HandyControlDemo_Net_GE45\HandyControlDemo_Net_GE45.csproj", "{9A7B52E6-94BB-4E7E-BB6A-7CF6761B79A7}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HandyControlDemo_Net_GE45", "Net_GE45\HandyControlDemo_Net_GE45\HandyControlDemo_Net_GE45.csproj", "{9A7B52E6-94BB-4E7E-BB6A-7CF6761B79A7}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Net_GE45", "Net_GE45", "{2F551C62-77F7-4FA5-8AD7-FCF53E92AE08}"
EndProject
@@ -17,11 +17,11 @@ Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "HandyControlDemo_Shared", "
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Net_40", "Net_40", "{35E3F9C0-8924-4536-BE09-F3761FDBF066}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HandyControl_Net_40", "Net_40\HandyControl_Net_40\HandyControl_Net_40.csproj", "{32204503-2EF0-4681-AE13-AA1FEB6C658A}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HandyControl_Net_40", "Net_40\HandyControl_Net_40\HandyControl_Net_40.csproj", "{32204503-2EF0-4681-AE13-AA1FEB6C658A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HandyControlDemo_Net_40", "Net_40\HandyControlDemo_Net_40\HandyControlDemo_Net_40.csproj", "{D8AE88F8-C36B-4D10-A7F9-22FFCFBA5231}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HandyControlDemo_Net_40", "Net_40\HandyControlDemo_Net_40\HandyControlDemo_Net_40.csproj", "{D8AE88F8-C36B-4D10-A7F9-22FFCFBA5231}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HandyControlDemo_Code", "Shared\HandyControlDemo_Code\HandyControlDemo_Code.csproj", "{D8A4748C-0500-4F63-BC47-3506658C68F7}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HandyControlDemo_Code", "Shared\HandyControlDemo_Code\HandyControlDemo_Code.csproj", "{D8A4748C-0500-4F63-BC47-3506658C68F7}"
EndProject
Global
GlobalSection(SharedMSBuildProjectFiles) = preSolution
@@ -6,6 +6,7 @@
<TargetFramework>net40</TargetFramework>
<ApplicationIcon>..\..\Shared\HandyControlDemo_Shared\Resources\Img\icon.ico</ApplicationIcon>
<NoWarn>0108</NoWarn>
<UseWPF>true</UseWPF>
</PropertyGroup>
<ItemGroup>
<Reference Include="Microsoft.CSharp" />
@@ -165,6 +166,9 @@
<Resource Include="..\..\Shared\HandyControlDemo_Shared\Resources\Img\Flag\cn.png">
<Link>Resources\Img\Flag\cn.png</Link>
</Resource>
<Resource Include="..\..\Shared\HandyControlDemo_Shared\Resources\Img\Flag\ca-Es.png">
<Link>Resources\Img\Flag\ca-Es.png</Link>
</Resource>
<Resource Include="..\..\Shared\HandyControlDemo_Shared\Resources\Img\Flag\en.png">
<Link>Resources\Img\Flag\en.png</Link>
</Resource>
@@ -279,6 +283,9 @@
<Resource Include="..\..\Shared\HandyControlDemo_Shared\Resources\Img\LeftMainContent\Label_16x.png">
<Link>Resources\Img\LeftMainContent\Label_16x.png</Link>
</Resource>
<Resource Include="..\..\Shared\HandyControlDemo_Shared\Resources\Img\LeftMainContent\layout-FlexLayout-16.png">
<Link>Resources\Img\LeftMainContent\layout-FlexLayout-16.png</Link>
</Resource>
<Resource Include="..\..\Shared\HandyControlDemo_Shared\Resources\Img\LeftMainContent\LinearCarousel_16x.png">
<Link>Resources\Img\LeftMainContent\LinearCarousel_16x.png</Link>
</Resource>
@@ -496,6 +503,9 @@
<ItemGroup>
<EmbeddedResource Include="..\..\Shared\HandyControlDemo_Shared\Properties\Langs\Lang.tr.resx">
<Link>Properties\Langs\Lang.tr.resx</Link>
</EmbeddedResource>
<EmbeddedResource Include="..\..\Shared\HandyControlDemo_Shared\Properties\Langs\Lang.ca-ES.resx">
<Link>Properties\Langs\Lang.ca-ES.resx</Link>
</EmbeddedResource>
<EmbeddedResource Include="..\..\Shared\HandyControlDemo_Shared\Properties\Langs\Lang.en.resx">
<Link>Properties\Langs\Lang.en.resx</Link>
@@ -8,8 +8,9 @@
<IncludeSymbols>true</IncludeSymbols>
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
<NoWarn>0067;0649;1591</NoWarn>
<UseWPF>true</UseWPF>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release-Net40|AnyCPU' ">
<DocumentationFile>bin\$(Configuration)\$(TargetFramework)\HandyControl.xml</DocumentationFile>
</PropertyGroup>
<ItemGroup>
@@ -60,6 +61,9 @@
<ItemGroup>
<EmbeddedResource Include="..\..\Shared\HandyControl_Shared\Properties\Langs\Lang.tr.resx">
<Link>Properties\Langs\Lang.tr.resx</Link>
</EmbeddedResource>
<EmbeddedResource Include="..\..\Shared\HandyControl_Shared\Properties\Langs\Lang.ca-ES.resx">
<Link>Properties\Langs\Lang.ca-ES.resx</Link>
</EmbeddedResource>
<EmbeddedResource Include="..\..\Shared\HandyControl_Shared\Properties\Langs\Lang.en.resx">
<Link>Properties\Langs\Lang.en.resx</Link>
@@ -6,6 +6,7 @@
<TargetFrameworks>netcoreapp3.0;netcoreapp3.1;net45;net462;net47;net48;net5.0</TargetFrameworks>
<ApplicationIcon>..\..\Shared\HandyControlDemo_Shared\Resources\Img\icon.ico</ApplicationIcon>
<NoWarn>0108</NoWarn>
<UseWPF>true</UseWPF>
</PropertyGroup>
<ItemGroup Condition="$(TargetFramework.StartsWith('net4'))">
<Reference Include="Microsoft.CSharp" />
@@ -164,6 +165,9 @@
</Resource>
<Resource Include="..\..\Shared\HandyControlDemo_Shared\Resources\Img\Flag\cn.png">
<Link>Resources\Img\Flag\cn.png</Link>
</Resource>
<Resource Include="..\..\Shared\HandyControlDemo_Shared\Resources\Img\Flag\ca-Es.png">
<Link>Resources\Img\Flag\ca-Es.png</Link>
</Resource>
<Resource Include="..\..\Shared\HandyControlDemo_Shared\Resources\Img\Flag\en.png">
<Link>Resources\Img\Flag\en.png</Link>
@@ -279,6 +283,9 @@
<Resource Include="..\..\Shared\HandyControlDemo_Shared\Resources\Img\LeftMainContent\Label_16x.png">
<Link>Resources\Img\LeftMainContent\Label_16x.png</Link>
</Resource>
<Resource Include="..\..\Shared\HandyControlDemo_Shared\Resources\Img\LeftMainContent\layout-FlexLayout-16.png">
<Link>Resources\Img\LeftMainContent\layout-FlexLayout-16.png</Link>
</Resource>
<Resource Include="..\..\Shared\HandyControlDemo_Shared\Resources\Img\LeftMainContent\LinearCarousel_16x.png">
<Link>Resources\Img\LeftMainContent\LinearCarousel_16x.png</Link>
</Resource>
@@ -496,6 +503,9 @@
<ItemGroup>
<EmbeddedResource Include="..\..\Shared\HandyControlDemo_Shared\Properties\Langs\Lang.tr.resx">
<Link>Properties\Langs\Lang.tr.resx</Link>
</EmbeddedResource>
<EmbeddedResource Include="..\..\Shared\HandyControlDemo_Shared\Properties\Langs\Lang.ca-ES.resx">
<Link>Properties\Langs\Lang.ca-ES.resx</Link>
</EmbeddedResource>
<EmbeddedResource Include="..\..\Shared\HandyControlDemo_Shared\Properties\Langs\Lang.en.resx">
<Link>Properties\Langs\Lang.en.resx</Link>
@@ -8,6 +8,7 @@
<IncludeSymbols>true</IncludeSymbols>
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
<NoWarn>0067;0649;1591</NoWarn>
<UseWPF>true</UseWPF>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DocumentationFile>bin\$(Configuration)\$(TargetFramework)\HandyControl.xml</DocumentationFile>
@@ -29,6 +30,9 @@
<ItemGroup>
<EmbeddedResource Include="..\..\Shared\HandyControl_Shared\Properties\Langs\Lang.tr.resx">
<Link>Properties\Langs\Lang.tr.resx</Link>
</EmbeddedResource>
<EmbeddedResource Include="..\..\Shared\HandyControl_Shared\Properties\Langs\Lang.ca-ES.resx">
<Link>Properties\Langs\Lang.ca-ES.resx</Link>
</EmbeddedResource>
<EmbeddedResource Include="..\..\Shared\HandyControl_Shared\Properties\Langs\Lang.en.resx">
<Link>Properties\Langs\Lang.en.resx</Link>
@@ -496,6 +496,10 @@
<Link>UserControl\Controls\DrawerDemoCtl.xaml.cs</Link>
<DependentUpon>DrawerDemoCtl.xaml</DependentUpon>
</Resource>
<Resource Include="..\..\Shared\HandyControlDemo_Shared\UserControl\Controls\FlexPanelDemoCtl.xaml.cs">
<Link>UserControl\Controls\FlexPanelDemoCtl.xaml.cs</Link>
<DependentUpon>FlexPanelDemoCtl.xaml</DependentUpon>
</Resource>
<Resource Include="..\..\Shared\HandyControlDemo_Shared\UserControl\Controls\FlipClockDemoCtl.xaml.cs">
<Link>UserControl\Controls\FlipClockDemoCtl.xaml.cs</Link>
<DependentUpon>FlipClockDemoCtl.xaml</DependentUpon>
@@ -78,6 +78,7 @@
[ "Divider", "DividerDemoCtl", "DottedSplitter_16x", "" ],
[ "CirclePanel", "CirclePanelDemoCtl", "ColorWheel_16x", "" ],
[ "Grid", "GridDemoCtl", "GridPane_16x", "" ],
[ "FlexPanel", "FlexPanelDemoCtl", "layout-FlexLayout-16", "1" ],
[ "RelativePanel", "RelativePanelDemoCtl", "TransformRelative_16x", "" ],
[ "WaterfallPanel", "WaterfallPanelDemoCtl", "Panel_16x", "" ],
[ "HoneycombPanel", "HoneycombPanelDemoCtl", "PolygonHexagon_16x", "" ],
@@ -58,6 +58,9 @@
<Compile Include="$(MSBuildThisFileDirectory)UserControl\Basic\TextDialogWithTimer.xaml.cs">
<DependentUpon>TextDialogWithTimer.xaml</DependentUpon>
</Compile>
<Compile Include="$(MSBuildThisFileDirectory)UserControl\Controls\FlexPanelDemoCtl.xaml.cs">
<DependentUpon>FlexPanelDemoCtl.xaml</DependentUpon>
</Compile>
<Compile Include="$(MSBuildThisFileDirectory)UserControl\Controls\ImageSelectorDemoCtl.xaml.cs">
<DependentUpon>ImageSelectorDemoCtl.xaml</DependentUpon>
</Compile>
@@ -528,6 +531,10 @@
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="$(MSBuildThisFileDirectory)UserControl\Controls\FlexPanelDemoCtl.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="$(MSBuildThisFileDirectory)UserControl\Controls\ImageSelectorDemoCtl.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,768 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="About" xml:space="preserve">
<value>Sobre</value>
</data>
<data name="AddItem" xml:space="preserve">
<value>Afegir un element</value>
</data>
<data name="AnimationPath" xml:space="preserve">
<value>AnimationPath</value>
</data>
<data name="AppClosingTip" xml:space="preserve">
<value>L'aplicació es minimitzarà a la barra d'icones en lloc de tancar-la</value>
</data>
<data name="Ask" xml:space="preserve">
<value>Preguntar</value>
</data>
<data name="Badge" xml:space="preserve">
<value>Badge</value>
</data>
<data name="BasicInfo" xml:space="preserve">
<value>Empleneu la informació bàsica</value>
</data>
<data name="BasicLayout" xml:space="preserve">
<value>Disseny bàsic</value>
</data>
<data name="Blink" xml:space="preserve">
<value>Parpellejant</value>
</data>
<data name="Blog" xml:space="preserve">
<value>Blog</value>
</data>
<data name="Border" xml:space="preserve">
<value>Border</value>
</data>
<data name="Brush" xml:space="preserve">
<value>Brush</value>
</data>
<data name="Button" xml:space="preserve">
<value>Button</value>
</data>
<data name="ButtonCustom" xml:space="preserve">
<value>Botó personalitzat</value>
</data>
<data name="ButtonGroup" xml:space="preserve">
<value>ButtonGroup</value>
</data>
<data name="Calendar" xml:space="preserve">
<value>Calendari</value>
</data>
<data name="CalendarWithClock" xml:space="preserve">
<value>CalendarWithClock</value>
</data>
<data name="Card" xml:space="preserve">
<value>CalendarWithClock</value>
</data>
<data name="Carousel" xml:space="preserve">
<value>Carousel</value>
</data>
<data name="Second" xml:space="preserve">
<value>Seg</value>
</data>
<data name="Selected" xml:space="preserve">
<value>Seleccionat</value>
</data>
<data name="Shield" xml:space="preserve">
<value>Shield</value>
</data>
<data name="Tag" xml:space="preserve">
<value>Tag</value>
</data>
<data name="Text" xml:space="preserve">
<value>Text</value>
</data>
<data name="TextBlock" xml:space="preserve">
<value>Text</value>
</data>
<data name="TextBox" xml:space="preserve">
<value>TextBox</value>
</data>
<data name="TextDialog" xml:space="preserve">
<value>TextDialog</value>
</data>
<data name="TimeBar" xml:space="preserve">
<value>TimeBar</value>
</data>
<data name="TimePicker" xml:space="preserve">
<value>TimePicker</value>
</data>
<data name="Tools" xml:space="preserve">
<value>Eines</value>
</data>
<data name="ToolBar" xml:space="preserve">
<value>ToolBar</value>
</data>
<data name="Transfer" xml:space="preserve">
<value>Transferir</value>
</data>
<data name="TreeView" xml:space="preserve">
<value>TreeView</value>
</data>
<data name="Vsix" xml:space="preserve">
<value>Vsix</value>
</data>
<data name="WaterfallPanel" xml:space="preserve">
<value>WaterfallPanel</value>
</data>
<data name="RadioButton" xml:space="preserve">
<value>RadioButton</value>
</data>
<data name="RangeSlider" xml:space="preserve">
<value>RangeSlider</value>
</data>
<data name="Rate" xml:space="preserve">
<value>Rate</value>
</data>
<data name="Register" xml:space="preserve">
<value>Registrar</value>
</data>
<data name="RelativePanel" xml:space="preserve">
<value>RelativePanel</value>
</data>
<data name="SearchBar" xml:space="preserve">
<value>SearchBar</value>
</data>
<data name="ScrollViewer" xml:space="preserve">
<value>ScrollViewer</value>
</data>
<data name="Screenshot" xml:space="preserve">
<value>Screenshot</value>
</data>
<data name="RunningBlock" xml:space="preserve">
<value>RunningBlock</value>
</data>
<data name="RichTextBox" xml:space="preserve">
<value>RichTextBox</value>
</data>
<data name="RepeatButton" xml:space="preserve">
<value>RepeatButton</value>
</data>
<data name="RemoveItem" xml:space="preserve">
<value>Esborrar un element</value>
</data>
<data name="QQGroup" xml:space="preserve">
<value>QQ Group</value>
</data>
<data name="Project" xml:space="preserve">
<value>Projecte</value>
</data>
<data name="PropertyGrid" xml:space="preserve">
<value>PropertyGrid</value>
</data>
<data name="ProgressButton" xml:space="preserve">
<value>ProgressButton</value>
</data>
<data name="ProgressBar" xml:space="preserve">
<value>ProgressBar</value>
</data>
<data name="PreviewSlider" xml:space="preserve">
<value>PreviewSlider</value>
</data>
<data name="Poptip" xml:space="preserve">
<value>Poptip</value>
</data>
<data name="PinBox" xml:space="preserve">
<value>PinBox</value>
</data>
<data name="PasswordBox" xml:space="preserve">
<value>PasswordBox</value>
</data>
<data name="Pagination" xml:space="preserve">
<value>Pagination</value>
</data>
<data name="OutlineText" xml:space="preserve">
<value>OutlineText</value>
</data>
<data name="Ok" xml:space="preserve">
<value>Acceptar</value>
</data>
<data name="Off" xml:space="preserve">
<value>Off</value>
</data>
<data name="On" xml:space="preserve">
<value>On</value>
</data>
<data name="NumericUpDown" xml:space="preserve">
<value>NumericUpDown</value>
</data>
<data name="NotifyIcon" xml:space="preserve">
<value>NotifyIcon</value>
</data>
<data name="Next" xml:space="preserve">
<value>Següent</value>
</data>
<data name="NewWindow" xml:space="preserve">
<value>Nova finestra</value>
</data>
<data name="Name" xml:space="preserve">
<value>Nom</value>
</data>
<data name="MessageBox" xml:space="preserve">
<value>MessageBox</value>
</data>
<data name="Menu" xml:space="preserve">
<value>Menu</value>
</data>
<data name="Magnifier" xml:space="preserve">
<value>Magnifier</value>
</data>
<data name="Loading" xml:space="preserve">
<value>Carregant</value>
</data>
<data name="ListView" xml:space="preserve">
<value>ListView</value>
</data>
<data name="ListBox" xml:space="preserve">
<value>ListBox</value>
</data>
<data name="Label" xml:space="preserve">
<value>Label</value>
</data>
<data name="Info" xml:space="preserve">
<value>Informació</value>
</data>
<data name="Index" xml:space="preserve">
<value>Índex</value>
</data>
<data name="ImageSelector" xml:space="preserve">
<value>ImageSelector</value>
</data>
<data name="ImageBrowser" xml:space="preserve">
<value>ImageBrowser</value>
</data>
<data name="ImageBlock" xml:space="preserve">
<value>ImageBlock</value>
</data>
<data name="HoneycombPanel" xml:space="preserve">
<value>HoneycombPanel</value>
</data>
<data name="HatchBrushGenerator" xml:space="preserve">
<value>HatchBrushGenerator</value>
</data>
<data name="Ignore" xml:space="preserve">
<value>Ignorar</value>
</data>
<data name="Growl" xml:space="preserve">
<value>Growl</value>
</data>
<data name="Groups" xml:space="preserve">
<value>Grups</value>
</data>
<data name="GroupBox" xml:space="preserve">
<value>GroupBox</value>
</data>
<data name="Grid" xml:space="preserve">
<value>Grid</value>
</data>
<data name="Gravatar" xml:space="preserve">
<value>Gravatar</value>
</data>
<data name="GotoTop" xml:space="preserve">
<value>GotoTop</value>
</data>
<data name="GifImage" xml:space="preserve">
<value>GifImage</value>
</data>
<data name="Geometry" xml:space="preserve">
<value>Geometry</value>
</data>
<data name="Frame" xml:space="preserve">
<value>Frame</value>
</data>
<data name="FlowDocumentScrollViewer" xml:space="preserve">
<value>FlowDocumentScrollViewer</value>
</data>
<data name="FlowDocumentReader" xml:space="preserve">
<value>FlowDocumentReader</value>
</data>
<data name="FlowDocumentPageViewer" xml:space="preserve">
<value>FlowDocumentPageViewer</value>
</data>
<data name="FlowDocument" xml:space="preserve">
<value>FlowDocument</value>
</data>
<data name="FloatingBlock" xml:space="preserve">
<value>FloatingBlock</value>
</data>
<data name="FlipClock" xml:space="preserve">
<value>FlipClock</value>
</data>
<data name="FlexPanel" xml:space="preserve">
<value>FlexPanel</value>
</data>
<data name="Fatal" xml:space="preserve">
<value>Fatal</value>
</data>
<data name="Expander" xml:space="preserve">
<value>Expander</value>
</data>
<data name="Exit" xml:space="preserve">
<value>Sortir</value>
</data>
<data name="Error" xml:space="preserve">
<value>Error</value>
</data>
<data name="Email" xml:space="preserve">
<value>Email</value>
</data>
<data name="Effects" xml:space="preserve">
<value>Efectes</value>
</data>
<data name="Drawer" xml:space="preserve">
<value>Drawer</value>
</data>
<data name="Documentation" xml:space="preserve">
<value>Documentació</value>
</data>
<data name="Divider" xml:space="preserve">
<value>Divider</value>
</data>
<data name="DataGrid" xml:space="preserve">
<value>DataGrid</value>
</data>
<data name="DatePicker" xml:space="preserve">
<value>DatePicker</value>
</data>
<data name="DateTimePicker" xml:space="preserve">
<value>DateTimePicker</value>
</data>
<data name="Danger" xml:space="preserve">
<value>Perill</value>
</data>
<data name="CoverView" xml:space="preserve">
<value>CoverView</value>
</data>
<data name="CoverFlow" xml:space="preserve">
<value>CoverFlow</value>
</data>
<data name="Controls" xml:space="preserve">
<value>Controls</value>
</data>
<data name="CompareSlider" xml:space="preserve">
<value>CompareSlider</value>
</data>
<data name="ChatBubble" xml:space="preserve">
<value>ChatBubble</value>
</data>
<data name="CheckBox" xml:space="preserve">
<value>CheckBox</value>
</data>
<data name="CheckComboBox" xml:space="preserve">
<value>CheckComboBox</value>
</data>
<data name="CirclePanel" xml:space="preserve">
<value>CirclePanel</value>
</data>
<data name="Window" xml:space="preserve">
<value>Finestra</value>
</data>
<data name="Repository" xml:space="preserve">
<value>Repositori</value>
</data>
<data name="Comment" xml:space="preserve">
<value>Comentari</value>
</data>
<data name="Reply" xml:space="preserve">
<value>Respondre</value>
</data>
<data name="PleaseWait" xml:space="preserve">
<value>Si us plau espera...</value>
</data>
<data name="PlsEnterEmail" xml:space="preserve">
<value>si us plau, introduïu el correu electrònic</value>
</data>
<data name="Step" xml:space="preserve">
<value>Pas</value>
</data>
<data name="Try2CloseApp" xml:space="preserve">
<value>Voleu tancar l'aplicació?</value>
</data>
<data name="InteractiveDialog" xml:space="preserve">
<value>Diàleg interactiu</value>
</data>
<data name="Dialog" xml:space="preserve">
<value>Diàleg</value>
</data>
<data name="Visibility" xml:space="preserve">
<value>Visibilitat</value>
</data>
<data name="OpenPanel" xml:space="preserve">
<value>Obriu el Panell</value>
</data>
<data name="IsNotPhone" xml:space="preserve">
<value>No és un número de telèfon</value>
</data>
<data name="Slider" xml:space="preserve">
<value>Slider</value>
</data>
<data name="Tip" xml:space="preserve">
<value>Prompt</value>
</data>
<data name="GrowlDemo" xml:space="preserve">
<value>Demostració de Growl</value>
</data>
<data name="Contributors" xml:space="preserve">
<value>Col·laboradors</value>
</data>
<data name="Chatroom" xml:space="preserve">
<value>Sala de chat</value>
</data>
<data name="PleaseInput" xml:space="preserve">
<value>Si us plau introduïu ...</value>
</data>
<data name="ComboBox" xml:space="preserve">
<value>ComboBox</value>
</data>
<data name="Primary" xml:space="preserve">
<value>Primari</value>
</data>
<data name="Default" xml:space="preserve">
<value>Defecte</value>
</data>
<data name="OpenGlowWindow" xml:space="preserve">
<value>Obre glowWindow</value>
</data>
<data name="ToggleButton" xml:space="preserve">
<value>ToggleButton</value>
</data>
<data name="PlsEnterContent" xml:space="preserve">
<value>Si us plau introduïu contingut</value>
</data>
<data name="DialogDemo" xml:space="preserve">
<value>Demostració del diàleg</value>
</data>
<data name="Common" xml:space="preserve">
<value>Comú</value>
</data>
<data name="SideMenu" xml:space="preserve">
<value>SideMenu</value>
</data>
<data name="Sprite" xml:space="preserve">
<value>Sprite</value>
</data>
<data name="TabControl" xml:space="preserve">
<value>TabControl</value>
</data>
<data name="SplitButton" xml:space="preserve">
<value>SplitButton</value>
</data>
<data name="Clock" xml:space="preserve">
<value>Clock</value>
</data>
<data name="StepBar" xml:space="preserve">
<value>StepBar</value>
</data>
<data name="PlsEnterKey" xml:space="preserve">
<value>Introduïu una paraula clau</value>
</data>
<data name="ComingSoon" xml:space="preserve">
<value>Pròximament</value>
</data>
<data name="Clear" xml:space="preserve">
<value>Esborrar</value>
</data>
<data name="DragHere" xml:space="preserve">
<value>Arrossega aquí</value>
</data>
<data name="UploadFile" xml:space="preserve">
<value>Penja el document</value>
</data>
<data name="Recommendation" xml:space="preserve">
<value>Recomanació</value>
</data>
<data name="ShowInCurrentWindow" xml:space="preserve">
<value>Mostra a la finestra actual</value>
</data>
<data name="Click2Count" xml:space="preserve">
<value>Feu clic per comptar</value>
</data>
<data name="ShowRowNumber" xml:space="preserve">
<value>ShowRowNumber</value>
</data>
<data name="ChangeLangAsk" xml:space="preserve">
<value>Si es reinicia per canviar l'idioma?</value>
</data>
<data name="OpenNoNonClientAreaDragableWindow" xml:space="preserve">
<value>Obriu una finestra sense NonClientArea que es pot arrossegar</value>
</data>
<data name="OpenCustomMessageWindow" xml:space="preserve">
<value>obre la finestra de missatges personalitzats</value>
</data>
<data name="OpenCustomContentWindow" xml:space="preserve">
<value>obre la finestra de contingut personalitzat</value>
</data>
<data name="OpenMouseFollowWindow" xml:space="preserve">
<value>obriu la finestra de seguiment del ratolí</value>
</data>
<data name="Complete" xml:space="preserve">
<value>Completat</value>
</data>
<data name="Notification" xml:space="preserve">
<value>Notificació</value>
</data>
<data name="TextDialogWithTimer" xml:space="preserve">
<value>TextDialog amb temporitzador</value>
</data>
<data name="OpenNativeCommonWindow" xml:space="preserve">
<value>Obre la finestra comuna nativa</value>
</data>
<data name="SendNotification" xml:space="preserve">
<value>Enviar notificació</value>
</data>
<data name="OpenNavigationWindow" xml:space="preserve">
<value>Obre la finestra de navegació</value>
</data>
<data name="ColorPicker" xml:space="preserve">
<value>ColorPicker</value>
</data>
<data name="Success" xml:space="preserve">
<value>Èxit</value>
</data>
<data name="LangComment" xml:space="preserve">
<value>Cerca una cadena localitzada similar a "{0}".</value>
</data>
<data name="Warning" xml:space="preserve">
<value>Avís</value>
</data>
<data name="Title" xml:space="preserve">
<value>Títol</value>
</data>
<data name="OpenSprite" xml:space="preserve">
<value>Obrir sprite</value>
</data>
<data name="StaysOpen" xml:space="preserve">
<value>Es manté obert</value>
</data>
<data name="ResponsiveLayout" xml:space="preserve">
<value>Disseny responsiu</value>
</data>
<data name="ColumnOffset" xml:space="preserve">
<value>Desplaçament de columna</value>
</data>
<data name="HybridLayout" xml:space="preserve">
<value>Disseny híbrid</value>
</data>
<data name="ColumnSpacing" xml:space="preserve">
<value>Espai entre columnes</value>
</data>
<data name="ShowInMainWindow" xml:space="preserve">
<value>Mostra a la finestra principal</value>
</data>
<data name="ContentDemoStr" xml:space="preserve">
<value>Aquest és el contingut</value>
</data>
<data name="TitleDemoStr1" xml:space="preserve">
<value>Aquest és el títol</value>
</data>
<data name="OpenBlurWindow" xml:space="preserve">
<value>obriu la finestra borrosa</value>
</data>
<data name="OpenMessageWindow" xml:space="preserve">
<value>obre la finestra de missatge</value>
</data>
<data name="TitleDemoStr2" xml:space="preserve">
<value>Cal omplir aquest ítem</value>
</data>
<data name="TitleDemoStr3" xml:space="preserve">
<value>El títol es troba a l’esquerra</value>
</data>
<data name="SubTitle" xml:space="preserve">
<value>Subtítol</value>
</data>
<data name="OpenImageBrowser" xml:space="preserve">
<value>Feu clic per obrir el navegador d'imatges</value>
</data>
<data name="GrowlInfo" xml:space="preserve">
<value>Avui fa un bon dia ~~~</value>
</data>
<data name="GrowlSuccess" xml:space="preserve">
<value>El fitxer s'ha desat correctament!</value>
</data>
<data name="GrowlWarning" xml:space="preserve">
<value>L'espai en el disc aviat s'esgotarà!</value>
</data>
<data name="StartScreenshot" xml:space="preserve">
<value>Inicia la captura de pantalla</value>
</data>
<data name="GrowlFatal" xml:space="preserve">
<value>L'aplicació s'ha bloquejat</value>
</data>
<data name="Styles" xml:space="preserve">
<value>Estils</value>
</data>
<data name="GrowlAsk" xml:space="preserve">
<value>S'ha detectat una versió nova. Voleu actualitzar-la?</value>
</data>
<data name="TextDialogInControl" xml:space="preserve">
<value>TextDialog(In control)</value>
</data>
<data name="PushToTalk" xml:space="preserve">
<value>Premeu per parlar</value>
</data>
<data name="UploadStr" xml:space="preserve">
<value>Pujant; Pujant en progress</value>
</data>
<data name="GrowlError" xml:space="preserve">
<value>Connexió fallida. comproveu la vostra xarxa!</value>
</data>
<data name="Prev" xml:space="preserve">
<value>Anterior</value>
</data>
<data name="OpenCustomNonClientAreaWindow" xml:space="preserve">
<value>obre la finestra personalitzada de Non-client Area</value>
</data>
<data name="PracticalDemos" xml:space="preserve">
<value>Demostracions pràctiques</value>
</data>
<data name="PoptipPositionStr" xml:space="preserve">
<value>top-start;top;top-end;right-start;right;right-end;bottom-end;bottom;bottom-start;left-end;left;left-start</value>
</data>
<data name="Demo" xml:space="preserve">
<value>Demostració</value>
</data>
<data name="Doc_cn" xml:space="preserve">
<value>Document xinès</value>
</data>
<data name="Doc_en" xml:space="preserve">
<value>Document anglès</value>
</data>
<data name="OpenCommonWindow" xml:space="preserve">
<value>obre la finestra comuna</value>
</data>
<data name="Website" xml:space="preserve">
<value>Lloc web</value>
</data>
<data name="RightClickHere" xml:space="preserve">
<value>Feu clic dret aquí</value>
</data>
<data name="Remark" xml:space="preserve">
<value>Observació</value>
</data>
<data name="Type" xml:space="preserve">
<value>Tipus</value>
</data>
<data name="Morphing Animation" xml:space="preserve">
<value>Morphing Animation</value>
</data>
<data name="TransitioningContentControl" xml:space="preserve">
<value>TransitioningContentControl</value>
</data>
</root>
@@ -762,4 +762,7 @@
<data name="CheckComboBox" xml:space="preserve">
<value>CheckComboBox</value>
</data>
<data name="FlexPanel" xml:space="preserve">
<value>FlexPanel</value>
</data>
</root>
@@ -762,4 +762,7 @@
<data name="CheckComboBox" xml:space="preserve">
<value>CheckComboBox</value>
</data>
<data name="FlexPanel" xml:space="preserve">
<value>FlexPanel</value>
</data>
</root>
@@ -130,10 +130,10 @@
<value>C'est une belle journée aujourd'hui</value>
</data>
<data name="GrowlSuccess" xml:space="preserve">
<value>Fichier enregistré</value>
<value>Fichier enregistré!</value>
</data>
<data name="GrowlWarning" xml:space="preserve">
<value>Espace disque bientôt epuisé</value>
<value>Espace disque bientôt epuisé!</value>
</data>
<data name="GrowlError" xml:space="preserve">
<value>Erreur de connexion. Veuillez vérifier votre réseau !</value>
@@ -762,4 +762,7 @@
<data name="CheckComboBox" xml:space="preserve">
<value>CheckComboBox</value>
</data>
<data name="FlexPanel" xml:space="preserve">
<value>FlexPanel</value>
</data>
</root>
@@ -762,4 +762,7 @@
<data name="CheckComboBox" xml:space="preserve">
<value>CheckComboBox</value>
</data>
<data name="FlexPanel" xml:space="preserve">
<value>FlexPanel</value>
</data>
</root>
@@ -762,4 +762,7 @@
<data name="CheckComboBox" xml:space="preserve">
<value>CheckComboBox</value>
</data>
<data name="FlexPanel" xml:space="preserve">
<value>FlexPanel</value>
</data>
</root>
@@ -362,6 +362,7 @@
</data>
<data name="About" xml:space="preserve">
<value>关于</value>
</data>
<data name="Repository" xml:space="preserve">
<value>代码仓库</value>
@@ -762,4 +763,7 @@
<data name="CheckComboBox" xml:space="preserve">
<value>多选组合框</value>
</data>
<data name="FlexPanel" xml:space="preserve">
<value>弹性盒子</value>
</data>
</root>
@@ -762,4 +762,7 @@
<data name="CheckComboBox" xml:space="preserve">
<value>CheckComboBox</value>
</data>
<data name="FlexPanel" xml:space="preserve">
<value>FlexPanel</value>
</data>
</root>
@@ -762,4 +762,7 @@
<data name="CheckComboBox" xml:space="preserve">
<value>CheckComboBox</value>
</data>
<data name="FlexPanel" xml:space="preserve">
<value>FlexPanel</value>
</data>
</root>
@@ -99,7 +99,8 @@ namespace HandyControlDemo.Properties.Langs
OnPropertyChanged(nameof(Exit));
OnPropertyChanged(nameof(Expander));
OnPropertyChanged(nameof(Fatal));
OnPropertyChanged(nameof(FlipClock));
OnPropertyChanged(nameof(FlexPanel));
OnPropertyChanged(nameof(FlipClock));
OnPropertyChanged(nameof(FloatingBlock));
OnPropertyChanged(nameof(FlowDocument));
OnPropertyChanged(nameof(FlowDocumentPageViewer));
@@ -564,6 +565,11 @@ namespace HandyControlDemo.Properties.Langs
/// </summary>
public string Fatal => Lang.Fatal;
/// <summary>
/// 查找类似 弹性盒子 的本地化字符串。
/// </summary>
public string FlexPanel => Lang.FlexPanel;
/// <summary>
/// 查找类似 翻页时钟 的本地化字符串。
/// </summary>
@@ -1648,6 +1654,11 @@ namespace HandyControlDemo.Properties.Langs
/// </summary>
public static string Fatal = nameof(Fatal);
/// <summary>
/// 查找类似 弹性盒子 的本地化字符串。
/// </summary>
public static string FlexPanel = nameof(FlexPanel);
/// <summary>
/// 查找类似 翻页时钟 的本地化字符串。
/// </summary>
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 B

@@ -0,0 +1,50 @@
<UserControl x:Class="HandyControlDemo.UserControl.FlexPanelDemoCtl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
Background="{DynamicResource RegionBrush}"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:hc="https://handyorg.github.io/handycontrol">
<UserControl.Resources>
<Style x:Key="Border4FlexPanelDemoStyle" TargetType="Border">
<Setter Property="Width" Value="100"/>
<Setter Property="Background" Value="{DynamicResource SecondaryRegionBrush}"/>
<Setter Property="Margin" Value="10"/>
<Setter Property="CornerRadius" Value="10"/>
</Style>
</UserControl.Resources>
<hc:TransitioningContentControl>
<ScrollViewer>
<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}"/>
</Border>
<Border hc:FlexPanel.FlexBasis="200" Height="100" Style="{StaticResource Border4FlexPanelDemoStyle}">
<TextBlock Text="1" Style="{StaticResource TextBlockTitle}"/>
</Border>
<Border hc:FlexPanel.AlignSelf="FlexEnd" Height="50" Style="{StaticResource Border4FlexPanelDemoStyle}">
<TextBlock Text="2" Style="{StaticResource TextBlockTitle}"/>
</Border>
<Border Height="100" Style="{StaticResource Border4FlexPanelDemoStyle}">
<TextBlock Text="3" Style="{StaticResource TextBlockTitle}"/>
</Border>
<Border Height="50" Style="{StaticResource Border4FlexPanelDemoStyle}">
<TextBlock Text="4" Style="{StaticResource TextBlockTitle}"/>
</Border>
<Border Height="100" Style="{StaticResource Border4FlexPanelDemoStyle}">
<TextBlock Text="5" Style="{StaticResource TextBlockTitle}"/>
</Border>
<Border Height="50" Style="{StaticResource Border4FlexPanelDemoStyle}">
<TextBlock Text="6" Style="{StaticResource TextBlockTitle}"/>
</Border>
<Border Height="100" Style="{StaticResource Border4FlexPanelDemoStyle}">
<TextBlock Text="7" Style="{StaticResource TextBlockTitle}"/>
</Border>
<Border Height="50" Style="{StaticResource Border4FlexPanelDemoStyle}">
<TextBlock Text="8" Style="{StaticResource TextBlockTitle}"/>
</Border>
<Border Height="100" Style="{StaticResource Border4FlexPanelDemoStyle}">
<TextBlock Text="9" Style="{StaticResource TextBlockTitle}"/>
</Border>
</hc:FlexPanel>
</ScrollViewer>
</hc:TransitioningContentControl>
</UserControl>
@@ -0,0 +1,10 @@
namespace HandyControlDemo.UserControl
{
public partial class FlexPanelDemoCtl : IFull
{
public FlexPanelDemoCtl()
{
InitializeComponent();
}
}
}
@@ -129,6 +129,9 @@
<Button Tag="fr" Style="{StaticResource ButtonCustom}" Margin="0,10,0,0">
<Image Width="32" Source="/HandyControlDemo;component/Resources/Img/Flag/fr.png"/>
</Button>
<Button Tag="ca-ES" Style="{StaticResource ButtonCustom}" Margin="0,10,0,0">
<Image Width="32" Source="/HandyControlDemo;component/Resources/Img/Flag/ca-Es.png"/>
</Button>
</StackPanel>
<StackPanel Button.Click="ButtonLangs_OnClick" Margin="10,0,0,0">
<Button Tag="ko-KR" Style="{StaticResource ButtonCustom}">
@@ -512,6 +512,8 @@ namespace HandyControl.Controls
private void Dispatcher_Tick(object sender, EventArgs e)
{
if (_dispatcher == null) return;
if (ImageSource == null || !IsLoaded)
{
_dispatcher.Stop();
@@ -2,6 +2,7 @@
using System.ComponentModel;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Input;
using HandyControl.Data;
using HandyControl.Interactivity;
@@ -103,14 +104,6 @@ namespace HandyControl.Controls
CommandBindings.Add(new CommandBinding(ControlCommands.Clear, (s, e) => SelectedItems.Clear()));
}
private void Tags_OnClosed(object sender, RoutedEventArgs e)
{
if (e.OriginalSource is Tag tag && tag.Tag is CheckComboBoxItem checkComboBoxItem)
{
checkComboBoxItem.SetCurrentValue(IsSelectedProperty, false);
}
}
public override void OnApplyTemplate()
{
if (_selectAllItem != null)
@@ -161,6 +154,28 @@ namespace HandyControl.Controls
public Func<string, OperationResult<bool>> VerifyFunc { get; set; }
protected override void OnSelectionChanged(SelectionChangedEventArgs e)
{
UpdateTags();
VerifyData();
base.OnSelectionChanged(e);
}
protected override bool IsItemItsOwnContainerOverride(object item) => item is CheckComboBoxItem;
protected override DependencyObject GetContainerForItemOverride() => new CheckComboBoxItem();
protected override void OnDisplayMemberPathChanged(string oldDisplayMemberPath, string newDisplayMemberPath) => UpdateTags();
private void Tags_OnClosed(object sender, RoutedEventArgs e)
{
if (e.OriginalSource is Tag tag && tag.Tag is CheckComboBoxItem checkComboBoxItem)
{
checkComboBoxItem.SetCurrentValue(IsSelectedProperty, false);
}
}
private void SwitchAllItems(bool selected)
{
if (_isInternalAction) return;
@@ -182,18 +197,6 @@ namespace HandyControl.Controls
private void SelectAllItem_Unselected(object sender, RoutedEventArgs e) => SwitchAllItems(false);
protected override void OnSelectionChanged(SelectionChangedEventArgs e)
{
UpdateTags();
VerifyData();
base.OnSelectionChanged(e);
}
protected override bool IsItemItsOwnContainerOverride(object item) => item is CheckComboBoxItem;
protected override DependencyObject GetContainerForItemOverride() => new CheckComboBoxItem();
private void UpdateTags()
{
if (_panel == null || _isInternalAction) return;
@@ -214,9 +217,10 @@ namespace HandyControl.Controls
var tag = new Tag
{
Style = TagStyle,
Content = checkComboBoxItem.Content,
Tag = checkComboBoxItem
};
tag.SetBinding(ContentControl.ContentProperty, new Binding(DisplayMemberPath) { Source = item });
_panel.Children.Add(tag);
}
}
@@ -5,6 +5,7 @@ using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Data;
using System.Windows.Input;
using System.Windows.Media;
#if NET40
using System.Windows.Threading;
#endif
@@ -69,6 +70,13 @@ namespace HandyControl.Controls
{
_editableTextBox.TextChanged += EditableTextBox_TextChanged;
_editableTextBox.SetBinding(SelectionBrushProperty, new Binding(SelectionBrushProperty.Name) { Source = this });
#if !(NET40 || NET45 || NET451 || NET452 || NET46 || NET461 || NET462 || NET47 || NET471 || NET472)
_editableTextBox.SetBinding(SelectionTextBrushProperty, new Binding(SelectionTextBrushProperty.Name) { Source = this });
#endif
_editableTextBox.SetBinding(SelectionOpacityProperty, new Binding(SelectionOpacityProperty.Name) { Source = this });
_editableTextBox.SetBinding(CaretBrushProperty, new Binding(CaretBrushProperty.Name) { Source = this });
if (AutoComplete)
{
#if NET40
@@ -238,6 +246,122 @@ namespace HandyControl.Controls
}
}
/// <summary>
/// 是否自动完成输入
/// </summary>
public bool AutoComplete
{
get => (bool)GetValue(AutoCompleteProperty);
set => SetValue(AutoCompleteProperty, ValueBoxes.BooleanBox(value));
}
/// <summary>
/// 搜索文本
/// </summary>
internal static readonly DependencyProperty SearchTextProperty = DependencyProperty.Register(
"SearchText", typeof(string), typeof(ComboBox), new PropertyMetadata(default(string), OnSearchTextChanged));
private static void OnSearchTextChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var ctl = (ComboBox)d;
if (ctl._isAutoCompleteAction)
{
#if NET40
ctl._searchText = e.NewValue as string;
ctl._autoCompleteTimer.Stop();
ctl._autoCompleteTimer.Start();
#else
ctl.UpdateSearchItems(e.NewValue as string);
#endif
}
ctl._isAutoCompleteAction = true;
}
/// <summary>
/// 搜索文本
/// </summary>
internal string SearchText
{
get => (string)GetValue(SearchTextProperty);
set => SetValue(SearchTextProperty, value);
}
public static readonly DependencyProperty SelectionBrushProperty =
TextBoxBase.SelectionBrushProperty.AddOwner(typeof(ComboBox));
public Brush SelectionBrush
{
get => (Brush) GetValue(SelectionBrushProperty);
set => SetValue(SelectionBrushProperty, value);
}
#if !(NET40 || NET45 || NET451 || NET452 || NET46 || NET461 || NET462 || NET47 || NET471 || NET472)
public static readonly DependencyProperty SelectionTextBrushProperty =
TextBoxBase.SelectionTextBrushProperty.AddOwner(typeof(ComboBox));
public Brush SelectionTextBrush
{
get => (Brush)GetValue(SelectionTextBrushProperty);
set => SetValue(SelectionTextBrushProperty, value);
}
#endif
public static readonly DependencyProperty SelectionOpacityProperty =
TextBoxBase.SelectionOpacityProperty.AddOwner(typeof(ComboBox));
public double SelectionOpacity
{
get => (double)GetValue(SelectionOpacityProperty);
set => SetValue(SelectionOpacityProperty, value);
}
public static readonly DependencyProperty CaretBrushProperty =
TextBoxBase.CaretBrushProperty.AddOwner(typeof(ComboBox));
public Brush CaretBrush
{
get => (Brush)GetValue(CaretBrushProperty);
set => SetValue(CaretBrushProperty, value);
}
/// <summary>
/// 验证数据
/// </summary>
/// <returns></returns>
public virtual bool VerifyData()
{
OperationResult<bool> result;
var value = _editableTextBox == null ? Text : _editableTextBox.Text;
if (VerifyFunc != null)
{
result = VerifyFunc.Invoke(value);
}
else
{
if (!string.IsNullOrEmpty(value))
{
result = OperationResult.Success();
}
else if (InfoElement.GetNecessary(this))
{
result = OperationResult.Failed(Properties.Langs.Lang.IsNecessary);
}
else
{
result = OperationResult.Success();
}
}
IsError = !result.Data;
ErrorStr = result.Message;
return result.Data;
}
/// <summary>
/// 更新搜索的项目
/// </summary>
@@ -300,81 +424,5 @@ namespace HandyControl.Controls
SelectedValue = comboBoxItem.Content;
}
}
/// <summary>
/// 搜索文本
/// </summary>
internal static readonly DependencyProperty SearchTextProperty = DependencyProperty.Register(
"SearchText", typeof(string), typeof(ComboBox), new PropertyMetadata(default(string), OnSearchTextChanged));
private static void OnSearchTextChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var ctl = (ComboBox)d;
if (ctl._isAutoCompleteAction)
{
#if NET40
ctl._searchText = e.NewValue as string;
ctl._autoCompleteTimer.Stop();
ctl._autoCompleteTimer.Start();
#else
ctl.UpdateSearchItems(e.NewValue as string);
#endif
}
ctl._isAutoCompleteAction = true;
}
/// <summary>
/// 搜索文本
/// </summary>
internal string SearchText
{
get => (string)GetValue(SearchTextProperty);
set => SetValue(SearchTextProperty, value);
}
/// <summary>
/// 是否自动完成输入
/// </summary>
public bool AutoComplete
{
get => (bool)GetValue(AutoCompleteProperty);
set => SetValue(AutoCompleteProperty, ValueBoxes.BooleanBox(value));
}
/// <summary>
/// 验证数据
/// </summary>
/// <returns></returns>
public virtual bool VerifyData()
{
OperationResult<bool> result;
var value = _editableTextBox == null ? Text : _editableTextBox.Text;
if (VerifyFunc != null)
{
result = VerifyFunc.Invoke(value);
}
else
{
if (!string.IsNullOrEmpty(value))
{
result = OperationResult.Success();
}
else if (InfoElement.GetNecessary(this))
{
result = OperationResult.Failed(Properties.Langs.Lang.IsNecessary);
}
else
{
result = OperationResult.Success();
}
}
IsError = !result.Data;
ErrorStr = result.Message;
return result.Data;
}
}
}
@@ -2,7 +2,9 @@
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Data;
using System.Windows.Input;
using System.Windows.Media;
using HandyControl.Data;
using HandyControl.Interactivity;
@@ -36,6 +38,13 @@ namespace HandyControl.Controls
_textBox = GetTemplateChild(ElementTextBox) as System.Windows.Controls.TextBox;
if (_textBox != null)
{
_textBox.SetBinding(SelectionBrushProperty, new Binding(SelectionBrushProperty.Name) { Source = this });
#if !(NET40 || NET45 || NET451 || NET452 || NET46 || NET461 || NET462 || NET47 || NET471 || NET472)
_textBox.SetBinding(SelectionTextBrushProperty, new Binding(SelectionTextBrushProperty.Name) { Source = this });
#endif
_textBox.SetBinding(SelectionOpacityProperty, new Binding(SelectionOpacityProperty.Name) { Source = this });
_textBox.SetBinding(CaretBrushProperty, new Binding(CaretBrushProperty.Name) { Source = this });
_textBox.TextChanged += TextBox_TextChanged;
}
}
@@ -80,6 +89,46 @@ namespace HandyControl.Controls
set => SetValue(ShowClearButtonProperty, ValueBoxes.BooleanBox(value));
}
public static readonly DependencyProperty SelectionBrushProperty =
TextBoxBase.SelectionBrushProperty.AddOwner(typeof(DatePicker));
public Brush SelectionBrush
{
get => (Brush)GetValue(SelectionBrushProperty);
set => SetValue(SelectionBrushProperty, value);
}
#if !(NET40 || NET45 || NET451 || NET452 || NET46 || NET461 || NET462 || NET47 || NET471 || NET472)
public static readonly DependencyProperty SelectionTextBrushProperty =
TextBoxBase.SelectionTextBrushProperty.AddOwner(typeof(DatePicker));
public Brush SelectionTextBrush
{
get => (Brush)GetValue(SelectionTextBrushProperty);
set => SetValue(SelectionTextBrushProperty, value);
}
#endif
public static readonly DependencyProperty SelectionOpacityProperty =
TextBoxBase.SelectionOpacityProperty.AddOwner(typeof(DatePicker));
public double SelectionOpacity
{
get => (double)GetValue(SelectionOpacityProperty);
set => SetValue(SelectionOpacityProperty, value);
}
public static readonly DependencyProperty CaretBrushProperty =
TextBoxBase.CaretBrushProperty.AddOwner(typeof(DatePicker));
public Brush CaretBrush
{
get => (Brush)GetValue(CaretBrushProperty);
set => SetValue(CaretBrushProperty, value);
}
public virtual bool VerifyData()
{
OperationResult<bool> result;
@@ -4,7 +4,9 @@ using System.ComponentModel;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Data;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Threading;
using HandyControl.Data;
using HandyControl.Interactivity;
@@ -268,6 +270,46 @@ namespace HandyControl.Controls
set => SetValue(ShowClearButtonProperty, ValueBoxes.BooleanBox(value));
}
public static readonly DependencyProperty SelectionBrushProperty =
TextBoxBase.SelectionBrushProperty.AddOwner(typeof(DateTimePicker));
public Brush SelectionBrush
{
get => (Brush)GetValue(SelectionBrushProperty);
set => SetValue(SelectionBrushProperty, value);
}
#if !(NET40 || NET45 || NET451 || NET452 || NET46 || NET461 || NET462 || NET47 || NET471 || NET472)
public static readonly DependencyProperty SelectionTextBrushProperty =
TextBoxBase.SelectionTextBrushProperty.AddOwner(typeof(DateTimePicker));
public Brush SelectionTextBrush
{
get => (Brush)GetValue(SelectionTextBrushProperty);
set => SetValue(SelectionTextBrushProperty, value);
}
#endif
public static readonly DependencyProperty SelectionOpacityProperty =
TextBoxBase.SelectionOpacityProperty.AddOwner(typeof(DateTimePicker));
public double SelectionOpacity
{
get => (double)GetValue(SelectionOpacityProperty);
set => SetValue(SelectionOpacityProperty, value);
}
public static readonly DependencyProperty CaretBrushProperty =
TextBoxBase.CaretBrushProperty.AddOwner(typeof(DateTimePicker));
public Brush CaretBrush
{
get => (Brush)GetValue(CaretBrushProperty);
set => SetValue(CaretBrushProperty, value);
}
#endregion
#region Public Methods
@@ -316,31 +358,40 @@ namespace HandyControl.Controls
_dropDownButton.Click += DropDownButton_Click;
_dropDownButton.MouseLeave += DropDownButton_MouseLeave;
if (SelectedDateTime == null)
{
_textBox.Text = DateTime.Now.ToString(DateTimeFormat);
}
_textBox.KeyDown += TextBox_KeyDown;
_textBox.TextChanged += TextBox_TextChanged;
_textBox.LostFocus += TextBox_LostFocus;
if (SelectedDateTime == null)
if (_textBox != null)
{
if (!string.IsNullOrEmpty(_defaultText))
if (SelectedDateTime == null)
{
_textBox.Text = _defaultText;
SetSelectedDateTime();
_textBox.Text = DateTime.Now.ToString(DateTimeFormat);
}
_textBox.SetBinding(SelectionBrushProperty, new Binding(SelectionBrushProperty.Name) { Source = this });
#if !(NET40 || NET45 || NET451 || NET452 || NET46 || NET461 || NET462 || NET47 || NET471 || NET472)
_textBox.SetBinding(SelectionTextBrushProperty, new Binding(SelectionTextBrushProperty.Name) { Source = this });
#endif
_textBox.SetBinding(SelectionOpacityProperty, new Binding(SelectionOpacityProperty.Name) { Source = this });
_textBox.SetBinding(CaretBrushProperty, new Binding(CaretBrushProperty.Name) { Source = this });
_textBox.KeyDown += TextBox_KeyDown;
_textBox.TextChanged += TextBox_TextChanged;
_textBox.LostFocus += TextBox_LostFocus;
if (SelectedDateTime == null)
{
if (!string.IsNullOrEmpty(_defaultText))
{
_textBox.Text = _defaultText;
SetSelectedDateTime();
}
}
else
{
_textBox.Text = DateTimeToString(SelectedDateTime.Value);
}
}
else
{
_textBox.Text = DateTimeToString(SelectedDateTime.Value);
}
if (_originalSelectedDateTime == null)
{
_originalSelectedDateTime = DateTime.Now;
}
_originalSelectedDateTime ??= DateTime.Now;
SetCurrentValue(DisplayDateTimeProperty, _originalSelectedDateTime);
}
@@ -424,11 +475,7 @@ namespace HandyControl.Controls
{
if (value)
{
if (_isHandlerSuspended == null)
{
_isHandlerSuspended = new Dictionary<DependencyProperty, bool>(2);
}
_isHandlerSuspended ??= new Dictionary<DependencyProperty, bool>(2);
_isHandlerSuspended[property] = true;
}
else
@@ -1,7 +1,10 @@
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Data;
using System.Windows.Input;
using System.Windows.Media;
using HandyControl.Data;
using HandyControl.Interactivity;
using HandyControl.Tools;
@@ -85,6 +88,13 @@ namespace HandyControl.Controls
if (_textBox != null)
{
_textBox.SetBinding(SelectionBrushProperty, new Binding(SelectionBrushProperty.Name) { Source = this });
#if !(NET40 || NET45 || NET451 || NET452 || NET46 || NET461 || NET462 || NET47 || NET471 || NET472)
_textBox.SetBinding(SelectionTextBrushProperty, new Binding(SelectionTextBrushProperty.Name) { Source = this });
#endif
_textBox.SetBinding(SelectionOpacityProperty, new Binding(SelectionOpacityProperty.Name) { Source = this });
_textBox.SetBinding(CaretBrushProperty, new Binding(CaretBrushProperty.Name) { Source = this });
TextCompositionManager.AddPreviewTextInputHandler(_textBox, PreviewTextInputHandler);
_textBox.TextChanged += TextBox_TextChanged;
_textBox.PreviewKeyDown += TextBox_PreviewKeyDown;
@@ -389,6 +399,46 @@ namespace HandyControl.Controls
set => SetValue(IsReadOnlyProperty, ValueBoxes.BooleanBox(value));
}
public static readonly DependencyProperty SelectionBrushProperty =
TextBoxBase.SelectionBrushProperty.AddOwner(typeof(NumericUpDown));
public Brush SelectionBrush
{
get => (Brush)GetValue(SelectionBrushProperty);
set => SetValue(SelectionBrushProperty, value);
}
#if !(NET40 || NET45 || NET451 || NET452 || NET46 || NET461 || NET462 || NET47 || NET471 || NET472)
public static readonly DependencyProperty SelectionTextBrushProperty =
TextBoxBase.SelectionTextBrushProperty.AddOwner(typeof(NumericUpDown));
public Brush SelectionTextBrush
{
get => (Brush)GetValue(SelectionTextBrushProperty);
set => SetValue(SelectionTextBrushProperty, value);
}
#endif
public static readonly DependencyProperty SelectionOpacityProperty =
TextBoxBase.SelectionOpacityProperty.AddOwner(typeof(NumericUpDown));
public double SelectionOpacity
{
get => (double)GetValue(SelectionOpacityProperty);
set => SetValue(SelectionOpacityProperty, value);
}
public static readonly DependencyProperty CaretBrushProperty =
TextBoxBase.CaretBrushProperty.AddOwner(typeof(NumericUpDown));
public Brush CaretBrush
{
get => (Brush)GetValue(CaretBrushProperty);
set => SetValue(CaretBrushProperty, value);
}
public Func<string, OperationResult<bool>> VerifyFunc { get; set; }
public virtual bool VerifyData()
@@ -5,7 +5,10 @@ using System.Runtime.InteropServices;
using System.Security;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Data;
using System.Windows.Input;
using System.Windows.Media;
using HandyControl.Data;
using HandyControl.Tools;
using HandyControl.Tools.Extension;
@@ -256,6 +259,46 @@ namespace HandyControl.Controls
set => SetValue(ItemHeightProperty, value);
}
public static readonly DependencyProperty SelectionBrushProperty =
TextBoxBase.SelectionBrushProperty.AddOwner(typeof(PinBox));
public Brush SelectionBrush
{
get => (Brush)GetValue(SelectionBrushProperty);
set => SetValue(SelectionBrushProperty, value);
}
#if !(NET40 || NET45 || NET451 || NET452 || NET46 || NET461 || NET462 || NET47 || NET471 || NET472)
public static readonly DependencyProperty SelectionTextBrushProperty =
TextBoxBase.SelectionTextBrushProperty.AddOwner(typeof(PinBox));
public Brush SelectionTextBrush
{
get => (Brush)GetValue(SelectionTextBrushProperty);
set => SetValue(SelectionTextBrushProperty, value);
}
#endif
public static readonly DependencyProperty SelectionOpacityProperty =
TextBoxBase.SelectionOpacityProperty.AddOwner(typeof(PinBox));
public double SelectionOpacity
{
get => (double)GetValue(SelectionOpacityProperty);
set => SetValue(SelectionOpacityProperty, value);
}
public static readonly DependencyProperty CaretBrushProperty =
TextBoxBase.CaretBrushProperty.AddOwner(typeof(PinBox));
public Brush CaretBrush
{
get => (Brush)GetValue(CaretBrushProperty);
set => SetValue(CaretBrushProperty, value);
}
public static readonly RoutedEvent CompletedEvent =
EventManager.RegisterRoutedEvent("Completed", RoutingStrategy.Bubble,
typeof(RoutedEventHandler), typeof(PinBox));
@@ -281,7 +324,7 @@ namespace HandyControl.Controls
private System.Windows.Controls.PasswordBox CreatePasswordBox()
{
return new System.Windows.Controls.PasswordBox
var passwordBox = new System.Windows.Controls.PasswordBox
{
MaxLength = 1,
HorizontalContentAlignment = HorizontalAlignment.Center,
@@ -290,8 +333,18 @@ namespace HandyControl.Controls
Width = ItemWidth,
Height = ItemHeight,
Padding = default,
PasswordChar = PasswordChar
PasswordChar = PasswordChar,
Foreground = Foreground
};
passwordBox.SetBinding(SelectionBrushProperty, new Binding(SelectionBrushProperty.Name) { Source = this });
#if !(NET40 || NET45 || NET451 || NET452 || NET46 || NET461 || NET462 || NET47 || NET471 || NET472)
passwordBox.SetBinding(SelectionTextBrushProperty, new Binding(SelectionTextBrushProperty.Name) { Source = this });
#endif
passwordBox.SetBinding(SelectionOpacityProperty, new Binding(SelectionOpacityProperty.Name) { Source = this });
passwordBox.SetBinding(CaretBrushProperty, new Binding(CaretBrushProperty.Name) { Source = this });
return passwordBox;
}
public override void OnApplyTemplate()
@@ -4,7 +4,9 @@ using System.ComponentModel;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Data;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Threading;
using HandyControl.Data;
using HandyControl.Interactivity;
@@ -292,6 +294,46 @@ namespace HandyControl.Controls
set => SetValue(ShowClearButtonProperty, ValueBoxes.BooleanBox(value));
}
public static readonly DependencyProperty SelectionBrushProperty =
TextBoxBase.SelectionBrushProperty.AddOwner(typeof(TimePicker));
public Brush SelectionBrush
{
get => (Brush)GetValue(SelectionBrushProperty);
set => SetValue(SelectionBrushProperty, value);
}
#if !(NET40 || NET45 || NET451 || NET452 || NET46 || NET461 || NET462 || NET47 || NET471 || NET472)
public static readonly DependencyProperty SelectionTextBrushProperty =
TextBoxBase.SelectionTextBrushProperty.AddOwner(typeof(TimePicker));
public Brush SelectionTextBrush
{
get => (Brush)GetValue(SelectionTextBrushProperty);
set => SetValue(SelectionTextBrushProperty, value);
}
#endif
public static readonly DependencyProperty SelectionOpacityProperty =
TextBoxBase.SelectionOpacityProperty.AddOwner(typeof(TimePicker));
public double SelectionOpacity
{
get => (double)GetValue(SelectionOpacityProperty);
set => SetValue(SelectionOpacityProperty, value);
}
public static readonly DependencyProperty CaretBrushProperty =
TextBoxBase.CaretBrushProperty.AddOwner(typeof(TimePicker));
public Brush CaretBrush
{
get => (Brush)GetValue(CaretBrushProperty);
set => SetValue(CaretBrushProperty, value);
}
public static readonly DependencyProperty ClockProperty = DependencyProperty.Register(
"Clock", typeof(ClockBase), typeof(TimePicker), new FrameworkPropertyMetadata(default(Clock), FrameworkPropertyMetadataOptions.NotDataBindable, OnClockChanged));
@@ -398,31 +440,40 @@ namespace HandyControl.Controls
_dropDownButton.Click += DropDownButton_Click;
_dropDownButton.MouseLeave += DropDownButton_MouseLeave;
if (SelectedTime == null)
{
_textBox.Text = DateTime.Now.ToString(TimeFormat);
}
_textBox.KeyDown += TextBox_KeyDown;
_textBox.TextChanged += TextBox_TextChanged;
_textBox.LostFocus += TextBox_LostFocus;
if (SelectedTime == null)
if (_textBox != null)
{
if (!string.IsNullOrEmpty(_defaultText))
if (SelectedTime == null)
{
_textBox.Text = _defaultText;
SetSelectedTime();
_textBox.Text = DateTime.Now.ToString(TimeFormat);
}
_textBox.SetBinding(SelectionBrushProperty, new Binding(SelectionBrushProperty.Name) { Source = this });
#if !(NET40 || NET45 || NET451 || NET452 || NET46 || NET461 || NET462 || NET47 || NET471 || NET472)
_textBox.SetBinding(SelectionTextBrushProperty, new Binding(SelectionTextBrushProperty.Name) { Source = this });
#endif
_textBox.SetBinding(SelectionOpacityProperty, new Binding(SelectionOpacityProperty.Name) { Source = this });
_textBox.SetBinding(CaretBrushProperty, new Binding(CaretBrushProperty.Name) { Source = this });
_textBox.KeyDown += TextBox_KeyDown;
_textBox.TextChanged += TextBox_TextChanged;
_textBox.LostFocus += TextBox_LostFocus;
if (SelectedTime == null)
{
if (!string.IsNullOrEmpty(_defaultText))
{
_textBox.Text = _defaultText;
SetSelectedTime();
}
}
else
{
_textBox.Text = DateTimeToString((DateTime)SelectedTime);
}
}
else
{
_textBox.Text = DateTimeToString((DateTime)SelectedTime);
}
if (_originalSelectedTime == null)
{
_originalSelectedTime = DateTime.Now;
}
_originalSelectedTime ??= DateTime.Now;
SetCurrentValue(DisplayTimeProperty, _originalSelectedTime);
}
@@ -460,11 +511,7 @@ namespace HandyControl.Controls
{
if (value)
{
if (_isHandlerSuspended == null)
{
_isHandlerSuspended = new Dictionary<DependencyProperty, bool>(2);
}
_isHandlerSuspended ??= new Dictionary<DependencyProperty, bool>(2);
_isHandlerSuspended[property] = true;
}
else
@@ -7,7 +7,7 @@ using System.Windows.Data;
using System.Windows.Markup;
using System.Windows.Media.Effects;
namespace HandyControl.Media.Effects
namespace HandyControl.Controls
{
[DefaultProperty("Content")]
[ContentProperty("Content")]
@@ -270,6 +270,11 @@ namespace HandyControl.Controls
var ctl = (NotifyIcon)d;
ctl._icon = (ImageSource)e.NewValue;
ctl.OnIconChanged();
if (!string.IsNullOrEmpty(ctl._windowClassName) && !ctl.IsBlink && ctl.Visibility == Visibility.Visible)
{
ctl.UpdateIcon(true);
}
}
public ImageSource Icon
@@ -346,16 +351,15 @@ namespace HandyControl.Controls
private bool CheckMouseIsEnter()
{
var isTrue = FindNotifyIcon(out var rectNotify);
var isTrue = FindNotifyIcon(out var rectNotifyList);
if (!isTrue) return false;
InteropMethods.GetCursorPos(out var point);
if (point.X >= rectNotify.Left && point.X <= rectNotify.Right &&
point.Y >= rectNotify.Top && point.Y <= rectNotify.Bottom)
{
return true;
}
return false;
InteropMethods.GetCursorPos(out var point);
return rectNotifyList.Any(rectNotify =>
point.X >= rectNotify.Left &&
point.X <= rectNotify.Right &&
point.Y >= rectNotify.Top &&
point.Y <= rectNotify.Bottom);
}
private void DispatcherTimerPos_Tick(object sender, EventArgs e)
@@ -392,15 +396,14 @@ namespace HandyControl.Controls
hWnd = InteropMethods.FindWindowEx(hWnd, IntPtr.Zero, "TrayNotifyWnd", null);
if (hWnd != IntPtr.Zero)
{
hWnd = InteropMethods.FindWindowEx(hWnd, IntPtr.Zero, "SysPager", null);
if (hWnd != IntPtr.Zero)
{
hWnd = InteropMethods.FindWindowEx(hWnd, IntPtr.Zero, "ToolbarWindow32", null);
}
}
}
return hWnd;
}
@@ -415,22 +418,22 @@ namespace HandyControl.Controls
return hWnd;
}
private bool FindNotifyIcon(out InteropValues.RECT rect)
private bool FindNotifyIcon(out List<InteropValues.RECT> rectList)
{
var rectNotify = new InteropValues.RECT();
var rectNotifyList = new List<InteropValues.RECT>();
var hTrayWnd = FindTrayToolbarWindow();
var isTrue = FindNotifyIcon(hTrayWnd, ref rectNotify);
var isTrue = FindNotifyIcon(hTrayWnd, ref rectNotifyList);
if (!isTrue)
{
hTrayWnd = FindTrayToolbarOverFlowWindow();
isTrue = FindNotifyIcon(hTrayWnd, ref rectNotify);
isTrue = FindNotifyIcon(hTrayWnd, ref rectNotifyList);
}
rect = rectNotify;
rectList = rectNotifyList;
return isTrue;
}
//referenced from http://www.cnblogs.com/sczmzx/p/5158127.html
private bool FindNotifyIcon(IntPtr hTrayWnd, ref InteropValues.RECT rectNotify)
private bool FindNotifyIcon(IntPtr hTrayWnd, ref List<InteropValues.RECT> rectNotifyList)
{
InteropMethods.GetWindowRect(hTrayWnd, out var rectTray);
var count = (int)InteropMethods.SendMessage(hTrayWnd, InteropValues.TB_BUTTONCOUNT, 0, IntPtr.Zero);
@@ -444,23 +447,27 @@ namespace HandyControl.Controls
var btnData = new InteropValues.TBBUTTON();
var trayData = new InteropValues.TRAYDATA();
var handel = Process.GetCurrentProcess().Id;
var handle = Process.GetCurrentProcess().Id;
for (uint i = 0; i < count; i++)
{
InteropMethods.SendMessage(hTrayWnd, InteropValues.TB_GETBUTTON, i, address);
var isTrue = InteropMethods.ReadProcessMemory(hProcess, address, out btnData, Marshal.SizeOf(btnData), out _);
if (!isTrue) continue;
if (btnData.dwData == IntPtr.Zero)
{
btnData.dwData = btnData.iString;
}
InteropMethods.ReadProcessMemory(hProcess, btnData.dwData, out trayData, Marshal.SizeOf(trayData), out _);
InteropMethods.GetWindowThreadProcessId(trayData.hwnd, out var dwProcessId);
if (dwProcessId == (uint)handel)
if (dwProcessId == (uint)handle)
{
var rect = new InteropValues.RECT();
var lngRect = InteropMethods.VirtualAllocEx(hProcess, IntPtr.Zero, Marshal.SizeOf(typeof(Rect)), InteropValues.AllocationType.Commit, InteropValues.MemoryProtection.ReadWrite);
InteropMethods.SendMessage(hTrayWnd, InteropValues.TB_GETITEMRECT, i, lngRect);
InteropMethods.ReadProcessMemory(hProcess, lngRect, out rect, Marshal.SizeOf(rect), out _);
@@ -471,15 +478,14 @@ namespace HandyControl.Controls
var top = rectTray.Top + rect.Top;
var botton = rectTray.Top + rect.Bottom;
var right = rectTray.Left + rect.Right;
rectNotify = new InteropValues.RECT
rectNotifyList.Add(new InteropValues.RECT
{
Left = left,
Right = right,
Top = top,
Bottom = botton
};
});
isFind = true;
break;
}
}
InteropMethods.VirtualFreeEx(hProcess, address, 0x4096, InteropValues.FreeType.Decommit);
@@ -491,6 +497,8 @@ namespace HandyControl.Controls
private void OnIconChanged()
{
if (_windowClassName == null) return;
if (_icon != null)
{
IconHelper.GetIconHandlesFromImageSource(_icon, out _, out _iconHandle);
@@ -634,17 +642,14 @@ namespace HandyControl.Controls
if (ContextContent != null)
{
if (_contextContent == null)
_contextContent ??= new Popup
{
_contextContent = new Popup
{
Placement = PlacementMode.Mouse,
AllowsTransparency = true,
StaysOpen = false,
UseLayoutRounding = true,
SnapsToDevicePixels = true
};
}
Placement = PlacementMode.Mouse,
AllowsTransparency = true,
StaysOpen = false,
UseLayoutRounding = true,
SnapsToDevicePixels = true
};
_contextContent.Child = new ContentControl
{
@@ -76,7 +76,7 @@ namespace HandyControl.Controls
CurrentVerticalOffset = VerticalOffset;
}
_totalVerticalOffset = Math.Min(Math.Max(0, _totalVerticalOffset - e.Delta), ScrollableHeight);
ScrollToVerticalOffsetInternal(_totalVerticalOffset);
ScrollToVerticalOffsetWithAnimation(_totalVerticalOffset);
}
else
{
@@ -86,7 +86,7 @@ namespace HandyControl.Controls
CurrentHorizontalOffset = HorizontalOffset;
}
_totalHorizontalOffset = Math.Min(Math.Max(0, _totalHorizontalOffset - e.Delta), ScrollableWidth);
ScrollToHorizontalOffsetInternal(_totalHorizontalOffset);
ScrollToHorizontalOffsetWithAnimation(_totalHorizontalOffset);
}
}
@@ -97,10 +97,10 @@ namespace HandyControl.Controls
_totalVerticalOffset = VerticalOffset;
CurrentVerticalOffset = VerticalOffset;
}
ScrollToVerticalOffsetInternal(0, milliseconds);
ScrollToVerticalOffsetWithAnimation(0, milliseconds);
}
internal void ScrollToVerticalOffsetInternal(double offset, double milliseconds = 500)
public void ScrollToVerticalOffsetWithAnimation(double offset, double milliseconds = 500)
{
var animation = AnimationHelper.CreateAnimation(offset, milliseconds);
animation.EasingFunction = new CubicEase
@@ -118,7 +118,7 @@ namespace HandyControl.Controls
BeginAnimation(CurrentVerticalOffsetProperty, animation, HandoffBehavior.Compose);
}
internal void ScrollToHorizontalOffsetInternal(double offset, double milliseconds = 500)
public void ScrollToHorizontalOffsetWithAnimation(double offset, double milliseconds = 500)
{
var animation = AnimationHelper.CreateAnimation(offset, milliseconds);
animation.EasingFunction = new CubicEase
@@ -49,7 +49,14 @@ namespace HandyControl.Controls
{
if (Visibility != Visibility.Visible || _contentPresenter == null) return;
(TransitionStoryboard ?? ResourceHelper.GetResource<Storyboard>($"{TransitionMode.ToString()}Transition"))?.Begin(_contentPresenter);
if (TransitionStoryboard != null)
{
TransitionStoryboard.Begin(_contentPresenter);
}
else if (Application.Current != null)
{
ResourceHelper.GetResource<Storyboard>($"{TransitionMode.ToString()}Transition")?.Begin(_contentPresenter);
}
}
public override void OnApplyTemplate()
@@ -73,4 +80,4 @@ namespace HandyControl.Controls
}
}
}
}
}
@@ -0,0 +1,717 @@
using System;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using HandyControl.Data;
using HandyControl.Expression.Drawing;
using HandyControl.Tools;
using HandyControl.Tools.Extension;
namespace HandyControl.Controls
{
public class FlexPanel : Panel
{
private UVSize _uvConstraint;
private int _lineCount;
private readonly List<FlexItemInfo> _orderList = new List<FlexItemInfo>();
#region Item
public static readonly DependencyProperty OrderProperty = DependencyProperty.RegisterAttached(
"Order", typeof(int), typeof(FlexPanel),
new FrameworkPropertyMetadata(ValueBoxes.Int0Box, OnItemPropertyChanged));
public static void SetOrder(DependencyObject element, int value)
=> element.SetValue(OrderProperty, value);
public static int GetOrder(DependencyObject element)
=> (int)element.GetValue(OrderProperty);
public static readonly DependencyProperty FlexGrowProperty = DependencyProperty.RegisterAttached(
"FlexGrow", typeof(double), typeof(FlexPanel),
new FrameworkPropertyMetadata(ValueBoxes.Double0Box, OnItemPropertyChanged),
ValidateHelper.IsInRangeOfPosDoubleIncludeZero);
public static void SetFlexGrow(DependencyObject element, double value)
=> element.SetValue(FlexGrowProperty, value);
public static double GetFlexGrow(DependencyObject element)
=> (double)element.GetValue(FlexGrowProperty);
public static readonly DependencyProperty FlexShrinkProperty = DependencyProperty.RegisterAttached(
"FlexShrink", typeof(double), typeof(FlexPanel),
new FrameworkPropertyMetadata(ValueBoxes.Double1Box, OnItemPropertyChanged),
ValidateHelper.IsInRangeOfPosDoubleIncludeZero);
public static void SetFlexShrink(DependencyObject element, double value)
=> element.SetValue(FlexShrinkProperty, value);
public static double GetFlexShrink(DependencyObject element)
=> (double)element.GetValue(FlexShrinkProperty);
public static readonly DependencyProperty FlexBasisProperty = DependencyProperty.RegisterAttached(
"FlexBasis", typeof(double), typeof(FlexPanel),
new FrameworkPropertyMetadata(double.NaN, OnItemPropertyChanged));
public static void SetFlexBasis(DependencyObject element, double value)
=> element.SetValue(FlexBasisProperty, value);
public static double GetFlexBasis(DependencyObject element)
=> (double)element.GetValue(FlexBasisProperty);
public static readonly DependencyProperty AlignSelfProperty = DependencyProperty.RegisterAttached(
"AlignSelf", typeof(FlexItemAlignment), typeof(FlexPanel),
new FrameworkPropertyMetadata(default(FlexItemAlignment), OnItemPropertyChanged));
public static void SetAlignSelf(DependencyObject element, FlexItemAlignment value)
=> element.SetValue(AlignSelfProperty, value);
#endregion
#region Panel
public static FlexItemAlignment GetAlignSelf(DependencyObject element)
=> (FlexItemAlignment)element.GetValue(AlignSelfProperty);
public static readonly DependencyProperty FlexDirectionProperty = DependencyProperty.Register(
"FlexDirection", typeof(FlexDirection), typeof(FlexPanel),
new FrameworkPropertyMetadata(default(FlexDirection), FrameworkPropertyMetadataOptions.AffectsMeasure));
public FlexDirection FlexDirection
{
get => (FlexDirection)GetValue(FlexDirectionProperty);
set => SetValue(FlexDirectionProperty, value);
}
public static readonly DependencyProperty FlexWrapProperty = DependencyProperty.Register(
"FlexWrap", typeof(FlexWrap), typeof(FlexPanel),
new FrameworkPropertyMetadata(default(FlexWrap), FrameworkPropertyMetadataOptions.AffectsMeasure));
public FlexWrap FlexWrap
{
get => (FlexWrap)GetValue(FlexWrapProperty);
set => SetValue(FlexWrapProperty, value);
}
public static readonly DependencyProperty JustifyContentProperty = DependencyProperty.Register(
"JustifyContent", typeof(FlexContentJustify), typeof(FlexPanel),
new FrameworkPropertyMetadata(default(FlexContentJustify),
FrameworkPropertyMetadataOptions.AffectsMeasure));
public FlexContentJustify JustifyContent
{
get => (FlexContentJustify)GetValue(JustifyContentProperty);
set => SetValue(JustifyContentProperty, value);
}
public static readonly DependencyProperty AlignItemsProperty = DependencyProperty.Register(
"AlignItems", typeof(FlexItemsAlignment), typeof(FlexPanel),
new FrameworkPropertyMetadata(default(FlexItemsAlignment),
FrameworkPropertyMetadataOptions.AffectsMeasure));
public FlexItemsAlignment AlignItems
{
get => (FlexItemsAlignment)GetValue(AlignItemsProperty);
set => SetValue(AlignItemsProperty, value);
}
public static readonly DependencyProperty AlignContentProperty = DependencyProperty.Register(
"AlignContent", typeof(FlexContentAlignment), typeof(FlexPanel),
new FrameworkPropertyMetadata(default(FlexContentAlignment),
FrameworkPropertyMetadataOptions.AffectsMeasure));
public FlexContentAlignment AlignContent
{
get => (FlexContentAlignment)GetValue(AlignContentProperty);
set => SetValue(AlignContentProperty, value);
}
#endregion
private static void OnItemPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
if (d is UIElement element)
{
if (VisualTreeHelper.GetParent(element) is FlexPanel p)
{
p.InvalidateMeasure();
}
}
}
protected override Size MeasureOverride(Size constraint)
{
var curLineSize = new UVSize(FlexDirection);
var panelSize = new UVSize(FlexDirection);
_uvConstraint = new UVSize(FlexDirection, constraint);
var childConstraint = new Size(constraint.Width, constraint.Height);
_lineCount = 1;
var children = InternalChildren;
_orderList.Clear();
for (var i = 0; i < children.Count; i++)
{
var child = children[i];
if (child == null) continue;
_orderList.Add(new FlexItemInfo(i, GetOrder(child)));
}
_orderList.Sort();
for (var i = 0; i < children.Count; i++)
{
var child = children[_orderList[i].Index];
if (child == null) continue;
var flexBasis = GetFlexBasis(child);
if (!flexBasis.IsNaN())
{
child.SetCurrentValue(WidthProperty, flexBasis);
}
child.Measure(childConstraint);
var sz = new UVSize(FlexDirection, child.DesiredSize);
if (FlexWrap == FlexWrap.NoWrap) //continue to accumulate a line
{
curLineSize.U += sz.U;
curLineSize.V = Math.Max(sz.V, curLineSize.V);
}
else
{
if (MathHelper.GreaterThan(curLineSize.U + sz.U, _uvConstraint.U)) //need to switch to another line
{
panelSize.U = Math.Max(curLineSize.U, panelSize.U);
panelSize.V += curLineSize.V;
curLineSize = sz;
_lineCount++;
if (MathHelper.GreaterThan(sz.U, _uvConstraint.U)) //the element is wider then the constrint - give it a separate line
{
panelSize.U = Math.Max(sz.U, panelSize.U);
panelSize.V += sz.V;
curLineSize = new UVSize(FlexDirection);
_lineCount++;
}
}
else //continue to accumulate a line
{
curLineSize.U += sz.U;
curLineSize.V = Math.Max(sz.V, curLineSize.V);
}
}
}
//the last line size, if any should be added
panelSize.U = Math.Max(curLineSize.U, panelSize.U);
panelSize.V += curLineSize.V;
//go from UV space to W/H space
return new Size(panelSize.Width, panelSize.Height);
}
protected override Size ArrangeOverride(Size arrangeSize)
{
var uvFinalSize = new UVSize(FlexDirection, arrangeSize);
if (MathHelper.IsZero(uvFinalSize.U) || MathHelper.IsZero(uvFinalSize.V)) return arrangeSize;
// init status
var children = InternalChildren;
var lineIndex = 0;
var curLineSizeArr = new UVSize[_lineCount];
curLineSizeArr[0] = new UVSize(FlexDirection);
var lastInLineArr = new int[_lineCount];
for (var i = 0; i < _lineCount; i++)
{
lastInLineArr[i] = int.MaxValue;
}
// calculate line max U space
for (var i = 0; i < children.Count; i++)
{
var child = children[_orderList[i].Index];
if (child == null) continue;
var sz = new UVSize(FlexDirection, child.DesiredSize);
if (FlexWrap == FlexWrap.NoWrap)
{
curLineSizeArr[lineIndex].U += sz.U;
curLineSizeArr[lineIndex].V = Math.Max(sz.V, curLineSizeArr[lineIndex].V);
}
else
{
if (MathHelper.GreaterThan(curLineSizeArr[lineIndex].U + sz.U, uvFinalSize.U)) //need to switch to another line
{
lastInLineArr[lineIndex] = i;
lineIndex++;
curLineSizeArr[lineIndex] = sz;
if (MathHelper.GreaterThan(sz.U, uvFinalSize.U)) //the element is wider then the constraint - give it a separate line
{
//switch to next line which only contain one element
lastInLineArr[lineIndex] = i;
lineIndex++;
curLineSizeArr[lineIndex] = new UVSize(FlexDirection);
}
}
else //continue to accumulate a line
{
curLineSizeArr[lineIndex].U += sz.U;
curLineSizeArr[lineIndex].V = Math.Max(sz.V, curLineSizeArr[lineIndex].V);
}
}
}
// init status
var scaleU = Math.Min(_uvConstraint.U / uvFinalSize.U, 1);
var firstInLine = 0;
var wrapReverseAdd = 0;
var wrapReverseFlag = FlexWrap == FlexWrap.WrapReverse ? -1 : 1;
var accumulatedFlag = FlexWrap == FlexWrap.WrapReverse ? 1 : 0;
var itemsU = .0;
var accumulatedV = .0;
var freeV = uvFinalSize.V;
foreach (var flexSize in curLineSizeArr)
{
freeV -= flexSize.V;
}
var freeItemV = freeV;
// calculate status
var lineFreeVArr = new double[_lineCount];
switch (AlignContent)
{
case FlexContentAlignment.Stretch:
if (_lineCount > 1)
{
freeItemV = freeV / _lineCount;
for (var i = 0; i < _lineCount; i++)
{
lineFreeVArr[i] = freeItemV;
}
accumulatedV = FlexWrap == FlexWrap.WrapReverse ? uvFinalSize.V - curLineSizeArr[0].V - lineFreeVArr[0] : 0;
}
break;
case FlexContentAlignment.FlexStart:
wrapReverseAdd = FlexWrap == FlexWrap.WrapReverse ? 0 : 1;
if (_lineCount > 1)
{
accumulatedV = FlexWrap == FlexWrap.WrapReverse ? uvFinalSize.V - curLineSizeArr[0].V : 0;
}
else
{
wrapReverseAdd = 0;
}
break;
case FlexContentAlignment.FlexEnd:
wrapReverseAdd = FlexWrap == FlexWrap.WrapReverse ? 1 : 0;
if (_lineCount > 1)
{
accumulatedV = FlexWrap == FlexWrap.WrapReverse ? uvFinalSize.V - curLineSizeArr[0].V - freeV : freeV;
}
else
{
wrapReverseAdd = 0;
}
break;
case FlexContentAlignment.Center:
if (_lineCount > 1)
{
accumulatedV = FlexWrap == FlexWrap.WrapReverse ? uvFinalSize.V - curLineSizeArr[0].V - freeV * 0.5 : freeV * 0.5;
}
break;
case FlexContentAlignment.SpaceBetween:
if (_lineCount > 1)
{
freeItemV = freeV / (_lineCount - 1);
for (var i = 0; i < _lineCount - 1; i++)
{
lineFreeVArr[i] = freeItemV;
}
accumulatedV = FlexWrap == FlexWrap.WrapReverse ? uvFinalSize.V - curLineSizeArr[0].V : 0;
}
break;
case FlexContentAlignment.SpaceAround:
if (_lineCount > 1)
{
freeItemV = freeV / _lineCount * 0.5;
for (var i = 0; i < _lineCount - 1; i++)
{
lineFreeVArr[i] = freeItemV * 2;
}
accumulatedV = FlexWrap == FlexWrap.WrapReverse ? uvFinalSize.V - curLineSizeArr[0].V - freeItemV : freeItemV;
}
break;
}
// clear status
lineIndex = 0;
// arrange line
for (var i = 0; i < children.Count; i++)
{
var child = children[_orderList[i].Index];
if (child == null) continue;
var sz = new UVSize(FlexDirection, child.DesiredSize);
if (FlexWrap != FlexWrap.NoWrap)
{
if (i >= lastInLineArr[lineIndex]) //need to switch to another line
{
ArrangeLine(new FlexLineInfo
{
ItemsU = itemsU,
OffsetV = accumulatedV + freeItemV * wrapReverseAdd,
LineV = curLineSizeArr[lineIndex].V,
LineFreeV = freeItemV,
LineU = uvFinalSize.U,
ItemStartIndex = firstInLine,
ItemEndIndex = i,
ScaleU = scaleU
});
accumulatedV += (lineFreeVArr[lineIndex] + curLineSizeArr[lineIndex + accumulatedFlag].V) * wrapReverseFlag;
lineIndex++;
itemsU = 0;
if (i >= lastInLineArr[lineIndex]
) //the element is wider then the constraint - give it a separate line
{
//switch to next line which only contain one element
ArrangeLine(new FlexLineInfo
{
ItemsU = itemsU,
OffsetV = accumulatedV + freeItemV * wrapReverseAdd,
LineV = curLineSizeArr[lineIndex].V,
LineFreeV = freeItemV,
LineU = uvFinalSize.U,
ItemStartIndex = i,
ItemEndIndex = ++i,
ScaleU = scaleU
});
accumulatedV += (lineFreeVArr[lineIndex] + curLineSizeArr[lineIndex + accumulatedFlag].V) * wrapReverseFlag;
lineIndex++;
itemsU = 0;
}
firstInLine = i;
}
}
itemsU += sz.U;
}
// arrange the last line, if any
if (firstInLine < children.Count)
{
ArrangeLine(new FlexLineInfo
{
ItemsU = itemsU,
OffsetV = accumulatedV + freeItemV * wrapReverseAdd,
LineV = curLineSizeArr[lineIndex].V,
LineFreeV = freeItemV,
LineU = uvFinalSize.U,
ItemStartIndex = firstInLine,
ItemEndIndex = children.Count,
ScaleU = scaleU
});
}
return arrangeSize;
}
private void ArrangeLine(FlexLineInfo lineInfo)
{
var isHorizontal = FlexDirection == FlexDirection.Row || FlexDirection == FlexDirection.RowReverse;
var isReverse = FlexDirection == FlexDirection.RowReverse || FlexDirection == FlexDirection.ColumnReverse;
var itemCount = lineInfo.ItemEndIndex - lineInfo.ItemStartIndex;
var children = InternalChildren;
var lineFreeU = lineInfo.LineU - lineInfo.ItemsU;
var constraintFreeU = _uvConstraint.U - lineInfo.ItemsU;
// calculate initial u
var u = .0;
if (isReverse)
{
u = JustifyContent switch
{
FlexContentJustify.FlexStart => lineInfo.LineU,
FlexContentJustify.SpaceBetween => lineInfo.LineU,
FlexContentJustify.SpaceAround => lineInfo.LineU,
FlexContentJustify.FlexEnd => lineInfo.ItemsU,
FlexContentJustify.Center => (lineInfo.LineU + lineInfo.ItemsU) * 0.5,
_ => u
};
}
else
{
u = JustifyContent switch
{
FlexContentJustify.FlexEnd => lineFreeU,
FlexContentJustify.Center => lineFreeU * 0.5,
_ => u
};
}
u *= lineInfo.ScaleU;
// apply FlexGrow
var flexGrowUArr = new double[itemCount];
if (constraintFreeU > 0)
{
var ignoreFlexGrow = true;
var flexGrowSum = .0;
for (var i = 0; i < itemCount; i++)
{
var flexGrow = GetFlexGrow(children[_orderList[i].Index]);
ignoreFlexGrow &= MathHelper.IsVerySmall(flexGrow);
flexGrowUArr[i] = flexGrow;
flexGrowSum += flexGrow;
}
if (!ignoreFlexGrow)
{
var flexGrowItem = .0;
if (flexGrowSum > 0)
{
flexGrowItem = constraintFreeU / flexGrowSum;
lineInfo.ScaleU = 1;
lineFreeU = 0; //line free U was used up
}
for (var i = 0; i < itemCount; i++)
{
flexGrowUArr[i] *= flexGrowItem;
}
}
else
{
flexGrowUArr = new double[itemCount];
}
}
// apply FlexShrink
var flexShrinkUArr = new double[itemCount];
if (constraintFreeU < 0)
{
var ignoreFlexShrink = true;
var flexShrinkSum = .0;
for (var i = 0; i < itemCount; i++)
{
var flexShrink = GetFlexShrink(children[_orderList[i].Index]);
ignoreFlexShrink &= MathHelper.IsVerySmall(flexShrink - 1);
flexShrinkUArr[i] = flexShrink;
flexShrinkSum += flexShrink;
}
if (!ignoreFlexShrink)
{
var flexShrinkItem = .0;
if (flexShrinkSum > 0)
{
flexShrinkItem = constraintFreeU / flexShrinkSum;
lineInfo.ScaleU = 1;
lineFreeU = 0; //line free U was used up
}
for (var i = 0; i < itemCount; i++)
{
flexShrinkUArr[i] *= flexShrinkItem;
}
}
else
{
flexShrinkUArr = new double[itemCount];
}
}
// calculate offset u
var offsetUArr = new double[itemCount];
if (lineFreeU > 0)
{
if (JustifyContent == FlexContentJustify.SpaceBetween)
{
var freeItemU = lineFreeU / (itemCount - 1);
for (var i = 1; i < itemCount; i++)
{
offsetUArr[i] = freeItemU;
}
}
else if (JustifyContent == FlexContentJustify.SpaceAround)
{
var freeItemU = lineFreeU / itemCount * 0.5;
offsetUArr[0] = freeItemU;
for (var i = 1; i < itemCount; i++)
{
offsetUArr[i] = freeItemU * 2;
}
}
}
// arrange item
for (int i = lineInfo.ItemStartIndex, j = 0; i < lineInfo.ItemEndIndex; i++, j++)
{
var child = children[_orderList[i].Index];
if (child == null) continue;
var childSize = new UVSize(FlexDirection, isHorizontal
? new Size(child.DesiredSize.Width * lineInfo.ScaleU, child.DesiredSize.Height)
: new Size(child.DesiredSize.Width, child.DesiredSize.Height * lineInfo.ScaleU));
childSize.U += flexGrowUArr[j] + flexShrinkUArr[j];
if (isReverse)
{
u -= childSize.U;
u -= offsetUArr[j];
}
else
{
u += offsetUArr[j];
}
var v = lineInfo.OffsetV;
var alignSelf = GetAlignSelf(child);
var alignment = alignSelf == FlexItemAlignment.Auto ? AlignItems : (FlexItemsAlignment)alignSelf;
switch (alignment)
{
case FlexItemsAlignment.Stretch:
if (_lineCount == 1 && FlexWrap == FlexWrap.NoWrap)
{
childSize.V = lineInfo.LineV + lineInfo.LineFreeV;
}
else
{
childSize.V = lineInfo.LineV;
}
break;
case FlexItemsAlignment.FlexEnd:
v += lineInfo.LineV - childSize.V;
break;
case FlexItemsAlignment.Center:
v += (lineInfo.LineV - childSize.V) * 0.5;
break;
}
child.Arrange(isHorizontal ? new Rect(u, v, childSize.U, childSize.V) : new Rect(v, u, childSize.V, childSize.U));
if (!isReverse)
{
u += childSize.U;
}
}
}
private readonly struct FlexItemInfo : IComparable<FlexItemInfo>
{
public FlexItemInfo(int index, int order)
{
Index = index;
Order = order;
}
private int Order { get; }
public int Index { get; }
public int CompareTo(FlexItemInfo other) => Order.CompareTo(other.Order);
}
private struct FlexLineInfo
{
public double ItemsU { get; set; }
public double OffsetV { get; set; }
public double LineU { get; set; }
public double LineV { get; set; }
public double LineFreeV { get; set; }
public int ItemStartIndex { get; set; }
public int ItemEndIndex { get; set; }
public double ScaleU { get; set; }
}
private struct UVSize
{
public UVSize(FlexDirection direction, Size size)
{
U = V = 0d;
FlexDirection = direction;
Width = size.Width;
Height = size.Height;
}
public UVSize(FlexDirection direction)
{
U = V = 0d;
FlexDirection = direction;
}
public double U { get; set; }
public double V { get; set; }
private FlexDirection FlexDirection { get; }
public double Width
{
get => FlexDirection == FlexDirection.Row || FlexDirection == FlexDirection.RowReverse ? U : V;
private set
{
if (FlexDirection == FlexDirection.Row || FlexDirection == FlexDirection.RowReverse)
{
U = value;
}
else
{
V = value;
}
}
}
public double Height
{
get => FlexDirection == FlexDirection.Row || FlexDirection == FlexDirection.RowReverse ? V : U;
private set
{
if (FlexDirection == FlexDirection.Row || FlexDirection == FlexDirection.RowReverse)
{
V = value;
}
else
{
U = value;
}
}
}
}
}
}
@@ -307,11 +307,11 @@ namespace HandyControl.Controls
private void Menu_Closed(object sender, RoutedEventArgs e) => _buttonOverflow.IsChecked = false;
private void ButtonScrollRight_Click(object sender, RoutedEventArgs e) =>
_scrollViewerOverflow.ScrollToHorizontalOffsetInternal(Math.Min(
_scrollViewerOverflow.ScrollToHorizontalOffsetWithAnimation(Math.Min(
_scrollViewerOverflow.CurrentHorizontalOffset + TabItemWidth, _scrollViewerOverflow.ScrollableWidth));
private void ButtonScrollLeft_Click(object sender, RoutedEventArgs e) =>
_scrollViewerOverflow.ScrollToHorizontalOffsetInternal(Math.Max(
_scrollViewerOverflow.ScrollToHorizontalOffsetWithAnimation(Math.Max(
_scrollViewerOverflow.CurrentHorizontalOffset - TabItemWidth, 0));
private void ButtonOverflow_Click(object sender, RoutedEventArgs e)
@@ -0,0 +1,12 @@
namespace HandyControl.Data
{
public enum FlexContentAlignment
{
Stretch,
FlexStart,
FlexEnd,
Center,
SpaceBetween,
SpaceAround
}
}
@@ -0,0 +1,11 @@
namespace HandyControl.Data
{
public enum FlexContentJustify
{
FlexStart,
FlexEnd,
Center,
SpaceBetween,
SpaceAround
}
}
@@ -0,0 +1,10 @@
namespace HandyControl.Data
{
public enum FlexDirection
{
Row,
RowReverse,
Column,
ColumnReverse
}
}
@@ -0,0 +1,12 @@
namespace HandyControl.Data
{
public enum FlexItemAlignment
{
Auto,
FlexStart,
FlexEnd,
Center,
Baseline,
Stretch
}
}
@@ -0,0 +1,11 @@
namespace HandyControl.Data
{
public enum FlexItemsAlignment
{
Stretch,
FlexStart,
FlexEnd,
Center,
Baseline
}
}
@@ -0,0 +1,9 @@
namespace HandyControl.Data
{
public enum FlexWrap
{
NoWrap,
Wrap,
WrapReverse
}
}
@@ -45,6 +45,7 @@
<Compile Include="$(MSBuildThisFileDirectory)Controls\Other\Notification.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Controls\Other\Poptip.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Controls\Other\Watermark.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Controls\Panel\FlexPanel.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Controls\PropertyGrid\Editors\ImagePropertyEditor.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Controls\PropertyGrid\Editors\VerticalAlignmentPropertyEditor.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Controls\PropertyGrid\Editors\HorizontalAlignmentPropertyEditor.cs" />
@@ -74,6 +75,12 @@
<Compile Include="$(MSBuildThisFileDirectory)Controls\Text\SimpleText.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Controls\Window\GlowWindow.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Collections\DateTimeRangeComparer.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Data\Flex\FlexContentJustify.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Data\Flex\FlexContentAlignment.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Data\Flex\FlexItemAlignment.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Data\Flex\FlexItemsAlignment.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Data\Flex\FlexDirection.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Data\Flex\FlexWrap.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Data\Range\DateTimeRange.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Data\DisposableObject.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Data\Enum\EnumDataProvider.cs" />
@@ -107,7 +114,7 @@
<Compile Include="$(MSBuildThisFileDirectory)Media\Animation\LinearGeometryKeyFrame.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Media\Animation\ResolvedKeyFrameEntry.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Media\Animation\SplineGeometryKeyFrame.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Media\Effects\BlendEffectBox.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Controls\Other\BlendEffectBox.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Media\Effects\BrightnessEffect.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Media\Effects\ColorComplementEffect.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Media\Effects\ColorMatrixEffect.cs" />
@@ -1093,4 +1100,74 @@
<Folder Include="$(MSBuildThisFileDirectory)Data\Info\" />
<Folder Include="$(MSBuildThisFileDirectory)Tools\Interop\Handle\" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.AnimationPath.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Expression.Shapes.Arc.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.Badge.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.BlendEffectBox.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.ButtonGroup.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.CalendarWithClock.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.Card.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.Carousel.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.CheckComboBox.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.CirclePanel.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.CircleProgressBar.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.Clock.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.Col.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.ColorPicker.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.CompareSlider.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.ContextMenuButton.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.ContextMenuToggleButton.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.CoverFlow.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.CoverView.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.DashedBorder.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.DateTimePicker.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.Dialog.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.Divider.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.Drawer.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.FlexPanel.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.FlipClock.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.GifImage.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.GotoTop.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.Gravatar.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.Growl.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.HoneycombPanel.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.ImageBlock.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.ImageSelector.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.ImageViewer.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.ListClock.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.LoadingCircle.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.LoadingLine.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.Magnifier.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.NotifyIcon.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.NumericUpDown.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.OutlineText.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.Pagination.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.PinBox.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.Poptip.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.PreviewSlider.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.ProgressButton.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.PropertyGrid.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.RangeSlider.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.RelativePanel.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.Row.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.RunningBlock.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.SearchBar.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.Shield.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.SideMenu.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.SimplePanel.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.SimpleText.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.SplitButton.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.StepBar.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.Tag.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.TimeBar.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.TimePicker.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.ToggleBlock.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.Transfer.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.TransitioningContentControl.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.WaterfallPanel.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.Watermark.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.WatermarkTextBox.icon.bmp" />
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Icons\HandyControl.Controls.WaveProgressBar.icon.bmp" />
</ItemGroup>
</Project>
@@ -0,0 +1,243 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Confirm" xml:space="preserve">
<value>Confirmar</value>
</data>
<data name="Cancel" xml:space="preserve">
<value>Cancel·lar</value>
</data>
<data name="PngImg" xml:space="preserve">
<value>Imatge PNG</value>
</data>
<data name="ErrorImgPath" xml:space="preserve">
<value>Ruta d'imatge incorrecte</value>
</data>
<data name="ErrorImgSize" xml:space="preserve">
<value>Mida de la imatge incorrecta</value>
</data>
<data name="UnknownSize" xml:space="preserve">
<value>Mida desconeguda</value>
</data>
<data name="TooLarge" xml:space="preserve">
<value>Massa gran</value>
</data>
<data name="Unknown" xml:space="preserve">
<value>Desconegut</value>
</data>
<data name="Interval30s" xml:space="preserve">
<value>Interval de 30 segons</value>
</data>
<data name="Interval1m" xml:space="preserve">
<value>Interval de 1 minut</value>
</data>
<data name="Interval5m" xml:space="preserve">
<value>Interval de 5 minuts</value>
</data>
<data name="Interval10m" xml:space="preserve">
<value>Interval de 10 minuts</value>
</data>
<data name="Interval30m" xml:space="preserve">
<value>Interval de 30 minuts</value>
</data>
<data name="Interval1h" xml:space="preserve">
<value>Interval de 1 hora</value>
</data>
<data name="Interval2h" xml:space="preserve">
<value>Interval de 2 hores</value>
</data>
<data name="Clear" xml:space="preserve">
<value>Esborrar</value>
</data>
<data name="Close" xml:space="preserve">
<value>Tancar</value>
</data>
<data name="CloseAll" xml:space="preserve">
<value>Tancar tots</value>
</data>
<data name="CloseOther" xml:space="preserve">
<value>Tancar les altres</value>
</data>
<data name="Am" xml:space="preserve">
<value>Am</value>
</data>
<data name="Pm" xml:space="preserve">
<value>Pm</value>
</data>
<data name="Tip" xml:space="preserve">
<value>Preguntar</value>
</data>
<data name="IsNecessary" xml:space="preserve">
<value>No pot ser buit</value>
</data>
<data name="OutOfRange" xml:space="preserve">
<value>Fora de rang</value>
</data>
<data name="FormatError" xml:space="preserve">
<value>error de format</value>
</data>
<data name="CannotRegisterCompositeCommandInItself" xml:space="preserve">
<value>No es pot registrar la comanda composta en si mateixa</value>
</data>
<data name="CannotRegisterSameCommandTwice" xml:space="preserve">
<value>No es pot registrar la mateixa comanda dues vegades</value>
</data>
<data name="Yes" xml:space="preserve">
<value>Si</value>
</data>
<data name="No" xml:space="preserve">
<value>No</value>
</data>
<data name="ZoomIn" xml:space="preserve">
<value>Més zoom</value>
</data>
<data name="ZoomOut" xml:space="preserve">
<value>Menys zoom</value>
</data>
<data name="PreviousPage" xml:space="preserve">
<value>Pàgina anterior</value>
</data>
<data name="NextPage" xml:space="preserve">
<value>Pàgina següent</value>
</data>
<data name="PageMode" xml:space="preserve">
<value>Mode de pàgina</value>
</data>
<data name="TwoPageMode" xml:space="preserve">
<value>Mode de dues pàgines</value>
</data>
<data name="ScrollMode" xml:space="preserve">
<value>Mode de desplaçament</value>
</data>
<data name="Find" xml:space="preserve">
<value>Buscar</value>
</data>
<data name="LangComment" xml:space="preserve">
<value>Cerqueu una cadena localitzada similar a "{0}".</value>
</data>
<data name="Jump" xml:space="preserve">
<value>Saltar</value>
</data>
<data name="Miscellaneous" xml:space="preserve">
<value>General</value>
</data>
<data name="All" xml:space="preserve">
<value>Tots</value>
</data>
</root>
Binary file not shown.

After

Width:  |  Height:  |  Size: 822 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 822 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 824 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 822 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 824 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 824 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 822 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 824 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 824 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 824 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 824 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 822 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 824 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 822 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 824 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 824 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 824 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 824 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 824 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 822 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 824 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 824 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 824 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 822 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 824 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 822 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 824 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 822 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 824 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 824 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 824 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 824 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 822 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 822 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 824 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 824 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 824 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 824 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 822 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 824 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 822 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 822 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 824 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 822 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 824 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 822 B

Loaded 100 of 125 files, more files were not shown because too many files have changed in this diff. Show more