Merge branch 'master' of https://github.com/HandyOrg/HandyControl
No files matched your search
@@ -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,7 +1,7 @@
|
||||
---
|
||||
name: Feature request
|
||||
about: Suggest an idea for this project
|
||||
title: ''
|
||||
title: '[Feature request]'
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
|
||||
@@ -10,4 +10,5 @@ build/*
|
||||
!build/build.ps1
|
||||
!build/tools/
|
||||
build/tools/*
|
||||
!build/tools/packages.config
|
||||
!build/tools/packages.config
|
||||
!build/tools/VisualStudioToolsManifest.xml
|
||||
@@ -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&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
|
||||
|
||||

|
||||
|
||||
### CheckComboBox
|
||||
|
||||

|
||||
@@ -140,12 +147,12 @@ Step 4: Enjoy coding
|
||||
|
||||

|
||||
|
||||
## History publication
|
||||
|
||||
### GooeyEffect
|
||||
|
||||

|
||||
|
||||
## History publication
|
||||
|
||||
### GlowWindow
|
||||
|
||||

|
||||
|
||||
@@ -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&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
|
||||
|
||||

|
||||
|
||||
### CheckComboBox
|
||||
|
||||

|
||||
@@ -140,12 +147,12 @@ Step 4: Enjoy coding
|
||||
|
||||

|
||||
|
||||
## History publication
|
||||
|
||||
### GooeyEffect
|
||||
|
||||

|
||||
|
||||
## History publication
|
||||
|
||||
### GlowWindow
|
||||
|
||||

|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
After Width: | Height: | Size: 1.5 KiB |
|
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>
|
||||
|
After Width: | Height: | Size: 822 B |
|
After Width: | Height: | Size: 822 B |
|
After Width: | Height: | Size: 824 B |
|
After Width: | Height: | Size: 822 B |
|
After Width: | Height: | Size: 824 B |
|
After Width: | Height: | Size: 824 B |
|
After Width: | Height: | Size: 822 B |
|
After Width: | Height: | Size: 824 B |
|
After Width: | Height: | Size: 824 B |
|
After Width: | Height: | Size: 824 B |
|
After Width: | Height: | Size: 824 B |
|
After Width: | Height: | Size: 822 B |
|
After Width: | Height: | Size: 824 B |
|
After Width: | Height: | Size: 822 B |
|
After Width: | Height: | Size: 824 B |
|
After Width: | Height: | Size: 824 B |
|
After Width: | Height: | Size: 824 B |
|
After Width: | Height: | Size: 824 B |
|
After Width: | Height: | Size: 824 B |
|
After Width: | Height: | Size: 822 B |
|
After Width: | Height: | Size: 824 B |
|
After Width: | Height: | Size: 824 B |
|
After Width: | Height: | Size: 824 B |
|
After Width: | Height: | Size: 822 B |
|
After Width: | Height: | Size: 824 B |
|
After Width: | Height: | Size: 822 B |
|
After Width: | Height: | Size: 824 B |
|
After Width: | Height: | Size: 822 B |
|
After Width: | Height: | Size: 824 B |
|
After Width: | Height: | Size: 824 B |
|
After Width: | Height: | Size: 824 B |
|
After Width: | Height: | Size: 824 B |
|
After Width: | Height: | Size: 822 B |
|
After Width: | Height: | Size: 822 B |
|
After Width: | Height: | Size: 824 B |
|
After Width: | Height: | Size: 824 B |
|
After Width: | Height: | Size: 824 B |
|
After Width: | Height: | Size: 824 B |
|
After Width: | Height: | Size: 822 B |
|
After Width: | Height: | Size: 824 B |
|
After Width: | Height: | Size: 822 B |
|
After Width: | Height: | Size: 822 B |
|
After Width: | Height: | Size: 824 B |
|
After Width: | Height: | Size: 822 B |
|
After Width: | Height: | Size: 824 B |
|
After Width: | Height: | Size: 822 B |