Compare commits

...

127 Commits

Author SHA1 Message Date
Zhang Dian
45b1c9ab73 misc: bump version. 2025-03-28 14:53:53 +08:00
Zhang Dian
b780b793c8 Merge pull request #580 from irihitech/various
Config & Separate Semi.Avalonia.DataGrid package
2025-03-28 14:51:34 +08:00
Zhang Dian
de6dc99efb misc: update Overview avalonia icon color. 2025-03-19 13:33:30 +08:00
Zhang Dian
71b1c38ec4 misc: split DataGrid package. 2025-03-19 13:33:30 +08:00
Dong Bin
992017951b Merge pull request #572 from irihitech/tree
enhance TreeDataGrid
2025-03-18 22:43:08 +08:00
Zhang Dian
a796cb828b fix: fix CollapsedChevron icon issue. 2025-03-18 22:36:12 +08:00
Dong Bin
3b41331c67 Merge pull request #573 from snail1519/SolidButton_Custom
fix: Cannot set Background for default SolidButton theme
2025-03-18 21:49:10 +08:00
snail1519
a6711ab453 Update demo/Semi.Avalonia.Demo/Pages/ButtonDemo.axaml
Co-authored-by: Zhang Dian <54255897+zdpcdt@users.noreply.github.com>
2025-03-18 17:22:46 +08:00
snail1519
9eab777faa fix: Cannot set Background for default SolidButton theme 2025-03-18 11:34:40 +08:00
snail1519
ccdbf25004 Revert "fix: Cannot set Background for default SolidButton theme"
This reverts commit 054b6f59d5.
2025-03-18 11:30:03 +08:00
Zhang Dian
626dff4e69 feat: replace shared resources. 2025-03-18 10:24:40 +08:00
snail1519
054b6f59d5 fix: Cannot set Background for default SolidButton theme 2025-03-18 10:13:34 +08:00
Dong Bin
32687b1820 Create FUNDING.yml 2025-03-17 22:27:15 +08:00
Zhang Dian
d0b9f2d7c9 feat: enhance demo. 2025-03-17 14:10:05 +08:00
Zhang Dian
a671ee3fcb feat: replace color resources. 2025-03-17 14:10:05 +08:00
Zhang Dian
67c0db10ac feat: replace TreeDataGrid icon. 2025-03-17 14:10:05 +08:00
Zhang Dian
6cda56a830 feat: replace TreeView icon. 2025-03-17 14:08:22 +08:00
Dong Bin
d7690e464b Merge pull request #569 from irihitech/DataGrid
enhance DataGrid
2025-03-17 11:44:04 +08:00
Dong Bin
41811a84a9 Merge pull request #570 from irihitech/popup
Add some default font properties to PopupRoot
2025-03-15 19:18:16 +08:00
Zhang Dian
51abb760c9 feat: add some default font properties to PopupRoot. 2025-03-15 17:53:25 +08:00
Zhang Dian
f4c0e0d79a feat: replace shared resources. 2025-03-15 17:45:49 +08:00
Zhang Dian
c3c6ef629f misc: format codes. 2025-03-15 17:31:56 +08:00
Zhang Dian
de08d4a20f feat: replace icon. 2025-03-15 17:31:56 +08:00
Zhang Dian
9f432ddee6 feat: replace color resources. 2025-03-15 17:31:56 +08:00
Zhang Dian
21635cfb56 Merge pull request #565 from irihitech/scroll
ScrollBar Update
2025-03-14 16:39:01 +08:00
Zhang Dian
1d54b8ca4b feat: simplify ScrollViewerDemo. 2025-03-13 13:27:14 +08:00
Dong Bin
cf90be7cea feat: implementation for DataGrid. 2025-03-13 11:24:17 +08:00
Dong Bin
9aa24c066b feat: add new StyleClass to ScrollViewer: InsetContent 2025-03-13 11:15:50 +08:00
Dong Bin
d03e80d0ef Merge pull request #559 from irihitech/colorpicker
enhance Colorpicker
2025-03-13 11:04:43 +08:00
Dong Bin
5a1d87e163 Merge pull request #564 from irihitech/splitbutton
Fix the issue of HorizontalAlignment in SplitButton
2025-03-13 10:42:58 +08:00
Zhang Dian
86b2ad53fa fix: fix the issue of HorizontalAlignment in SplitButton. 2025-03-12 15:34:45 +08:00
Zhang Dian
7e33078f00 feat: support HorizontalAlignment="Stretch". 2025-03-12 13:59:32 +08:00
Vicente Penades
8022a80f0e Added spanish locale (#560)
* Added spanish locale

* fixed resource directory name

* Added spanish locale to demo

* using spanish local name
2025-03-11 23:11:14 +08:00
Zhang Dian
08552cf57e feat: some enhancements. 2025-03-11 17:01:28 +08:00
Dong Bin
ffbd8efef7 Merge pull request #552 from irihitech/typesetting
Replace kinds of Discrete Resources
2025-03-10 12:05:15 +08:00
Zhang Dian
ea182c07f0 feat: enhance ColorPicker & redesign demo. 2025-03-10 11:19:56 +08:00
Zhang Dian
776ac47a98 feat: ColorPicker icon. 2025-03-10 11:11:24 +08:00
Zhang Dian
af013bf938 feat: add AssemblyInfo. 2025-03-10 11:04:36 +08:00
Zhang Dian
2192aabf14 feat: enhance Thumb. 2025-03-10 10:54:19 +08:00
Zhang Dian
589221bf88 feat: index resources. 2025-03-09 22:19:32 +08:00
Zhang Dian
27b08caae7 misc: format ColorPicker xaml. 2025-03-07 18:53:49 +08:00
Zhang Dian
a6855ab7db feat: specify ContextMenu FontSize & FontWeight. 2025-03-07 18:14:06 +08:00
Zhang Dian
7a11884d97 Merge branch 'refs/heads/main' into typesetting
# Conflicts:
#	src/Semi.Avalonia/Controls/Calendar.axaml
#	src/Semi.Avalonia/Controls/TimePicker.axaml
2025-03-07 14:49:37 +08:00
Dong Bin
6488c42ea9 Merge pull request #553 from irihitech/various
fix various issues
2025-03-07 13:13:15 +08:00
Dong Bin
645876fe32 feat: stretch calendar header button. 2025-03-07 13:05:40 +08:00
Zhang Dian
74bd41a5c4 feat: enhance Previous & Next Button in Calendar. 2025-03-07 01:07:40 +08:00
Zhang Dian
4e48cde1e7 fix: specify Bold FontWeight to CalendarItemWeekDay. 2025-03-07 01:07:39 +08:00
Zhang Dian
90023554e8 misc: replace BorderThickness resource in TimePicker.axaml. 2025-03-07 01:07:38 +08:00
Zhang Dian
f30b2dc263 feat: adjust TopLevel MenuItem. 2025-03-07 01:07:34 +08:00
Zhang Dian
8094582911 fix: fix the Button in MenuScrollViewer Padding. 2025-03-07 01:07:33 +08:00
Zhang Dian
6dcc27acbc misc: add x:CompileBinding to AdornerLayer.axaml. 2025-03-07 01:06:33 +08:00
Zhang Dian
30f39d1383 feat: replace discrete Icon Size. 2025-03-06 23:35:31 +08:00
Zhang Dian
42233d272c feat: replace discrete CornerRadius. 2025-03-06 22:44:32 +08:00
Zhang Dian
38e4866531 feat: replace discrete FontWeight & specify DefaultFontWeight. 2025-03-06 22:16:23 +08:00
Zhang Dian
623ce798df feat: replace discrete FontSize. 2025-03-06 22:05:58 +08:00
Zhang Dian
19dcb020f1 misc: format Controls axaml. 2025-03-06 14:38:50 +08:00
Dong Bin
9081855ab1 Merge pull request #548 from snail1519/Large-label-vertical-alignment
fix: Large label vertical alignment is wrong
2025-03-06 13:13:24 +08:00
snail1519
3210269589 Rollback LabelTagLargePadding 2025-03-06 10:43:19 +08:00
snail1519
857e14368b fix last commit 2025-03-03 22:48:29 +08:00
snail1519
9ba6a22b6d fix: TagLabel Template issue 2025-03-03 22:16:34 +08:00
snail1519
251f884248 fix: Large label vertical alignment is wrong 2025-03-03 16:02:20 +08:00
Zhang Dian
37211a07e7 misc: bump version. 2025-02-28 17:22:31 +08:00
snail1519
3761a0a3fb fix: 修复ComboBox控件的PlaceholderForeground属性失效 (#543)
* fix: 修复ComboBox控件的PlaceholderForeground属性失效

* Update src/Semi.Avalonia/Themes/Dark/ComboBox.axaml

Co-authored-by: Zhang Dian <54255897+zdpcdt@users.noreply.github.com>

* Update src/Semi.Avalonia/Controls/ComboBox.axaml

Co-authored-by: Zhang Dian <54255897+zdpcdt@users.noreply.github.com>

* Update src/Semi.Avalonia/Themes/Light/ComboBox.axaml

Co-authored-by: Zhang Dian <54255897+zdpcdt@users.noreply.github.com>

* add: 对比色主题添加ComboBoxSelectorPlaceHolderForeground资源

* Revert "add: 对比色主题添加ComboBoxSelectorPlaceHolderForeground资源"

This reverts commit ba526e2cf9.

* add: 对比色主题添加ComboBoxSelectorPlaceHolderForeground资源

* Update src/Semi.Avalonia/Themes/HighContrast/ComboBox.axaml

Co-authored-by: Zhang Dian <54255897+zdpcdt@users.noreply.github.com>

---------

Co-authored-by: Zhang Dian <54255897+zdpcdt@users.noreply.github.com>
2025-02-26 10:45:24 +08:00
Zhang Dian
d906a7754c Merge pull request #542 from irihitech/scrollbar
Enhance ScrollViewer
2025-02-24 16:33:27 +08:00
Zhang Dian
d712f16642 feat: redesign ScrollViewer. 2025-02-14 23:12:27 +08:00
Dong Bin
947081302a feat: respect AllowAutoHide property. 2025-02-14 02:48:25 +08:00
Zhang Dian
28ce72dda9 feat: add Toggle SelectionMode to ListDemo. 2025-01-25 13:11:56 +08:00
Zhang Dian
78bc6c370b misc: bump version. 2025-01-24 10:46:03 +08:00
Dong Bin
2999beefac Merge pull request #540 from irihitech/variable
Unify tokens
2025-01-23 17:49:28 +08:00
Zhang Dian
77a05fb801 fix: fix AOT issue. 2025-01-23 17:39:19 +08:00
Zhang Dian
98dd72e9e3 misc: unify tokens. 2025-01-23 14:27:58 +08:00
Dong Bin
5a954fbca8 Merge pull request #539 from irihitech/variable
add Variable Demo & add copy button to PaletteDemo, HighContrastDemo
2025-01-22 18:20:34 +08:00
Zhang Dian
2da0733bdf feat: add Type column. 2025-01-22 16:29:56 +08:00
Zhang Dian
a5255bd032 feat: using DataGridCollectionView. 2025-01-22 15:54:16 +08:00
Zhang Dian
7530061ca4 misc: simplify DataGridDemoViewModel. 2025-01-22 15:54:15 +08:00
Zhang Dian
58c1c365a9 misc: revert DynamicResource Copy Button. 2025-01-21 23:50:22 +08:00
Zhang Dian
b5fe4d92a6 feat: add CopyText to HighContrastDemo. 2025-01-21 21:17:20 +08:00
Zhang Dian
5d0116ca8e feat: add DynamicResource CopyButton. 2025-01-21 20:32:37 +08:00
Zhang Dian
e981fe1c82 feat: add CopyText to PaletteDemo. 2025-01-21 20:24:21 +08:00
Zhang Dian
232ce71677 feat: add CopyText; 2025-01-21 20:18:08 +08:00
Zhang Dian
3fceec143d feat: enhance display value & add Copy button. 2025-01-21 19:36:16 +08:00
Zhang Dian
a99db733ed feat: add VariablesDemo. 2025-01-21 18:51:54 +08:00
Zhang Dian
bb928fb239 misc: simplify PaletteDemo. 2025-01-21 16:46:21 +08:00
Zhang Dian
371eb1b0d3 Merge pull request #537 from irihitech/caption
fix: fix potential issue when assigning invalid culture at runtime.
2025-01-20 20:58:20 +08:00
Zhang Dian
e56ef9d6ca misc: format codes. 2025-01-20 20:56:38 +08:00
Dong Bin
0eeba47e88 fix: fix potential issue when assigning invalid culture at runtime. 2025-01-20 18:47:41 +08:00
Dong Bin
96078a4115 Merge pull request #533 from irihitech/caption
Redesign CaptionButtons
2025-01-20 15:59:17 +08:00
Zhang Dian
26ef3ebf36 feat: specify IconButton Width & Height. 2025-01-19 23:35:50 +08:00
Dong Bin
8615783b61 Merge pull request #536 from irihitech/517
Fix actual Height
2025-01-19 17:12:12 +08:00
Zhang Dian
a0ca9fa4d0 fix: remove vertical Padding to fix the actual height of Button & Label. 2025-01-19 17:02:14 +08:00
Zhang Dian
e6ff4103ef fix: fix DatePicker Height. 2025-01-19 15:57:11 +08:00
Zhang Dian
2514d919f1 feat: redesign CaptionButtons. 2025-01-17 00:04:14 +08:00
Dong Bin
7a4b18e14a Merge pull request #530 from irihitech/high-contrast
Replace SolidColorBrush with StaticResource in high-contrast themes.
2025-01-13 17:17:38 +08:00
Zhang Dian
32e5e6b5f2 feat: replace SolidColorBrush with StaticResource in high-contrast themes. 2025-01-13 15:06:39 +08:00
Dong Bin
c253154e8f Add TrayIcon demo (#529)
* feat: add tray demo, change icon.

* feat: include favicon.
2025-01-13 12:37:55 +08:00
Dong Bin
8955c83fd9 Merge pull request #528 from irihitech/sync
Add RegisterFollowSystemTheme extension to Application
2025-01-07 15:08:11 +08:00
Zhang Dian
ea51867f0f feat: add RegisterFollowSystemTheme extension. 2025-01-07 12:45:14 +08:00
Dong Bin
8bb314984e Merge pull request #527 from irihitech/sync
Sync high-contrast themes under the Windows OS.
2025-01-06 22:37:00 +08:00
Zhang Dian
af6c52660d feat: sync high-contrast themes under the Windows OS. 2025-01-06 22:14:06 +08:00
Ruben
f6962657fa add german language support (#526)
added german culture support
2025-01-06 22:10:12 +08:00
Dong Bin
8df91270b1 Merge pull request #525 from irihitech/iconbutton
Enhance Icon related Button in demo
2025-01-04 20:34:54 +08:00
Zhang Dian
22f61cd836 fix: fix Menu RepeatButton MaxHeight value. 2025-01-04 12:49:10 +08:00
Zhang Dian
86848b548f feat: enhance Icon related Button in demo. 2025-01-04 12:48:45 +08:00
Zhang Dian
67fd0c4ca3 Merge pull request #520 from irihitech/locale
Add locale switch helper method
2025-01-03 17:18:43 +08:00
Dong Bin
263c65dd18 feat: simplify menu. 2025-01-03 15:51:51 +08:00
Dong Bin
26bb251d1e misc: reduce menu level. 2025-01-03 15:34:38 +08:00
Dong Bin
609dfbb5f0 feat: add simple locale switch. 2025-01-03 15:19:32 +08:00
Dong Bin
ad4bead1bd feat: add helper method to set locale resources. 2025-01-03 15:02:26 +08:00
Dong Bin
02444f7f16 Merge pull request #519 from irihitech/token
add `Variables` tokens and replace resources with them
2025-01-02 18:44:40 +08:00
Zhang Dian
06d9e35add misc: delete Base.axaml file. 2025-01-02 17:44:28 +08:00
Zhang Dian
1200c9a1c9 feat: index RadiusCardCornerRadius. 2025-01-02 16:58:12 +08:00
Zhang Dian
7600b187f4 feat: replace most resources in Shared folder with basic design tokens. 2025-01-02 14:31:47 +08:00
Zhang Dian
c55efe8835 misc: format shared codes. 2025-01-02 14:18:43 +08:00
Zhang Dian
1fe4df3716 feat: add basic Variables. 2025-01-02 14:18:43 +08:00
Zhang Dian
c22211df24 misc: using single-commit mode for gh-pages branch. 2025-01-01 16:39:24 +08:00
Zhang Dian
6459863395 misc: bump version. 2024-12-31 14:18:23 +08:00
Dong Bin
ab824fbcd2 Merge pull request #516 from irihitech/detail
fix Hex Color code in demo
2024-12-31 14:09:16 +08:00
Zhang Dian
e4adde26d2 fix: fix AOT issue. 2024-12-31 13:59:30 +08:00
Zhang Dian
057c31a311 feat: Color.ToString() -> real Hex. 2024-12-31 13:22:06 +08:00
Zhang Dian
ef8531d25d misc: rearrange demo theme resources. 2024-12-31 13:22:05 +08:00
Zhang Dian
c44b9a0173 fix: fix debug crash issue. 2024-12-31 13:22:05 +08:00
Zhang Dian
5715bba345 fix: add the missing basic color. 2024-12-31 13:21:30 +08:00
Zhang Dian
96b0999db1 fix: fix AOT issue. 2024-12-30 23:54:15 +08:00
Zhang Dian
ffd9b08acc fix: fix the issue of input value invalid. 2024-12-30 16:50:59 +08:00
Zhang Dian
64fd8a787a misc: enhance .csproj files. 2024-12-30 16:19:30 +08:00
Zhang Dian
4087b685e8 misc: resolve IDE problems. 2024-12-30 15:16:14 +08:00
Zhang Dian
70669406b2 misc: fix missing reference issue. 2024-12-30 14:06:19 +08:00
228 changed files with 2697 additions and 2287 deletions

15
.github/FUNDING.yml vendored Normal file
View File

@@ -0,0 +1,15 @@
# These are supported funding model platforms
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: # Replace with a single Patreon username
open_collective: semiavalonia
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
polar: # Replace with a single Polar username
buy_me_a_coffee: # Replace with a single Buy Me a Coffee username
thanks_dev: # Replace with a single thanks.dev username
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']

View File

@@ -36,6 +36,7 @@ jobs:
- name: Commit wwwroot to GitHub Pages - name: Commit wwwroot to GitHub Pages
uses: JamesIves/github-pages-deploy-action@v4.5.0 uses: JamesIves/github-pages-deploy-action@v4.5.0
with: with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} github_token: ${{ secrets.GITHUB_TOKEN }}
BRANCH: gh-pages branch: gh-pages
FOLDER: ${{ env.OUTPUT_PATH }} folder: ${{ env.OUTPUT_PATH }}
single-commit: true

View File

@@ -21,7 +21,7 @@ on:
Semi_Avalonia_DataGrid: Semi_Avalonia_DataGrid:
description: 'Pack Semi.Avalonia.DataGrid' description: 'Pack Semi.Avalonia.DataGrid'
required: true required: true
default: 'true' default: 'false'
type: boolean type: boolean
Semi_Avalonia_TreeDataGrid: Semi_Avalonia_TreeDataGrid:
description: 'Pack Semi.Avalonia.TreeDataGrid' description: 'Pack Semi.Avalonia.TreeDataGrid'

View File

@@ -16,7 +16,7 @@ on:
Semi_Avalonia_DataGrid: Semi_Avalonia_DataGrid:
description: 'Pack Semi.Avalonia.DataGrid' description: 'Pack Semi.Avalonia.DataGrid'
required: true required: true
default: 'true' default: 'false'
type: boolean type: boolean
Semi_Avalonia_TreeDataGrid: Semi_Avalonia_TreeDataGrid:
description: 'Pack Semi.Avalonia.TreeDataGrid' description: 'Pack Semi.Avalonia.TreeDataGrid'

View File

@@ -44,17 +44,17 @@ jobs:
Compress-Archive -Path $files.FullName -DestinationPath ./upload/Semi.Avalonia.Demo.Desktop.win-x64.zip Compress-Archive -Path $files.FullName -DestinationPath ./upload/Semi.Avalonia.Demo.Desktop.win-x64.zip
- name: Enable Native AOT in .csproj - name: Enable Native AOT in .csproj
if: ${{ github.event.inputs.include_aot == true }} if: ${{ github.event.inputs.include_aot == 'true' }}
run: | run: |
sed -i 's#<!--<PublishAot>true</PublishAot>-->#<PublishAot>true</PublishAot>#' demo/Semi.Avalonia.Demo.Desktop/Semi.Avalonia.Demo.Desktop.csproj sed -i 's#<!--<PublishAot>true</PublishAot>-->#<PublishAot>true</PublishAot>#' demo/Semi.Avalonia.Demo.Desktop/Semi.Avalonia.Demo.Desktop.csproj
sed -i 's#<!--<IncludeNativeLibrariesForSelfExtract>true</IncludeNativeLibrariesForSelfExtract>-->#<IncludeNativeLibrariesForSelfExtract>true</IncludeNativeLibrariesForSelfExtract>#' demo/Semi.Avalonia.Demo.Desktop/Semi.Avalonia.Demo.Desktop.csproj sed -i 's#<!--<IncludeNativeLibrariesForSelfExtract>true</IncludeNativeLibrariesForSelfExtract>-->#<IncludeNativeLibrariesForSelfExtract>true</IncludeNativeLibrariesForSelfExtract>#' demo/Semi.Avalonia.Demo.Desktop/Semi.Avalonia.Demo.Desktop.csproj
- name: Publish win-x64 AOT - name: Publish win-x64 AOT
if: ${{ github.event.inputs.include_aot == true }} if: ${{ github.event.inputs.include_aot == 'true' }}
run: dotnet publish demo/Semi.Avalonia.Demo.Desktop -r win-x64 -c Release -o ./publish/win64-aot run: dotnet publish demo/Semi.Avalonia.Demo.Desktop -r win-x64 -c Release -o ./publish/win64-aot
- name: Zip win-x64 AOT - name: Zip win-x64 AOT
if: ${{ github.event.inputs.include_aot == true }} if: ${{ github.event.inputs.include_aot == 'true' }}
run: | run: |
$files = Get-ChildItem -Path ./publish/win64-aot/* -Recurse -Exclude *.pdb $files = Get-ChildItem -Path ./publish/win64-aot/* -Recurse -Exclude *.pdb
Compress-Archive -Path $files.FullName -DestinationPath ./upload/Semi.Avalonia.Demo.Desktop.win-x64.NativeAOT.zip Compress-Archive -Path $files.FullName -DestinationPath ./upload/Semi.Avalonia.Demo.Desktop.win-x64.NativeAOT.zip
@@ -82,11 +82,11 @@ jobs:
run: zip -j -r ./upload/Semi.Avalonia.Demo.Desktop.linux-x64.zip ./publish/linux64 -x "*.pdb" run: zip -j -r ./upload/Semi.Avalonia.Demo.Desktop.linux-x64.zip ./publish/linux64 -x "*.pdb"
- name: Publish linux-x64 DRM - name: Publish linux-x64 DRM
if: ${{ github.event.inputs.include_drm == true }} if: ${{ github.event.inputs.include_drm == 'true' }}
run: dotnet publish demo/Semi.Avalonia.Demo.Drm -r linux-x64 -c Release --sc /p:PublishSingleFile=true /p:IncludeNativeLibrariesForSelfExtract=true -o ./publish/drm run: dotnet publish demo/Semi.Avalonia.Demo.Drm -r linux-x64 -c Release --sc /p:PublishSingleFile=true /p:IncludeNativeLibrariesForSelfExtract=true -o ./publish/drm
- name: Zip linux-x64 DRM - name: Zip linux-x64 DRM
if: ${{ github.event.inputs.include_drm == true }} if: ${{ github.event.inputs.include_drm == 'true' }}
run: zip -j -r ./upload/Semi.Avalonia.Demo.Drm.linux-x64.zip ./publish/drm -x "*.pdb" run: zip -j -r ./upload/Semi.Avalonia.Demo.Drm.linux-x64.zip ./publish/drm -x "*.pdb"
- name: Upload a Build Artifact - name: Upload a Build Artifact

View File

@@ -20,9 +20,6 @@ jobs:
- name: Pack Semi.Avalonia.ColorPicker - name: Pack Semi.Avalonia.ColorPicker
run: dotnet pack ./src/Semi.Avalonia.ColorPicker -o ./nugets run: dotnet pack ./src/Semi.Avalonia.ColorPicker -o ./nugets
- name: Pack Semi.Avalonia.DataGrid
run: dotnet pack ./src/Semi.Avalonia.DataGrid -o ./nugets
- name: Upload a Build Artifact - name: Upload a Build Artifact
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v4
with: with:

View File

@@ -1,7 +1,7 @@
<Project> <Project>
<PropertyGroup> <PropertyGroup>
<Nullable>enable</Nullable> <AvaloniaVersion>11.2.5</AvaloniaVersion>
<AvaloniaVersion>11.2.2</AvaloniaVersion> <DataGridVersion>11.2.5</DataGridVersion>
<CommunityToolkitVersion>8.3.2</CommunityToolkitVersion> <CommunityToolkitVersion>8.4.0</CommunityToolkitVersion>
</PropertyGroup> </PropertyGroup>
</Project> </Project>

View File

@@ -1,13 +1,11 @@
using Avalonia; using System;
using Avalonia;
using Avalonia.Dialogs; using Avalonia.Dialogs;
using Avalonia.Media; using Avalonia.Media;
using System;
using System.Linq;
using System.Threading;
namespace Semi.Avalonia.Demo.Desktop; namespace Semi.Avalonia.Demo.Desktop;
class Program sealed class Program
{ {
// Initialization code. Don't use any Avalonia, third-party APIs or any // Initialization code. Don't use any Avalonia, third-party APIs or any
// SynchronizationContext-reliant code before AppMain is called: things aren't initialized // SynchronizationContext-reliant code before AppMain is called: things aren't initialized

View File

@@ -19,16 +19,14 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<TrimmerRootDescriptor Include="Roots.xml" /> <TrimmerRootDescriptor Include="Roots.xml"/>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Avalonia.Desktop" Version="$(AvaloniaVersion)" /> <PackageReference Include="Avalonia.Desktop" Version="$(AvaloniaVersion)"/>
<!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->
<PackageReference Condition="'$(Configuration)' == 'Debug'" Include="Avalonia.Diagnostics" Version="$(AvaloniaVersion)" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\Semi.Avalonia.Demo\Semi.Avalonia.Demo.csproj" /> <ProjectReference Include="..\Semi.Avalonia.Demo\Semi.Avalonia.Demo.csproj"/>
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@@ -7,7 +7,7 @@ using Avalonia.Dialogs;
namespace Semi.Avalonia.Demo.Drm; namespace Semi.Avalonia.Demo.Drm;
class Program sealed class Program
{ {
// Initialization code. Don't use any Avalonia, third-party APIs or any // Initialization code. Don't use any Avalonia, third-party APIs or any
// SynchronizationContext-reliant code before AppMain is called: things aren't initialized // SynchronizationContext-reliant code before AppMain is called: things aren't initialized

View File

@@ -19,17 +19,15 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<TrimmerRootDescriptor Include="Roots.xml" /> <TrimmerRootDescriptor Include="Roots.xml"/>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Avalonia.Desktop" Version="$(AvaloniaVersion)" /> <PackageReference Include="Avalonia.Desktop" Version="$(AvaloniaVersion)"/>
<!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.--> <PackageReference Include="Avalonia.LinuxFramebuffer" Version="$(AvaloniaVersion)"/>
<PackageReference Condition="'$(Configuration)' == 'Debug'" Include="Avalonia.Diagnostics" Version="$(AvaloniaVersion)" />
<PackageReference Include="Avalonia.LinuxFramebuffer" Version="$(AvaloniaVersion)" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\Semi.Avalonia.Demo\Semi.Avalonia.Demo.csproj" /> <ProjectReference Include="..\Semi.Avalonia.Demo\Semi.Avalonia.Demo.csproj"/>
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@@ -3,6 +3,7 @@
<TargetFramework>net8.0-browser</TargetFramework> <TargetFramework>net8.0-browser</TargetFramework>
<OutputType>Exe</OutputType> <OutputType>Exe</OutputType>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks> <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<Nullable>enable</Nullable>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 172 KiB

After

Width:  |  Height:  |  Size: 162 KiB

View File

@@ -6,6 +6,7 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="./app.css" /> <link rel="stylesheet" href="./app.css" />
<link rel="icon" type="image/x-icon" href="/favicon.ico">
</head> </head>
<body style="margin: 0; overflow: hidden"> <body style="margin: 0; overflow: hidden">

View File

@@ -2,13 +2,35 @@
x:Class="Semi.Avalonia.Demo.App" x:Class="Semi.Avalonia.Demo.App"
xmlns="https://github.com/avaloniaui" xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:semi="https://irihi.tech/semi"> x:CompileBindings="True"
x:DataType="viewModels:ApplicationViewModel"
xmlns:semi="https://irihi.tech/semi"
xmlns:viewModels="clr-namespace:Semi.Avalonia.Demo.ViewModels">
<Application.Styles> <Application.Styles>
<!-- You can still reference in old way. --> <!-- You can still reference in old way. -->
<!-- <StyleInclude Source="avares://Semi.Avalonia/Index.axaml" /> --> <!-- <StyleInclude Source="avares://Semi.Avalonia/Index.axaml" /> -->
<semi:SemiTheme Locale="zh-CN" /> <semi:SemiTheme Locale="zh-CN" />
<semi:SemiPopupAnimations/> <semi:SemiPopupAnimations />
<StyleInclude Source="avares://Semi.Avalonia.DataGrid/Index.axaml" /> <StyleInclude Source="avares://Semi.Avalonia.DataGrid/Index.axaml" />
<StyleInclude Source="avares://Semi.Avalonia.ColorPicker/Index.axaml" /> <StyleInclude Source="avares://Semi.Avalonia.ColorPicker/Index.axaml" />
</Application.Styles> </Application.Styles>
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceInclude
Source="Themes/_index.axaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
<TrayIcon.Icons>
<TrayIcons>
<TrayIcon Icon="/Assets/irihi.ico" MacOSProperties.IsTemplateIcon="true" ToolTipText="Semi Avalonia Demo">
<TrayIcon.Menu>
<NativeMenu>
<NativeMenuItem Header="Exit" Command="{Binding ExitCommand}" />
</NativeMenu>
</TrayIcon.Menu>
</TrayIcon>
</TrayIcons>
</TrayIcon.Icons>
</Application> </Application>

View File

@@ -2,6 +2,7 @@ using Avalonia;
using Avalonia.Controls.ApplicationLifetimes; using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Data.Core.Plugins; using Avalonia.Data.Core.Plugins;
using Avalonia.Markup.Xaml; using Avalonia.Markup.Xaml;
using Semi.Avalonia.Demo.ViewModels;
using Semi.Avalonia.Demo.Views; using Semi.Avalonia.Demo.Views;
namespace Semi.Avalonia.Demo; namespace Semi.Avalonia.Demo;
@@ -11,6 +12,7 @@ public partial class App : Application
public override void Initialize() public override void Initialize()
{ {
AvaloniaXamlLoader.Load(this); AvaloniaXamlLoader.Load(this);
this.DataContext = new ApplicationViewModel();
} }
public override void OnFrameworkInitializationCompleted() public override void OnFrameworkInitializationCompleted()
@@ -28,6 +30,7 @@ public partial class App : Application
break; break;
} }
this.RegisterFollowSystemTheme();
base.OnFrameworkInitializationCompleted(); base.OnFrameworkInitializationCompleted();
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 172 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 162 KiB

View File

@@ -0,0 +1,143 @@
using System;
using System.Collections.Generic;
namespace Semi.Avalonia.Demo.Constant;
public static class ColorTokens
{
public static IReadOnlyList<Tuple<string, string>> PrimaryTokens { get; } = new List<Tuple<string, string>>
{
new("SemiColorPrimary", "Primary"),
new("SemiColorPrimaryPointerover", "Primary Pointerover"),
new("SemiColorPrimaryActive", "Primary Active"),
new("SemiColorPrimaryDisabled", "Primary Disabled"),
new("SemiColorPrimaryLight", "Primary Light"),
new("SemiColorPrimaryLightPointerover", "Primary Light Pointerover"),
new("SemiColorPrimaryLightActive", "Primary Light Active"),
};
public static IReadOnlyList<Tuple<string, string>> SecondaryTokens { get; } = new List<Tuple<string, string>>
{
new("SemiColorSecondary", "Secondary"),
new("SemiColorSecondaryPointerover", "Secondary Pointerover"),
new("SemiColorSecondaryActive", "Secondary Active"),
new("SemiColorSecondaryDisabled", "Secondary Disabled"),
new("SemiColorSecondaryLight", "Secondary Light"),
new("SemiColorSecondaryLightPointerover", "Secondary Light Pointerover"),
new("SemiColorSecondaryLightActive", "Secondary Light Active"),
};
public static IReadOnlyList<Tuple<string, string>> TertiaryTokens { get; } = new List<Tuple<string, string>>
{
new("SemiColorTertiary", "Tertiary"),
new("SemiColorTertiaryPointerover", "Tertiary Pointerover"),
new("SemiColorTertiaryActive", "Tertiary Active"),
new("SemiColorTertiaryLight", "Tertiary Light"),
new("SemiColorTertiaryLightPointerover", "Tertiary Light Pointerover"),
new("SemiColorTertiaryLightActive", "Tertiary Light Active"),
};
public static IReadOnlyList<Tuple<string, string>> InformationTokens { get; } = new List<Tuple<string, string>>
{
new("SemiColorInformation", "Information"),
new("SemiColorInformationPointerover", "Information Pointerover"),
new("SemiColorInformationActive", "Information Active"),
new("SemiColorInformationDisabled", "Information Disabled"),
new("SemiColorInformationLight", "Information Light"),
new("SemiColorInformationLightPointerover", "Information Light Pointerover"),
new("SemiColorInformationLightActive", "Information Light Active"),
};
public static IReadOnlyList<Tuple<string, string>> SuccessTokens { get; } = new List<Tuple<string, string>>
{
new("SemiColorSuccess", "Success"),
new("SemiColorSuccessPointerover", "Success Pointerover"),
new("SemiColorSuccessActive", "Success Active"),
new("SemiColorSuccessDisabled", "Success Disabled"),
new("SemiColorSuccessLight", "Success Light"),
new("SemiColorSuccessLightPointerover", "Success Light Pointerover"),
new("SemiColorSuccessLightActive", "Success Light Active"),
};
public static IReadOnlyList<Tuple<string, string>> WarningTokens { get; } = new List<Tuple<string, string>>
{
new("SemiColorWarning", "Warning"),
new("SemiColorWarningPointerover", "Warning Pointerover"),
new("SemiColorWarningActive", "Warning Active"),
new("SemiColorWarningLight", "Warning Light"),
new("SemiColorWarningLightPointerover", "Warning Light Pointerover"),
new("SemiColorWarningLightActive", "Warning Light Active"),
};
public static IReadOnlyList<Tuple<string, string>> DangerTokens { get; } = new List<Tuple<string, string>>
{
new("SemiColorDanger", "Danger"),
new("SemiColorDangerPointerover", "Danger Pointerover"),
new("SemiColorDangerActive", "Danger Active"),
new("SemiColorDangerLight", "Danger Light"),
new("SemiColorDangerLightPointerover", "Danger Light Pointerover"),
new("SemiColorDangerLightActive", "Danger Light Active"),
};
public static IReadOnlyList<Tuple<string, string>> TextTokens { get; } = new List<Tuple<string, string>>
{
new("SemiColorText0", "Text 0"),
new("SemiColorText1", "Text 1"),
new("SemiColorText2", "Text 2"),
new("SemiColorText3", "Text 3"),
};
public static IReadOnlyList<Tuple<string, string>> LinkTokens { get; } = new List<Tuple<string, string>>
{
new("SemiColorLink", "Link"),
new("SemiColorLinkPointerover", "Link Pointerover"),
new("SemiColorLinkActive", "Link Active"),
new("SemiColorLinkVisited", "Link Visited"),
};
public static IReadOnlyList<Tuple<string, string>> BackgroundTokens { get; } = new List<Tuple<string, string>>
{
new("SemiColorBackground0", "Background 0"),
new("SemiColorBackground1", "Background 1"),
new("SemiColorBackground2", "Background 2"),
new("SemiColorBackground3", "Background 3"),
new("SemiColorBackground4", "Background 4"),
};
public static IReadOnlyList<Tuple<string, string>> FillTokens { get; } = new List<Tuple<string, string>>
{
new("SemiColorFill0", "Fill 0"),
new("SemiColorFill1", "Fill 1"),
new("SemiColorFill2", "Fill 2"),
};
public static IReadOnlyList<Tuple<string, string>> BorderTokens { get; } = new List<Tuple<string, string>>
{
new("SemiColorBorder", "Border"),
new("SemiColorFocusBorder", "Focus Border"),
};
public static IReadOnlyList<Tuple<string, string>> DisabledTokens { get; } = new List<Tuple<string, string>>
{
new("SemiColorDisabledText", "Disabled Text"),
new("SemiColorDisabledBorder", "Disabled Border"),
new("SemiColorDisabledBackground", "Disabled Background"),
new("SemiColorDisabledFill", "Disabled Fill"),
};
public static IReadOnlyList<Tuple<string, string>> OtherTokens { get; } = new List<Tuple<string, string>>
{
new("SemiColorWhite", "White"),
new("SemiColorBlack", "Black"),
new("SemiColorNavBackground", "Navigation Background"),
new("SemiColorOverlayBackground", "Overlay Background"),
new("SemiColorHighlightBackground", "Highlight Background"),
new("SemiColorHighlight", "Highlight Text"),
};
public static IReadOnlyList<Tuple<string, string>> ShadowTokens { get; } = new List<Tuple<string, string>>
{
new("SemiColorShadow", "Shadow"),
new("SemiShadowElevated", "Shadow Elevated"),
};
}

View File

@@ -1,8 +1,10 @@
using System.Globalization; using System.Globalization;
using System.Threading.Tasks;
using Avalonia; using Avalonia;
using Avalonia.Controls; using Avalonia.Controls;
using Avalonia.Controls.Primitives; using Avalonia.Controls.Primitives;
using Avalonia.Media; using Avalonia.Media;
using Semi.Avalonia.Demo.Converters;
namespace Semi.Avalonia.Demo.Controls; namespace Semi.Avalonia.Demo.Controls;
@@ -10,6 +12,7 @@ public class ColorDetailControl : TemplatedControl
{ {
public const string KEY_ResourceKey = "ResourceKey"; public const string KEY_ResourceKey = "ResourceKey";
public const string KEY_Hex = "Hex"; public const string KEY_Hex = "Hex";
public const string KEY_Hex2 = "Hex2";
public const string KEY_Opacity = "Opacity"; public const string KEY_Opacity = "Opacity";
public const string KEY_ColorResourceKey = "ColorResourceKey"; public const string KEY_ColorResourceKey = "ColorResourceKey";
@@ -51,6 +54,17 @@ public class ColorDetailControl : TemplatedControl
private set => SetAndRaise(HexProperty, ref _hex, value); private set => SetAndRaise(HexProperty, ref _hex, value);
} }
private string? _hex2;
public static readonly DirectProperty<ColorDetailControl, string?> Hex2Property =
AvaloniaProperty.RegisterDirect<ColorDetailControl, string?>(nameof(Hex2), o => o.Hex2);
public string? Hex2
{
get => _hex2;
set => SetAndRaise(Hex2Property, ref _hex2, value);
}
public static readonly DirectProperty<ColorDetailControl, string?> OpacityNumberProperty = public static readonly DirectProperty<ColorDetailControl, string?> OpacityNumberProperty =
AvaloniaProperty.RegisterDirect<ColorDetailControl, string?>(nameof(OpacityNumber), o => o.OpacityNumber); AvaloniaProperty.RegisterDirect<ColorDetailControl, string?>(nameof(OpacityNumber), o => o.OpacityNumber);
@@ -70,34 +84,30 @@ public class ColorDetailControl : TemplatedControl
private void OnBackgroundChanged(AvaloniaPropertyChangedEventArgs args) private void OnBackgroundChanged(AvaloniaPropertyChangedEventArgs args)
{ {
var color = args.GetNewValue<IBrush>(); var color = args.GetNewValue<IBrush>();
if (color is ISolidColorBrush b) if (color is ISolidColorBrush brush)
{ {
Hex = b.Color.ToString().ToUpperInvariant(); var hex1 = ColorConverter.ToHex.Convert(brush.Color, typeof(string), false, CultureInfo.InvariantCulture);
OpacityNumber = b.Opacity.ToString(CultureInfo.InvariantCulture); var hex2 = ColorConverter.ToHex.Convert(brush.Color, typeof(string), true, CultureInfo.InvariantCulture);
Hex = hex1 as string;
Hex2 = hex2 as string;
OpacityNumber = brush.Opacity.ToString(CultureInfo.InvariantCulture);
} }
} }
public async void Copy(object o) public async Task Copy(object o)
{ {
string? text = null; string? text = null;
if (o is string s) if (o is string s)
{ {
switch (s) text = s switch
{ {
case KEY_ResourceKey: KEY_ResourceKey => ResourceKey,
text = ResourceKey; KEY_Hex => Hex,
break; KEY_Hex2 => Hex2,
case KEY_Hex: KEY_Opacity => OpacityNumber,
text = Hex; KEY_ColorResourceKey => ColorResourceKey,
break; _ => string.Empty
case KEY_Opacity: };
text = OpacityNumber;
break;
case KEY_ColorResourceKey:
text = ColorResourceKey;
break;
default: text = string.Empty; break;
}
} }
var toplevel = TopLevel.GetTopLevel(this); var toplevel = TopLevel.GetTopLevel(this);

View File

@@ -0,0 +1,22 @@
using Avalonia.Data.Converters;
using Avalonia.Media;
namespace Semi.Avalonia.Demo.Converters;
public static class ColorConverter
{
public static readonly IValueConverter ToHex =
new FuncValueConverter<object, bool, string>(
(obj, withAlpha) =>
obj switch
{
Color color => withAlpha
? $"#{color.A:X2}{color.R:X2}{color.G:X2}{color.B:X2}"
: $"#{color.R:X2}{color.G:X2}{color.B:X2}",
ISolidColorBrush brush => withAlpha
? $"#{brush.Color.A:X2}{brush.Color.R:X2}{brush.Color.G:X2}{brush.Color.B:X2}"
: $"#{brush.Color.R:X2}{brush.Color.G:X2}{brush.Color.B:X2}",
_ => string.Empty
}
);
}

View File

@@ -2,8 +2,7 @@
x:Class="Semi.Avalonia.Demo.Pages.ColorPickerDemo" x:Class="Semi.Avalonia.Demo.Pages.ColorPickerDemo"
xmlns="https://github.com/avaloniaui" xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:colorPicker="clr-namespace:Semi.Avalonia.ColorPicker;assembly=Semi.Avalonia.ColorPicker" xmlns:semi="https://irihi.tech/semi"
xmlns:controls="using:Avalonia.Controls"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
d:DesignHeight="1450" d:DesignHeight="1450"
@@ -11,18 +10,15 @@
mc:Ignorable="d"> mc:Ignorable="d">
<ScrollViewer> <ScrollViewer>
<StackPanel Spacing="20"> <StackPanel Spacing="20">
<StackPanel <StackPanel Orientation="Horizontal" Spacing="20">
VerticalAlignment="Top"
Orientation="Horizontal"
Spacing="20">
<ColorView Name="Test" ColorSpectrumShape="Ring" /> <ColorView Name="Test" ColorSpectrumShape="Ring" />
<ColorView ColorSpectrumShape="Box" /> <ColorView ColorSpectrumShape="Box" />
<ColorView Palette="{DynamicResource SemiColorPalette}" /> <ColorView Palette="{DynamicResource SemiColorPalette}" />
</StackPanel> </StackPanel>
<StackPanel VerticalAlignment="Top" Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
<ColorView <ColorView
Name="SimpleColorViewTest" Name="SimpleColorViewTest"
HsvColor="hsv(120,11%,10%)" HsvColor="hsv(180,80%,70%)"
IsAlphaVisible="True" IsAlphaVisible="True"
Theme="{StaticResource SimpleColorView}" /> Theme="{StaticResource SimpleColorView}" />
<StackPanel> <StackPanel>
@@ -30,63 +26,55 @@
<TextBlock Text="{Binding #SimpleColorViewTest.Color}" /> <TextBlock Text="{Binding #SimpleColorViewTest.Color}" />
</StackPanel> </StackPanel>
</StackPanel> </StackPanel>
<StackPanel HorizontalAlignment="Left" Orientation="Horizontal"> <StackPanel Orientation="Horizontal" Spacing="8">
<ColorPicker Margin="8" ColorSpectrumShape="Ring"> <ColorPicker ColorSpectrumShape="Ring">
<ColorPicker.Palette> <ColorPicker.Palette>
<controls:FlatHalfColorPalette /> <FlatHalfColorPalette />
</ColorPicker.Palette> </ColorPicker.Palette>
</ColorPicker> </ColorPicker>
<ColorPicker Margin="8" ColorSpectrumShape="Box"> <ColorPicker ColorSpectrumShape="Box">
<ColorPicker.Palette> <ColorPicker.Palette>
<colorPicker:SemiColorLightPalette /> <semi:SemiColorLightPalette />
</ColorPicker.Palette> </ColorPicker.Palette>
</ColorPicker> </ColorPicker>
<ColorPicker <ColorPicker
Margin="8" Theme="{DynamicResource HexColorPicker}"
ColorSpectrumShape="Box" ColorSpectrumShape="Box">
Theme="{DynamicResource HexColorPicker}">
<ColorPicker.Palette> <ColorPicker.Palette>
<colorPicker:SemiColorLightPalette /> <semi:SemiColorLightPalette />
</ColorPicker.Palette> </ColorPicker.Palette>
</ColorPicker> </ColorPicker>
</StackPanel> </StackPanel>
<StackPanel HorizontalAlignment="Left" > <StackPanel HorizontalAlignment="Left">
<TextBlock Text="Use Style to customize button"></TextBlock> <TextBlock Text="Use Style to customize button" />
<ColorPicker <ColorPicker
Margin="8" Margin="8"
Width="32" MinWidth="32"
HsvColor="hsv(120,11%,10%)" HsvColor="hsv(180,80%,70%)">
>
<ColorPicker.Content> <ColorPicker.Content>
<Border <Border
Margin="1" Margin="1"
HorizontalAlignment="Stretch" Background="{Binding $parent[ColorPicker].HsvColor, Converter={StaticResource ToBrushConverter}}"
VerticalAlignment="Stretch"
Background="{Binding $parent[ColorPicker].HsvColor,
Converter={StaticResource ToBrushConverter}}"
CornerRadius="1" /> CornerRadius="1" />
</ColorPicker.Content> </ColorPicker.Content>
<ColorPicker.Styles> <ColorPicker.Styles>
<Style Selector="DropDownButton"> <Style Selector="DropDownButton">
<Setter Property="Padding" Value="0"/> <Setter Property="Padding" Value="0" />
<Style Selector="^ /template/ PathIcon"> <Style Selector="^ /template/ PathIcon">
<Setter Property="IsVisible" Value="False"/> <Setter Property="IsVisible" Value="False" />
</Style> </Style>
</Style> </Style>
</ColorPicker.Styles> </ColorPicker.Styles>
</ColorPicker> </ColorPicker>
</StackPanel> </StackPanel>
<StackPanel HorizontalAlignment="Left" Orientation="Horizontal">
<StackPanel Orientation="Horizontal" Spacing="8">
<ColorPicker <ColorPicker
Margin="8" Theme="{StaticResource SimpleColorPicker}"
HsvColor="hsv(120,11%,10%)" HsvColor="hsv(180,80%,70%)" />
Theme="{StaticResource SimpleColorPicker}" />
<ColorPicker <ColorPicker
Margin="8" Theme="{StaticResource HexSimpleColorPicker}"
HsvColor="hsv(120,11%,10%)" HsvColor="hsv(180,80%,70%)" />
Theme="{StaticResource HexSimpleColorPicker}" />
</StackPanel> </StackPanel>
</StackPanel> </StackPanel>
</ScrollViewer> </ScrollViewer>

View File

@@ -3,7 +3,6 @@
xmlns="https://github.com/avaloniaui" xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="using:Semi.Avalonia.Demo.Pages"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:vm="clr-namespace:Semi.Avalonia.Demo.ViewModels;assembly=Semi.Avalonia.Demo" xmlns:vm="clr-namespace:Semi.Avalonia.Demo.ViewModels;assembly=Semi.Avalonia.Demo"
d:DesignHeight="450" d:DesignHeight="450"
@@ -15,8 +14,9 @@
<TabItem Header="DataGrid"> <TabItem Header="DataGrid">
<Grid RowDefinitions="Auto, *"> <Grid RowDefinitions="Auto, *">
<StackPanel Grid.Row="0" Orientation="Horizontal"> <StackPanel Grid.Row="0" Orientation="Horizontal">
<ToggleSwitch Content="Disable" Name="DisableToggle" /> <ToggleSwitch Content="Enable" Name="enable" IsChecked="True" />
<ToggleSwitch Content="ScrollViewerHide" Name="ScrollViewerHide" /> <ToggleSwitch Content="Inset Content" Name="inset" />
<ToggleSwitch Content="ScrollBar Auto Hide" Name="autohide" />
</StackPanel> </StackPanel>
<DataGrid Grid.Row="1" <DataGrid Grid.Row="1"
Margin="8" Margin="8"
@@ -25,8 +25,9 @@
CanUserSortColumns="True" CanUserSortColumns="True"
HeadersVisibility="All" HeadersVisibility="All"
IsReadOnly="True" IsReadOnly="True"
ScrollViewer.AllowAutoHide="{Binding #ScrollViewerHide.IsChecked}" Classes.InsetContent="{Binding #inset.IsChecked}"
IsEnabled="{Binding #DisableToggle.IsChecked}" ScrollViewer.AllowAutoHide="{Binding #autohide.IsChecked}"
IsEnabled="{Binding #enable.IsChecked}"
ItemsSource="{Binding GridData1}"> ItemsSource="{Binding GridData1}">
<DataGrid.Columns> <DataGrid.Columns>
<DataGridTextColumn <DataGridTextColumn

View File

@@ -4,21 +4,15 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:vm="clr-namespace:Semi.Avalonia.Demo.ViewModels" xmlns:vm="clr-namespace:Semi.Avalonia.Demo.ViewModels"
xmlns:controls="clr-namespace:Semi.Avalonia.Demo.Controls" xmlns:controls="clr-namespace:Semi.Avalonia.Demo.Controls"
xmlns:cvt="clr-namespace:Semi.Avalonia.Demo.Converters"
xmlns:pages="clr-namespace:Semi.Avalonia.Demo.Pages"
mc:Ignorable="d" d:DesignWidth="1000" d:DesignHeight="1450" mc:Ignorable="d" d:DesignWidth="1000" d:DesignHeight="1450"
x:DataType="vm:HighContrastDemoViewModel" x:DataType="vm:HighContrastDemoViewModel"
x:CompileBindings="True"
x:Class="Semi.Avalonia.Demo.Pages.HighContrastDemo"> x:Class="Semi.Avalonia.Demo.Pages.HighContrastDemo">
<Design.DataContext> <Design.DataContext>
<vm:HighContrastDemoViewModel /> <vm:HighContrastDemoViewModel />
</Design.DataContext> </Design.DataContext>
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceInclude Source="../Themes/ToggleSwitch.axaml" />
<ResourceInclude Source="../Controls/ColorItemControl.axaml" />
<ResourceInclude Source="../Controls/ColorDetailControl.axaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
<SplitView <SplitView
Name="splitView" Name="splitView"
CompactPaneLength="50" CompactPaneLength="50"
@@ -32,7 +26,8 @@
Name="toggle" Name="toggle"
HorizontalAlignment="Right" HorizontalAlignment="Right"
IsChecked="True" IsChecked="True"
Theme="{DynamicResource SplitViewToggleSwitch}" /> Theme="{DynamicResource IconBorderlessToggleSwitch}"
Content="{StaticResource SemiIconSidebar}" />
<Border IsVisible="{Binding #splitView.IsPaneOpen}" Theme="{DynamicResource CardBorder}"> <Border IsVisible="{Binding #splitView.IsPaneOpen}" Theme="{DynamicResource CardBorder}">
<Panel> <Panel>
<TextBlock <TextBlock
@@ -285,7 +280,8 @@
<SelectableTextBlock <SelectableTextBlock
Margin="12 0" Margin="12 0"
VerticalAlignment="Center" VerticalAlignment="Center"
Text="{Binding Hex}" /> Text="{Binding Brush,
Converter={x:Static cvt:ColorConverter.ToHex},ConverterParameter={x:False}}" />
</DataTemplate> </DataTemplate>
</DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn> </DataGridTemplateColumn>
@@ -311,6 +307,18 @@
</DataTemplate> </DataTemplate>
</DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn> </DataGridTemplateColumn>
<DataGridTemplateColumn Width="100" Header="CopyText">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate DataType="vm:ColorResource">
<Button
Command="{Binding $parent[pages:HighContrastDemo].Copy}"
CommandParameter="{Binding CopyText}"
Theme="{DynamicResource IconBorderlessButton}"
Content="{StaticResource SemiIconCopy}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns> </DataGrid.Columns>
</DataGrid> </DataGrid>
</StackPanel> </StackPanel>

View File

@@ -1,4 +1,5 @@
using Avalonia.Controls; using System.Threading.Tasks;
using Avalonia.Controls;
using Semi.Avalonia.Demo.ViewModels; using Semi.Avalonia.Demo.ViewModels;
namespace Semi.Avalonia.Demo.Pages; namespace Semi.Avalonia.Demo.Pages;
@@ -10,4 +11,14 @@ public partial class HighContrastDemo : UserControl
InitializeComponent(); InitializeComponent();
this.DataContext = new HighContrastDemoViewModel(); this.DataContext = new HighContrastDemoViewModel();
} }
public async Task Copy(object? o)
{
if (o is null) return;
var toplevel = TopLevel.GetTopLevel(this);
if (toplevel?.Clipboard is { } c)
{
await c.SetTextAsync(o.ToString());
}
}
} }

View File

@@ -119,11 +119,11 @@
<StackPanel Spacing="20"> <StackPanel Spacing="20">
<TextBlock Text="Theme: CheckGroupListBox"/> <TextBlock Text="Theme: CheckGroupListBox"/>
<ListBox <ListBox
SelectionMode="Multiple" SelectionMode="Multiple,Toggle"
Theme="{DynamicResource CheckGroupListBox}" Theme="{DynamicResource CheckGroupListBox}"
ItemsSource="{Binding $parent[local:ListBoxDemo].Items}" /> ItemsSource="{Binding $parent[local:ListBoxDemo].Items}" />
<ListBox Theme="{DynamicResource CheckGroupListBox}" <ListBox Theme="{DynamicResource CheckGroupListBox}"
SelectionMode="Multiple" SelectionMode="Multiple,Toggle"
IsEnabled="False"> IsEnabled="False">
<ListBoxItem IsSelected="True">Avalonia</ListBoxItem> <ListBoxItem IsSelected="True">Avalonia</ListBoxItem>
<ListBoxItem>WPF</ListBoxItem> <ListBoxItem>WPF</ListBoxItem>
@@ -131,11 +131,11 @@
<TextBlock Text="Theme: CardCheckGroupListBox"/> <TextBlock Text="Theme: CardCheckGroupListBox"/>
<ListBox <ListBox
SelectionMode="Multiple" SelectionMode="Multiple,Toggle"
Theme="{DynamicResource CardCheckGroupListBox}" Theme="{DynamicResource CardCheckGroupListBox}"
ItemsSource="{Binding $parent[local:ListBoxDemo].Items}" /> ItemsSource="{Binding $parent[local:ListBoxDemo].Items}" />
<ListBox Theme="{DynamicResource CardCheckGroupListBox}" <ListBox Theme="{DynamicResource CardCheckGroupListBox}"
SelectionMode="Multiple" SelectionMode="Multiple,Toggle"
IsEnabled="False"> IsEnabled="False">
<ListBoxItem>Avalonia</ListBoxItem> <ListBoxItem>Avalonia</ListBoxItem>
<ListBoxItem IsSelected="True">WPF</ListBoxItem> <ListBoxItem IsSelected="True">WPF</ListBoxItem>

View File

@@ -41,9 +41,9 @@
<Image.Source> <Image.Source>
<DrawingImage> <DrawingImage>
<DrawingGroup> <DrawingGroup>
<GeometryDrawing Brush="#8B44AC" Geometry="M74.8535 85.8231C75.0263 85.8231 75.1954 85.8231 75.3679 85.8231C80.7347 85.8231 85.1439 81.8027 85.7614 76.6019L85.8357 41.7604C85.2255 18.5931 66.2537 0 42.9393 0C19.2399 0 0.02771 19.2122 0.02771 42.9116C0.02771 66.3573 18.8309 85.418 42.18 85.8231H74.8535Z" /> <GeometryDrawing Brush="#0D6EFD" Geometry="M74.8535 85.8231C75.0263 85.8231 75.1954 85.8231 75.3679 85.8231C80.7347 85.8231 85.1439 81.8027 85.7614 76.6019L85.8357 41.7604C85.2255 18.5931 66.2537 0 42.9393 0C19.2399 0 0.02771 19.2122 0.02771 42.9116C0.02771 66.3573 18.8309 85.418 42.18 85.8231H74.8535Z" />
<GeometryDrawing Brush="#F9F9FB" Geometry="M43.0585 14.6143C29.5513 14.6143 18.2555 24.082 15.4454 36.7432C18.1357 37.4975 20.1087 39.9679 20.1087 42.8992C20.1087 45.8305 18.1357 48.301 15.4454 49.0552C18.2555 61.7164 29.5513 71.1842 43.0585 71.1842C47.9754 71.1842 52.5993 69.9296 56.6276 67.723V70.9926H71.3435V44.0716C71.3569 43.7138 71.3435 43.2603 71.3435 42.8992C71.3435 27.2779 58.6799 14.6143 43.0585 14.6143ZM29.5096 42.8992C29.5096 35.4164 35.5757 29.3503 43.0585 29.3503C50.5414 29.3503 56.6074 35.4164 56.6074 42.8992C56.6074 50.3821 50.5414 56.4481 43.0585 56.4481C35.5757 56.4481 29.5096 50.3821 29.5096 42.8992Z" /> <GeometryDrawing Brush="White" Geometry="M43.0585 14.6143C29.5513 14.6143 18.2555 24.082 15.4454 36.7432C18.1357 37.4975 20.1087 39.9679 20.1087 42.8992C20.1087 45.8305 18.1357 48.301 15.4454 49.0552C18.2555 61.7164 29.5513 71.1842 43.0585 71.1842C47.9754 71.1842 52.5993 69.9296 56.6276 67.723V70.9926H71.3435V44.0716C71.3569 43.7138 71.3435 43.2603 71.3435 42.8992C71.3435 27.2779 58.6799 14.6143 43.0585 14.6143ZM29.5096 42.8992C29.5096 35.4164 35.5757 29.3503 43.0585 29.3503C50.5414 29.3503 56.6074 35.4164 56.6074 42.8992C56.6074 50.3821 50.5414 56.4481 43.0585 56.4481C35.5757 56.4481 29.5096 50.3821 29.5096 42.8992Z" />
<GeometryDrawing Brush="#F9F9FB" Geometry="M18.105 42.8805C18.105 45.3803 16.0785 47.4068 13.5787 47.4068C11.0789 47.4068 9.05237 45.3803 9.05237 42.8805C9.05237 40.3807 11.0789 38.3542 13.5787 38.3542C16.0785 38.3542 18.105 40.3807 18.105 42.8805Z" /> <GeometryDrawing Brush="White" Geometry="M18.105 42.8805C18.105 45.3803 16.0785 47.4068 13.5787 47.4068C11.0789 47.4068 9.05237 45.3803 9.05237 42.8805C9.05237 40.3807 11.0789 38.3542 13.5787 38.3542C16.0785 38.3542 18.105 40.3807 18.105 42.8805Z" />
</DrawingGroup> </DrawingGroup>
</DrawingImage> </DrawingImage>
</Image.Source> </Image.Source>
@@ -234,7 +234,7 @@
VerticalAlignment="Top" VerticalAlignment="Top"
Palette="{DynamicResource SemiColorPalette}" Palette="{DynamicResource SemiColorPalette}"
SelectedIndex="2" SelectedIndex="2"
Color="#8B44AC" /> Color="#0D6EFD" />
<StackPanel Width="300" Margin="8"> <StackPanel Width="300" Margin="8">
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
<Slider <Slider

View File

@@ -9,18 +9,18 @@ public partial class Overview : UserControl
InitializeComponent(); InitializeComponent();
} }
public string MainInstall { get; set; } = "dotnet add package Semi.Avalonia --version 11.2.1.2"; public string MainInstall { get; set; } = "dotnet add package Semi.Avalonia --version 11.2.1.6";
public string MainStyle { get; set; } = public string MainStyle { get; set; } =
""" """
<Application.Styles> <Application.Styles>
<!-- You can still reference in old way. --> <!-- You can still reference in old way. -->
<!-- <StyleInclude Source="avares://Semi.Avalonia/Themes/Index.axaml" /> --> <!-- <StyleInclude Source="avares://Semi.Avalonia/Index.axaml" /> -->
<semi:SemiTheme Locale="zh-cn" /> <semi:SemiTheme Locale="zh-CN" />
</Application.Styles> </Application.Styles>
"""; """;
public string ColorPickerInstall { get; set; } = "dotnet add package Semi.Avalonia.ColorPicker --version 11.2.1.2"; public string ColorPickerInstall { get; set; } = "dotnet add package Semi.Avalonia.ColorPicker --version 11.2.1.6";
public string ColorPickerStyle { get; set; } = public string ColorPickerStyle { get; set; } =
""" """
@@ -29,7 +29,7 @@ public partial class Overview : UserControl
</Application.Styles> </Application.Styles>
"""; """;
public string DataGridInstall { get; set; } = "dotnet add package Semi.Avalonia.DataGrid --version 11.2.1.2"; public string DataGridInstall { get; set; } = "dotnet add package Semi.Avalonia.DataGrid --version 11.2.1.6";
public string DataGridStyle { get; set; } = public string DataGridStyle { get; set; } =
""" """
@@ -38,7 +38,7 @@ public partial class Overview : UserControl
</Application.Styles> </Application.Styles>
"""; """;
public string TreeDataGridInstall { get; set; } = "dotnet add package Semi.Avalonia.TreeDataGrid --version 11.0.10.1"; public string TreeDataGridInstall { get; set; } = "dotnet add package Semi.Avalonia.TreeDataGrid --version 11.0.10.2";
public string TreeDataGridStyle { get; set; } = public string TreeDataGridStyle { get; set; } =
""" """

View File

@@ -14,17 +14,6 @@
<Design.DataContext> <Design.DataContext>
<viewModels:PaletteDemoViewModel /> <viewModels:PaletteDemoViewModel />
</Design.DataContext> </Design.DataContext>
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceInclude Source="../Themes/ToggleSwitch.axaml" />
<ResourceInclude Source="../Controls/ColorItemControl.axaml" />
<ResourceInclude Source="../Controls/ColorDetailControl.axaml" />
<ResourceInclude Source="../Controls/FunctionalColorGroupControl.axaml" />
<ResourceInclude Source="../Controls/ShadowGroupControl.axaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
<SplitView <SplitView
Name="splitView" Name="splitView"
CompactPaneLength="50" CompactPaneLength="50"
@@ -38,7 +27,8 @@
Name="toggle" Name="toggle"
HorizontalAlignment="Right" HorizontalAlignment="Right"
IsChecked="True" IsChecked="True"
Theme="{DynamicResource SplitViewToggleSwitch}" /> Theme="{DynamicResource IconBorderlessToggleSwitch}"
Content="{StaticResource SemiIconSidebar}" />
<Border IsVisible="{Binding #splitView.IsPaneOpen}" Theme="{DynamicResource CardBorder}"> <Border IsVisible="{Binding #splitView.IsPaneOpen}" Theme="{DynamicResource CardBorder}">
<Panel> <Panel>
<TextBlock <TextBlock

View File

@@ -1,8 +1,6 @@
using System.Threading.Tasks; using System.Threading.Tasks;
using Avalonia;
using Avalonia.Controls; using Avalonia.Controls;
using Avalonia.Controls.Primitives; using Avalonia.Controls.Primitives;
using Avalonia.Markup.Xaml;
using Avalonia.Threading; using Avalonia.Threading;
using Semi.Avalonia.Demo.ViewModels; using Semi.Avalonia.Demo.ViewModels;
@@ -16,13 +14,20 @@ public partial class PaletteDemo : UserControl
this.DataContext = new PaletteDemoViewModel(); this.DataContext = new PaletteDemoViewModel();
} }
protected override async void OnApplyTemplate(TemplateAppliedEventArgs e) protected override async void OnApplyTemplate(TemplateAppliedEventArgs e)
{ {
base.OnApplyTemplate(e); base.OnApplyTemplate(e);
PaletteDemoViewModel? vm = this.DataContext as PaletteDemoViewModel; PaletteDemoViewModel? vm = this.DataContext as PaletteDemoViewModel;
await Dispatcher.UIThread.InvokeAsync(() => await Dispatcher.UIThread.InvokeAsync(() => { vm?.InitializeResources(); });
}
public async Task Copy(object? o)
{
if (o is null) return;
var toplevel = TopLevel.GetTopLevel(this);
if (toplevel?.Clipboard is { } c)
{ {
vm?.InitializeResources(); await c.SetTextAsync(o.ToString());
}); }
} }
} }

View File

@@ -9,66 +9,22 @@
mc:Ignorable="d"> mc:Ignorable="d">
<ScrollViewer> <ScrollViewer>
<StackPanel HorizontalAlignment="Left" Spacing="20"> <StackPanel HorizontalAlignment="Left" Spacing="20">
<ToggleSwitch Name="inset" Content="Inset Content" />
<ToggleSwitch Name="autohide" Content="Allow AutoHide" />
<ScrollViewer <ScrollViewer
Width="200"
Height="200"
Margin="10" Margin="10"
Width="200" Height="200"
AllowAutoHide="{Binding #autohide.IsChecked}"
Classes.InsetContent="{Binding #inset.IsChecked}"
HorizontalScrollBarVisibility="Auto"> HorizontalScrollBarVisibility="Auto">
<Grid RowDefinitions="Auto,Auto" <UniformGrid
ColumnDefinitions="Auto,Auto" Rows="2" Columns="2"
Width="300" Height="300"> Width="300" Height="300">
<Rectangle <Rectangle Fill="{DynamicResource SemiYellow2}" />
Grid.Row="0" Grid.Column="0" <Rectangle Fill="{DynamicResource SemiBlue2}" />
Width="150" <Rectangle Fill="{DynamicResource SemiPink2}" />
Height="150" <Rectangle Fill="{DynamicResource SemiGreen2}" />
Fill="{DynamicResource SemiYellow2}" /> </UniformGrid>
<Rectangle
Grid.Row="0" Grid.Column="1"
Width="150"
Height="150"
Fill="{DynamicResource SemiBlue2}" />
<Rectangle
Grid.Row="1" Grid.Column="0"
Width="150"
Height="150"
Fill="{DynamicResource SemiPink2}" />
<Rectangle
Grid.Row="1" Grid.Column="1"
Width="150"
Height="150"
Fill="{DynamicResource SemiGreen2}" />
</Grid>
</ScrollViewer>
<ScrollViewer
Width="200"
Height="200"
Margin="10"
HorizontalScrollBarVisibility="Auto"
Theme="{DynamicResource StaticScrollViewer}">
<Grid RowDefinitions="Auto,Auto"
ColumnDefinitions="Auto,Auto"
Width="300" Height="300">
<Rectangle
Grid.Row="0" Grid.Column="0"
Width="150"
Height="150"
Fill="{DynamicResource SemiYellow2}" />
<Rectangle
Grid.Row="0" Grid.Column="1"
Width="150"
Height="150"
Fill="{DynamicResource SemiBlue2}" />
<Rectangle
Grid.Row="1" Grid.Column="0"
Width="150"
Height="150"
Fill="{DynamicResource SemiPink2}" />
<Rectangle
Grid.Row="1" Grid.Column="1"
Width="150"
Height="150"
Fill="{DynamicResource SemiGreen2}" />
</Grid>
</ScrollViewer> </ScrollViewer>
</StackPanel> </StackPanel>
</ScrollViewer> </ScrollViewer>

View File

@@ -109,7 +109,8 @@
ItemsSource="{Binding Songs}" /> ItemsSource="{Binding Songs}" />
<ToggleSwitch <ToggleSwitch
Grid.Row="2" Grid.Row="2"
Theme="{DynamicResource SplitViewToggleSwitch}" Theme="{DynamicResource IconBorderlessToggleSwitch}"
Content="{StaticResource SemiIconSidebar}"
HorizontalAlignment="Left" HorizontalAlignment="Left"
IsChecked="{Binding #SplitView.IsPaneOpen}"> IsChecked="{Binding #SplitView.IsPaneOpen}">
</ToggleSwitch> </ToggleSwitch>

View File

@@ -20,7 +20,7 @@
</StackPanel> </StackPanel>
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
<ToggleSwitch Content="Switch" OnContent="Yes" OffContent="No" /> <ToggleSwitch Content="Switch" OnContent="Yes" OffContent="No" />
<ToggleSwitch Content="Switch" OnContent="Yes" OffContent="No" IsChecked="True"/> <ToggleSwitch Content="Switch" OnContent="Yes" OffContent="No" IsChecked="True" />
<ToggleSwitch Content="Switch" OnContent="Yes" OffContent="No" IsEnabled="False" /> <ToggleSwitch Content="Switch" OnContent="Yes" OffContent="No" IsEnabled="False" />
<ToggleSwitch Content="Switch" OnContent="Yes" OffContent="No" IsEnabled="False" IsChecked="True" /> <ToggleSwitch Content="Switch" OnContent="Yes" OffContent="No" IsEnabled="False" IsChecked="True" />
</StackPanel> </StackPanel>
@@ -64,7 +64,9 @@
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
<ToggleSwitch <ToggleSwitch
HorizontalAlignment="Left" HorizontalAlignment="Left"
Padding="8" Padding="{StaticResource SemiThicknessTight}"
Width="{StaticResource SemiSpacingExtraLoose}"
Height="{StaticResource SemiSpacingExtraLoose}"
Theme="{DynamicResource ButtonToggleSwitch}" Theme="{DynamicResource ButtonToggleSwitch}"
Foreground="{DynamicResource ButtonDefaultTertiaryForeground}"> Foreground="{DynamicResource ButtonDefaultTertiaryForeground}">
<ToggleSwitch.Content> <ToggleSwitch.Content>
@@ -75,7 +77,9 @@
</ToggleSwitch> </ToggleSwitch>
<ToggleSwitch <ToggleSwitch
HorizontalAlignment="Left" HorizontalAlignment="Left"
Padding="8" Padding="{StaticResource SemiThicknessTight}"
Width="{StaticResource SemiSpacingExtraLoose}"
Height="{StaticResource SemiSpacingExtraLoose}"
Theme="{DynamicResource ButtonToggleSwitch}" Theme="{DynamicResource ButtonToggleSwitch}"
Foreground="{DynamicResource ButtonDefaultTertiaryForeground}"> Foreground="{DynamicResource ButtonDefaultTertiaryForeground}">
<ToggleSwitch.OnContent> <ToggleSwitch.OnContent>

View File

@@ -0,0 +1,94 @@
<UserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:vm="clr-namespace:Semi.Avalonia.Demo.ViewModels"
xmlns:pages="clr-namespace:Semi.Avalonia.Demo.Pages"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:Class="Semi.Avalonia.Demo.Pages.VariablesDemo"
x:DataType="vm:VariablesDemoViewModel"
x:CompileBindings="True">
<Design.DataContext>
<vm:VariablesDemoViewModel />
</Design.DataContext>
<DataGrid
Margin="8"
CanUserReorderColumns="True"
CanUserResizeColumns="True"
CanUserSortColumns="True"
HeadersVisibility="All"
IsReadOnly="True"
ItemsSource="{Binding GridData}">
<DataGrid.Columns>
<DataGridTemplateColumn
Width="300"
x:DataType="vm:VariableItem"
Header="ResourceKey">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate DataType="vm:VariableItem">
<SelectableTextBlock
Margin="12,0"
VerticalAlignment="Center"
Text="{Binding ResourceKey}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn
Width="200"
x:DataType="vm:VariableItem"
Header="Type">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate DataType="vm:VariableItem">
<SelectableTextBlock
Margin="12,0"
VerticalAlignment="Center"
Text="{Binding Type.Name}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn
Width="200"
x:DataType="vm:VariableItem"
Header="Value">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate DataType="vm:VariableItem">
<SelectableTextBlock
Margin="12,0"
VerticalAlignment="Center"
Text="{Binding Value}"
TextWrapping="Wrap" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn
Width="*"
x:DataType="vm:VariableItem"
Header="Description">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate DataType="vm:VariableItem">
<SelectableTextBlock
Margin="12,0"
VerticalAlignment="Center"
Text="{Binding Description}"
TextWrapping="Wrap" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn
Width="100"
x:DataType="vm:VariableItem"
Header="CopyText"
SortMemberPath="Duration">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate DataType="vm:VariableItem">
<Button
Command="{Binding $parent[pages:VariablesDemo].Copy}"
CommandParameter="{Binding CopyText}"
Theme="{DynamicResource IconBorderlessButton}"
Content="{StaticResource SemiIconCopy}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</UserControl>

View File

@@ -0,0 +1,24 @@
using System.Threading.Tasks;
using Avalonia.Controls;
using Semi.Avalonia.Demo.ViewModels;
namespace Semi.Avalonia.Demo.Pages;
public partial class VariablesDemo : UserControl
{
public VariablesDemo()
{
InitializeComponent();
this.DataContext = new VariablesDemoViewModel();
}
public async Task Copy(object? o)
{
if (o is null) return;
var toplevel = TopLevel.GetTopLevel(this);
if (toplevel?.Clipboard is { } c)
{
await c.SetTextAsync(o.ToString());
}
}
}

View File

@@ -6,20 +6,24 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<AvaloniaResource Include="Assets\**" /> <AvaloniaResource Include="Assets\**"/>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Avalonia" Version="$(AvaloniaVersion)" /> <PackageReference Include="Avalonia" Version="$(AvaloniaVersion)"/>
<PackageReference Include="Avalonia.Controls.DataGrid" Version="$(AvaloniaVersion)" /> <PackageReference Include="Avalonia.Controls.ColorPicker" Version="$(AvaloniaVersion)"/>
<PackageReference Include="Avalonia.Controls.DataGrid" Version="$(DataGridVersion)"/>
<!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.--> <!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->
<PackageReference Condition="'$(Configuration)' == 'Debug'" Include="Avalonia.Diagnostics" Version="$(AvaloniaVersion)" /> <PackageReference Include="Avalonia.Diagnostics" Version="$(AvaloniaVersion)">
<PackageReference Include="CommunityToolkit.Mvvm" Version="$(CommunityToolkitVersion)" /> <IncludeAssets Condition="'$(Configuration)' != 'Debug'">None</IncludeAssets>
<PrivateAssets Condition="'$(Configuration)' != 'Debug'">All</PrivateAssets>
</PackageReference>
<PackageReference Include="CommunityToolkit.Mvvm" Version="$(CommunityToolkitVersion)"/>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\..\src\Semi.Avalonia.ColorPicker\Semi.Avalonia.ColorPicker.csproj" /> <ProjectReference Include="..\..\src\Semi.Avalonia\Semi.Avalonia.csproj"/>
<ProjectReference Include="..\..\src\Semi.Avalonia.DataGrid\Semi.Avalonia.DataGrid.csproj" /> <ProjectReference Include="..\..\src\Semi.Avalonia.ColorPicker\Semi.Avalonia.ColorPicker.csproj"/>
<ProjectReference Include="..\..\src\Semi.Avalonia\Semi.Avalonia.csproj" /> <ProjectReference Include="..\..\src\Semi.Avalonia.DataGrid\Semi.Avalonia.DataGrid.csproj"/>
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@@ -1,7 +1,8 @@
<ResourceDictionary <ResourceDictionary
xmlns="https://github.com/avaloniaui" xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:controls="clr-namespace:Semi.Avalonia.Demo.Controls"> xmlns:controls="clr-namespace:Semi.Avalonia.Demo.Controls"
x:CompileBindings="True">
<ControlTheme x:Key="{x:Type controls:ColorDetailControl}" TargetType="controls:ColorDetailControl"> <ControlTheme x:Key="{x:Type controls:ColorDetailControl}" TargetType="controls:ColorDetailControl">
<Setter Property="Template"> <Setter Property="Template">
<ControlTemplate TargetType="controls:ColorDetailControl"> <ControlTemplate TargetType="controls:ColorDetailControl">
@@ -16,7 +17,7 @@
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
Background="{TemplateBinding Background}" Background="{TemplateBinding Background}"
CornerRadius="6" /> CornerRadius="6" />
<Grid ColumnDefinitions="*, Auto" RowDefinitions="*, *, *, *, *, *, *"> <Grid ColumnDefinitions="*, Auto" RowDefinitions="*, *, *, *, *, *, *, *">
<!-- Row 0-1-2 ResourceKey --> <!-- Row 0-1-2 ResourceKey -->
<TextBlock <TextBlock
Grid.Column="0" Grid.Column="0"
@@ -33,38 +34,26 @@
<Button <Button
Grid.Row="1" Grid.Row="1"
Grid.Column="1" Grid.Column="1"
Classes="Tertiary"
Padding="8"
Command="{Binding $parent[controls:ColorDetailControl].Copy}" Command="{Binding $parent[controls:ColorDetailControl].Copy}"
CommandParameter="{x:Static controls:ColorDetailControl.KEY_ResourceKey}" CommandParameter="{x:Static controls:ColorDetailControl.KEY_ResourceKey}"
Theme="{DynamicResource BorderlessButton}"> Theme="{DynamicResource IconBorderlessButton}"
<PathIcon Content="{StaticResource SemiIconCopy}" />
Theme="{DynamicResource InnerPathIcon}"
Data="{StaticResource SemiIconCopy}"
Foreground="{Binding $parent[Button].Foreground}" />
</Button>
<SelectableTextBlock <SelectableTextBlock
Grid.Row="2" Grid.Row="2"
Grid.Column="0" Grid.Column="0"
VerticalAlignment="Center" VerticalAlignment="Center"
IsVisible="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=ColorResourceKey, Converter={x:Static ObjectConverters.IsNotNull}}" IsVisible="{TemplateBinding ColorResourceKey, Converter={x:Static ObjectConverters.IsNotNull}}"
Text="{TemplateBinding ColorResourceKey}" /> Text="{TemplateBinding ColorResourceKey}" />
<Button <Button
Grid.Row="2" Grid.Row="2"
Grid.Column="1" Grid.Column="1"
Classes="Tertiary"
Padding="8"
Command="{Binding $parent[controls:ColorDetailControl].Copy}" Command="{Binding $parent[controls:ColorDetailControl].Copy}"
CommandParameter="{x:Static controls:ColorDetailControl.KEY_ColorResourceKey}" CommandParameter="{x:Static controls:ColorDetailControl.KEY_ColorResourceKey}"
IsVisible="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=ColorResourceKey, Converter={x:Static ObjectConverters.IsNotNull}}" IsVisible="{TemplateBinding ColorResourceKey, Converter={x:Static ObjectConverters.IsNotNull}}"
Theme="{DynamicResource BorderlessButton}"> Theme="{DynamicResource IconBorderlessButton}"
<PathIcon Content="{StaticResource SemiIconCopy}" />
Theme="{DynamicResource InnerPathIcon}"
Data="{StaticResource SemiIconCopy}"
Foreground="{Binding $parent[Button].Foreground}" />
</Button>
<!-- Row 3-4 HEX --> <!-- Row 3-4-5 HEX -->
<TextBlock <TextBlock
Grid.Row="3" Grid.Row="3"
Grid.Column="0" Grid.Column="0"
@@ -72,7 +61,7 @@
Margin="4,8,0,0" Margin="4,8,0,0"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Tertiary" Classes="Tertiary"
Text="ARGB" /> Text="Hex" />
<SelectableTextBlock <SelectableTextBlock
Grid.Row="4" Grid.Row="4"
Grid.Column="0" Grid.Column="0"
@@ -81,44 +70,45 @@
<Button <Button
Grid.Row="4" Grid.Row="4"
Grid.Column="1" Grid.Column="1"
Classes="Tertiary"
Padding="8"
Command="{Binding $parent[controls:ColorDetailControl].Copy}" Command="{Binding $parent[controls:ColorDetailControl].Copy}"
CommandParameter="{x:Static controls:ColorDetailControl.KEY_Hex}" CommandParameter="{x:Static controls:ColorDetailControl.KEY_Hex}"
Theme="{DynamicResource BorderlessButton}"> Theme="{DynamicResource IconBorderlessButton}"
<PathIcon Content="{StaticResource SemiIconCopy}" />
Theme="{DynamicResource InnerPathIcon}" <SelectableTextBlock
Data="{StaticResource SemiIconCopy}"
Foreground="{Binding $parent[Button].Foreground}" />
</Button>
<!-- Row 5-6 Opacity -->
<TextBlock
Grid.Row="5" Grid.Row="5"
Grid.Column="0" Grid.Column="0"
VerticalAlignment="Center"
Text="{TemplateBinding Hex2}" />
<Button
Grid.Row="5"
Grid.Column="1"
Command="{Binding $parent[controls:ColorDetailControl].Copy}"
CommandParameter="{x:Static controls:ColorDetailControl.KEY_Hex2}"
Theme="{DynamicResource IconBorderlessButton}"
Content="{StaticResource SemiIconCopy}" />
<!-- Row 6-7 Opacity -->
<TextBlock
Grid.Row="6"
Grid.Column="0"
Grid.ColumnSpan="2" Grid.ColumnSpan="2"
Margin="4,8,0,0" Margin="4,8,0,0"
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="Tertiary" Classes="Tertiary"
Text="Opacity" /> Text="Opacity" />
<SelectableTextBlock <SelectableTextBlock
Grid.Row="6" Grid.Row="7"
Grid.Column="0" Grid.Column="0"
VerticalAlignment="Center" VerticalAlignment="Center"
Text="{TemplateBinding OpacityNumber}" /> Text="{TemplateBinding OpacityNumber}" />
<Button <Button
Grid.Row="6" Grid.Row="7"
Grid.Column="1" Grid.Column="1"
Classes="Tertiary"
Padding="8"
Command="{Binding $parent[controls:ColorDetailControl].Copy}" Command="{Binding $parent[controls:ColorDetailControl].Copy}"
CommandParameter="{x:Static controls:ColorDetailControl.KEY_Opacity}" CommandParameter="{x:Static controls:ColorDetailControl.KEY_Opacity}"
Theme="{DynamicResource BorderlessButton}"> Theme="{DynamicResource IconBorderlessButton}"
<PathIcon Content="{StaticResource SemiIconCopy}" />
Theme="{DynamicResource InnerPathIcon}"
Data="{StaticResource SemiIconCopy}"
Foreground="{Binding $parent[Button].Foreground}" />
</Button>
</Grid> </Grid>
</StackPanel> </StackPanel>
</ControlTemplate> </ControlTemplate>

View File

@@ -1,7 +1,8 @@
<ResourceDictionary <ResourceDictionary
xmlns="https://github.com/avaloniaui" xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:controls="using:Semi.Avalonia.Demo.Controls"> xmlns:controls="using:Semi.Avalonia.Demo.Controls"
x:CompileBindings="True">
<Design.PreviewWith> <Design.PreviewWith>
<controls:ColorItemControl /> <controls:ColorItemControl />
</Design.PreviewWith> </Design.PreviewWith>

View File

@@ -3,6 +3,7 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:controls="clr-namespace:Semi.Avalonia.Demo.Controls" xmlns:controls="clr-namespace:Semi.Avalonia.Demo.Controls"
xmlns:viewModels="clr-namespace:Semi.Avalonia.Demo.ViewModels" xmlns:viewModels="clr-namespace:Semi.Avalonia.Demo.ViewModels"
xmlns:pages="clr-namespace:Semi.Avalonia.Demo.Pages"
x:CompileBindings="True" x:CompileBindings="True"
x:DataType="viewModels:FunctionalColorGroupViewModel"> x:DataType="viewModels:FunctionalColorGroupViewModel">
<ControlTheme x:Key="{x:Type controls:FunctionalColorGroupControl}" TargetType="controls:FunctionalColorGroupControl"> <ControlTheme x:Key="{x:Type controls:FunctionalColorGroupControl}" TargetType="controls:FunctionalColorGroupControl">
@@ -30,27 +31,21 @@
</DataTemplate> </DataTemplate>
</DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn> </DataGridTemplateColumn>
<DataGridTemplateColumn Width="*" Header="ResourceKey"> <DataGridTemplateColumn Width="300" Header="ResourceKey">
<DataGridTemplateColumn.CellTemplate> <DataGridTemplateColumn.CellTemplate>
<DataTemplate DataType="viewModels:ColorItemViewModel"> <DataTemplate DataType="viewModels:ColorItemViewModel">
<SelectableTextBlock <SelectableTextBlock
Margin="12,0,12,0" Margin="12,0"
VerticalAlignment="Center" VerticalAlignment="Center"
Text="{Binding ResourceKey}" /> Text="{Binding ResourceKey}" />
</DataTemplate> </DataTemplate>
</DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn> </DataGridTemplateColumn>
<DataGridTextColumn
Width="*"
x:DataType="viewModels:ColorItemViewModel"
Binding="{Binding ColorDisplayName}"
CanUserSort="False"
Header="Name" />
<DataGridTemplateColumn Width="100" Header="Hex"> <DataGridTemplateColumn Width="100" Header="Hex">
<DataGridTemplateColumn.CellTemplate> <DataGridTemplateColumn.CellTemplate>
<DataTemplate DataType="viewModels:ColorItemViewModel"> <DataTemplate DataType="viewModels:ColorItemViewModel">
<SelectableTextBlock <SelectableTextBlock
Margin="12,0,12,0" Margin="12,0"
VerticalAlignment="Center" VerticalAlignment="Center"
Text="{Binding Hex}" /> Text="{Binding Hex}" />
</DataTemplate> </DataTemplate>
@@ -60,13 +55,29 @@
<DataGridTemplateColumn.CellTemplate> <DataGridTemplateColumn.CellTemplate>
<DataTemplate DataType="viewModels:ColorItemViewModel"> <DataTemplate DataType="viewModels:ColorItemViewModel">
<SelectableTextBlock <SelectableTextBlock
Margin="12,0,12,0" Margin="12,0"
HorizontalAlignment="Right"
VerticalAlignment="Center" VerticalAlignment="Center"
Text="{Binding Brush.Opacity}" /> Text="{Binding Brush.Opacity}" />
</DataTemplate> </DataTemplate>
</DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn> </DataGridTemplateColumn>
<DataGridTextColumn
Width="*"
x:DataType="viewModels:ColorItemViewModel"
Binding="{Binding ColorDisplayName}"
CanUserSort="False"
Header="Description" />
<DataGridTemplateColumn Width="100" Header="CopyText">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate DataType="viewModels:ColorItemViewModel">
<Button
Command="{Binding $parent[pages:PaletteDemo].Copy}"
CommandParameter="{Binding CopyText}"
Theme="{DynamicResource IconBorderlessButton}"
Content="{StaticResource SemiIconCopy}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns> </DataGrid.Columns>
</DataGrid> </DataGrid>
</TabItem> </TabItem>
@@ -84,27 +95,21 @@
</DataTemplate> </DataTemplate>
</DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn> </DataGridTemplateColumn>
<DataGridTemplateColumn Width="*" Header="ResourceKey"> <DataGridTemplateColumn Width="300" Header="ResourceKey">
<DataGridTemplateColumn.CellTemplate> <DataGridTemplateColumn.CellTemplate>
<DataTemplate DataType="viewModels:ColorItemViewModel"> <DataTemplate DataType="viewModels:ColorItemViewModel">
<SelectableTextBlock <SelectableTextBlock
Margin="12,0,12,0" Margin="12,0"
VerticalAlignment="Center" VerticalAlignment="Center"
Text="{Binding ResourceKey}" /> Text="{Binding ResourceKey}" />
</DataTemplate> </DataTemplate>
</DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn> </DataGridTemplateColumn>
<DataGridTextColumn
Width="*"
x:DataType="viewModels:ColorItemViewModel"
Binding="{Binding ColorDisplayName}"
CanUserSort="False"
Header="Name" />
<DataGridTemplateColumn Width="100" Header="Hex"> <DataGridTemplateColumn Width="100" Header="Hex">
<DataGridTemplateColumn.CellTemplate> <DataGridTemplateColumn.CellTemplate>
<DataTemplate DataType="viewModels:ColorItemViewModel"> <DataTemplate DataType="viewModels:ColorItemViewModel">
<SelectableTextBlock <SelectableTextBlock
Margin="12,0,12,0" Margin="12,0"
VerticalAlignment="Center" VerticalAlignment="Center"
Text="{Binding Hex}" /> Text="{Binding Hex}" />
</DataTemplate> </DataTemplate>
@@ -114,13 +119,29 @@
<DataGridTemplateColumn.CellTemplate> <DataGridTemplateColumn.CellTemplate>
<DataTemplate DataType="viewModels:ColorItemViewModel"> <DataTemplate DataType="viewModels:ColorItemViewModel">
<SelectableTextBlock <SelectableTextBlock
Margin="12,0,12,0" Margin="12,0"
HorizontalAlignment="Right"
VerticalAlignment="Center" VerticalAlignment="Center"
Text="{Binding Brush.Opacity}" /> Text="{Binding Brush.Opacity}" />
</DataTemplate> </DataTemplate>
</DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn> </DataGridTemplateColumn>
<DataGridTextColumn
Width="*"
x:DataType="viewModels:ColorItemViewModel"
Binding="{Binding ColorDisplayName}"
CanUserSort="False"
Header="Description" />
<DataGridTemplateColumn Width="100" Header="CopyText">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate DataType="viewModels:ColorItemViewModel">
<Button
Command="{Binding $parent[pages:PaletteDemo].Copy}"
CommandParameter="{Binding CopyText}"
Theme="{DynamicResource IconBorderlessButton}"
Content="{StaticResource SemiIconCopy}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns> </DataGrid.Columns>
</DataGrid> </DataGrid>
</TabItem> </TabItem>

View File

@@ -3,6 +3,7 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:controls="clr-namespace:Semi.Avalonia.Demo.Controls" xmlns:controls="clr-namespace:Semi.Avalonia.Demo.Controls"
xmlns:viewModels="clr-namespace:Semi.Avalonia.Demo.ViewModels" xmlns:viewModels="clr-namespace:Semi.Avalonia.Demo.ViewModels"
xmlns:pages="clr-namespace:Semi.Avalonia.Demo.Pages"
x:CompileBindings="True" x:CompileBindings="True"
x:DataType="viewModels:ShadowGroupViewModel"> x:DataType="viewModels:ShadowGroupViewModel">
<ControlTheme x:Key="{x:Type controls:ShadowGroupControl}" TargetType="controls:ShadowGroupControl"> <ControlTheme x:Key="{x:Type controls:ShadowGroupControl}" TargetType="controls:ShadowGroupControl">
@@ -19,29 +20,40 @@
<TabItem Header="Light"> <TabItem Header="Light">
<DataGrid IsReadOnly="True" ItemsSource="{TemplateBinding LightShadows}"> <DataGrid IsReadOnly="True" ItemsSource="{TemplateBinding LightShadows}">
<DataGrid.Columns> <DataGrid.Columns>
<DataGridTemplateColumn Width="*" Header="ResourceKey"> <DataGridTemplateColumn Width="300" Header="ResourceKey">
<DataGridTemplateColumn.CellTemplate> <DataGridTemplateColumn.CellTemplate>
<DataTemplate DataType="viewModels:ShadowItemViewModel"> <DataTemplate DataType="viewModels:ShadowItemViewModel">
<SelectableTextBlock <SelectableTextBlock
Margin="12,0,12,0" Margin="12,0"
VerticalAlignment="Center" VerticalAlignment="Center"
Text="{Binding ResourceKey}" /> Text="{Binding ResourceKey}" />
</DataTemplate> </DataTemplate>
</DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn> </DataGridTemplateColumn>
<DataGridTemplateColumn Width="300" Header="BoxShadows">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate DataType="viewModels:ShadowItemViewModel">
<SelectableTextBlock
Margin="12,0"
VerticalAlignment="Center"
Text="{Binding BoxShadowValue}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn <DataGridTextColumn
Width="*" Width="*"
x:DataType="viewModels:ShadowItemViewModel" x:DataType="viewModels:ShadowItemViewModel"
Binding="{Binding ShadowDisplayName}" Binding="{Binding ShadowDisplayName}"
CanUserSort="False" CanUserSort="False"
Header="Name" /> Header="Description" />
<DataGridTemplateColumn Width="300" Header="BoxShadows"> <DataGridTemplateColumn Width="100" Header="CopyText">
<DataGridTemplateColumn.CellTemplate> <DataGridTemplateColumn.CellTemplate>
<DataTemplate DataType="viewModels:ShadowItemViewModel"> <DataTemplate DataType="viewModels:ShadowItemViewModel">
<SelectableTextBlock <Button
Margin="12,0,12,0" Command="{Binding $parent[pages:PaletteDemo].Copy}"
VerticalAlignment="Center" CommandParameter="{Binding CopyText}"
Text="{Binding BoxShadowValue}" /> Theme="{DynamicResource IconBorderlessButton}"
Content="{StaticResource SemiIconCopy}" />
</DataTemplate> </DataTemplate>
</DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn> </DataGridTemplateColumn>
@@ -51,29 +63,40 @@
<TabItem Header="Dark"> <TabItem Header="Dark">
<DataGrid IsReadOnly="True" ItemsSource="{TemplateBinding DarkShadows}"> <DataGrid IsReadOnly="True" ItemsSource="{TemplateBinding DarkShadows}">
<DataGrid.Columns> <DataGrid.Columns>
<DataGridTemplateColumn Width="*" Header="ResourceKey"> <DataGridTemplateColumn Width="300" Header="ResourceKey">
<DataGridTemplateColumn.CellTemplate> <DataGridTemplateColumn.CellTemplate>
<DataTemplate DataType="viewModels:ShadowItemViewModel"> <DataTemplate DataType="viewModels:ShadowItemViewModel">
<SelectableTextBlock <SelectableTextBlock
Margin="12,0,12,0" Margin="12,0"
VerticalAlignment="Center" VerticalAlignment="Center"
Text="{Binding ResourceKey}" /> Text="{Binding ResourceKey}" />
</DataTemplate> </DataTemplate>
</DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn> </DataGridTemplateColumn>
<DataGridTemplateColumn Width="300" Header="BoxShadows">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate DataType="viewModels:ShadowItemViewModel">
<SelectableTextBlock
Margin="12,0"
VerticalAlignment="Center"
Text="{Binding BoxShadowValue}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn <DataGridTextColumn
Width="*" Width="*"
x:DataType="viewModels:ShadowItemViewModel" x:DataType="viewModels:ShadowItemViewModel"
Binding="{Binding ShadowDisplayName}" Binding="{Binding ShadowDisplayName}"
CanUserSort="False" CanUserSort="False"
Header="Name" /> Header="Description" />
<DataGridTemplateColumn Width="300" Header="BoxShadows"> <DataGridTemplateColumn Width="100" Header="CopyText">
<DataGridTemplateColumn.CellTemplate> <DataGridTemplateColumn.CellTemplate>
<DataTemplate DataType="viewModels:ShadowItemViewModel"> <DataTemplate DataType="viewModels:ShadowItemViewModel">
<SelectableTextBlock <Button
Margin="12,0,12,0" Command="{Binding $parent[pages:PaletteDemo].Copy}"
VerticalAlignment="Center" CommandParameter="{Binding CopyText}"
Text="{Binding BoxShadowValue}" /> Theme="{DynamicResource IconBorderlessButton}"
Content="{StaticResource SemiIconCopy}" />
</DataTemplate> </DataTemplate>
</DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn> </DataGridTemplateColumn>

View File

@@ -1,31 +1,46 @@
<ResourceDictionary xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <ResourceDictionary xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ControlTheme x:Key="ThemeToggleSwitch" <Design.PreviewWith>
<StackPanel Orientation="Horizontal">
<ToggleSwitch
Theme="{DynamicResource IconBorderlessToggleSwitch}"
Content="{StaticResource SemiIconStar}" />
<Button
Theme="{DynamicResource IconBorderlessButton}"
Content="{StaticResource SemiIconStar}" />
</StackPanel>
</Design.PreviewWith>
<ControlTheme x:Key="IconBorderlessToggleSwitch"
BasedOn="{StaticResource ButtonToggleSwitch}" BasedOn="{StaticResource ButtonToggleSwitch}"
TargetType="ToggleSwitch"> TargetType="ToggleSwitch">
<Setter Property="Padding" Value="8" /> <Setter Property="Padding" Value="{StaticResource SemiThicknessTight}" />
<Setter Property="OnContent" Value="{Binding $self.Content}" /> <Setter Property="Width" Value="{StaticResource SemiSpacingExtraLoose}" />
<Setter Property="Height" Value="{StaticResource SemiSpacingExtraLoose}" />
<Setter Property="Foreground" Value="{DynamicResource SemiColorText1}" />
<Setter Property="OnContentTemplate"> <Setter Property="OnContentTemplate">
<DataTemplate> <StaticResource ResourceKey="GeometryDataTemplate" />
<PathIcon Theme="{StaticResource InnerPathIcon}" Data="{Binding}" />
</DataTemplate>
</Setter> </Setter>
<Setter Property="OffContent" Value="{Binding $self.Content}" />
<Setter Property="OffContentTemplate"> <Setter Property="OffContentTemplate">
<DataTemplate> <StaticResource ResourceKey="GeometryDataTemplate" />
<PathIcon Theme="{StaticResource InnerPathIcon}" Data="{Binding}" />
</DataTemplate>
</Setter> </Setter>
<Setter Property="ContentTemplate"> <Setter Property="ContentTemplate">
<DataTemplate> <StaticResource ResourceKey="GeometryDataTemplate" />
<PathIcon Theme="{StaticResource InnerPathIcon}" Data="{Binding}" />
</DataTemplate>
</Setter> </Setter>
</ControlTheme> </ControlTheme>
<ControlTheme x:Key="SplitViewToggleSwitch" <ControlTheme x:Key="IconBorderlessButton"
BasedOn="{StaticResource ThemeToggleSwitch}" BasedOn="{StaticResource BorderlessButton}"
TargetType="ToggleSwitch"> TargetType="Button">
<Setter Property="Content" <Setter Property="Padding" Value="{StaticResource SemiThicknessTight}" />
Value="M5 2H19C20.6569 2 22 3.34315 22 5V19C22 20.6569 20.6569 22 19 22H5C3.34315 22 2 20.6569 2 19V5C2 3.34315 3.34315 2 5 2ZM6 4C5.44772 4 5 4.44772 5 5V19C5 19.5523 5.44772 20 6 20H9C9.55229 20 10 19.5523 10 19V5C10 4.44772 9.55229 4 9 4H6Z" /> <Setter Property="Width" Value="{StaticResource SemiSpacingExtraLoose}" />
<Setter Property="Height" Value="{StaticResource SemiSpacingExtraLoose}" />
<Setter Property="Foreground" Value="{DynamicResource SemiColorText1}" />
<Setter Property="ContentTemplate">
<StaticResource ResourceKey="GeometryDataTemplate" />
</Setter>
</ControlTheme> </ControlTheme>
<DataTemplate x:Key="GeometryDataTemplate" DataType="Geometry">
<PathIcon Theme="{StaticResource InnerPathIcon}" Data="{Binding}" />
</DataTemplate>
</ResourceDictionary> </ResourceDictionary>

View File

@@ -0,0 +1,10 @@
<ResourceDictionary xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ResourceDictionary.MergedDictionaries>
<ResourceInclude Source="ColorDetailControl.axaml" />
<ResourceInclude Source="ColorItemControl.axaml" />
<ResourceInclude Source="FunctionalColorGroupControl.axaml" />
<ResourceInclude Source="ShadowGroupControl.axaml" />
<ResourceInclude Source="TabMenu.axaml" />
<ResourceInclude Source="ToggleSwitch.axaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>

View File

@@ -0,0 +1,19 @@
using Avalonia;
using Avalonia.Controls.ApplicationLifetimes;
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using Semi.Avalonia.Demo.Views;
namespace Semi.Avalonia.Demo.ViewModels;
public partial class ApplicationViewModel: ObservableObject
{
[RelayCommand]
private void Exit()
{
if (Application.Current?.ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
{
desktop.Shutdown();
}
}
}

View File

@@ -8,7 +8,7 @@ using CommunityToolkit.Mvvm.Input;
namespace Semi.Avalonia.Demo.ViewModels; namespace Semi.Avalonia.Demo.ViewModels;
public class DataGridDemoViewModel: ObservableObject public class DataGridDemoViewModel : ObservableObject
{ {
public ObservableCollection<Song> GridData1 { get; set; } public ObservableCollection<Song> GridData1 { get; set; }
@@ -23,7 +23,7 @@ public class DataGridDemoViewModel: ObservableObject
GridData1 = new ObservableCollection<Song>(Song.Songs); GridData1 = new ObservableCollection<Song>(Song.Songs);
GridData2 = new DataGridCollectionView(Song.Songs); GridData2 = new DataGridCollectionView(Song.Songs);
GridData2.GroupDescriptions.Add(new DataGridPathGroupDescription("Album")); GridData2.GroupDescriptions.Add(new DataGridPathGroupDescription("Album"));
GridData3 = new ObservableCollection<SongViewModel>(Song.Songs.Take(10).Select(a=>new SongViewModel() GridData3 = new ObservableCollection<SongViewModel>(Song.Songs.Take(10).Select(a => new SongViewModel()
{ {
Title = a.Title, Title = a.Title,
Artist = a.Artist, Artist = a.Artist,
@@ -57,11 +57,10 @@ public class Song
Album = album; Album = album;
CountOfComment = countOfComment; CountOfComment = countOfComment;
Url = $"https://music.163.com/song?id={netEaseId}"; Url = $"https://music.163.com/song?id={netEaseId}";
} }
public static List<Song> Songs { get; set; } = new List<Song>() public static List<Song> Songs =>
{ [
new("好肚有肚(feat.李玲玉)", "熊猫堂ProducePandas", 2, 50, "A.S.I.A", 730, 1487039339), new("好肚有肚(feat.李玲玉)", "熊猫堂ProducePandas", 2, 50, "A.S.I.A", 730, 1487039339),
new("荒诞秀", "熊猫堂ProducePandas", 3, 15, "A.S.I.A", 639, 1487037601), new("荒诞秀", "熊猫堂ProducePandas", 3, 15, "A.S.I.A", 639, 1487037601),
new("长大", "熊猫堂ProducePandas", 4, 6, "A.S.I.A", 1114, 1487037690), new("长大", "熊猫堂ProducePandas", 4, 6, "A.S.I.A", 1114, 1487037690),
@@ -122,41 +121,15 @@ public class Song
new("热带季风Remix", "熊猫堂ProducePandas", 3, 22, "W.O.R.L.D.", 23, 2063173319), new("热带季风Remix", "熊猫堂ProducePandas", 3, 22, "W.O.R.L.D.", 23, 2063173319),
new("加州梦境", "熊猫堂ProducePandas", 2, 56, "W.O.R.L.D.", 1662, 2063173324), new("加州梦境", "熊猫堂ProducePandas", 2, 56, "W.O.R.L.D.", 1662, 2063173324),
new("渐近自由", "熊猫堂ProducePandas", 4, 19, "W.O.R.L.D.", 124, 2063173321), new("渐近自由", "熊猫堂ProducePandas", 4, 19, "W.O.R.L.D.", 124, 2063173321),
new("世界所有的烂漫", "熊猫堂ProducePandas", 3, 30, "W.O.R.L.D.", 335, 2053388775), new("世界所有的烂漫", "熊猫堂ProducePandas", 3, 30, "W.O.R.L.D.", 335, 2053388775)
}; ];
} }
public class SongViewModel: ObservableObject public partial class SongViewModel : ObservableObject
{ {
private string? _title; [ObservableProperty] private string? _title;
private string? _artist; [ObservableProperty] private string? _artist;
private string? _album; [ObservableProperty] private string? _album;
private int _countOfComment; [ObservableProperty] private int _countOfComment;
private bool? _isSelected; [ObservableProperty] private bool? _isSelected;
public string? Title
{
get => _title;
set => SetProperty(ref _title, value);
}
public string? Artist
{
get => _artist;
set => SetProperty(ref _artist, value);
}
public string? Album
{
get => _album;
set => SetProperty(ref _album, value);
}
public int CountOfComment
{
get => _countOfComment;
set => SetProperty(ref _countOfComment, value);
}
public bool? IsSelected
{
get => _isSelected;
set => SetProperty(ref _isSelected, value);
}
} }

View File

@@ -31,67 +31,59 @@ public partial class HighContrastDemoViewModel : ObservableObject
[ [
new ColorResource new ColorResource
{ {
ResourceKey = "WindowColor", ResourceKey = "SemiColorWindow",
Brush = new SolidColorBrush(Color.Parse("#202020")), Brush = new SolidColorBrush(Color.Parse("#202020")),
Hex = "#FF202020",
Description = "Background of pages, panes, popups, and windows.", Description = "Background of pages, panes, popups, and windows.",
PairWith = "WindowTextColor" PairWith = "WindowTextColor"
}, },
new ColorResource new ColorResource
{ {
ResourceKey = "WindowTextColor", ResourceKey = "SemiColorWindowText",
Brush = new SolidColorBrush(Color.Parse("#FFFFFF")), Brush = new SolidColorBrush(Color.Parse("#FFFFFF")),
Hex = "WHITE",
Description = "Headings, body copy, lists, placeholder text, app and window borders.", Description = "Headings, body copy, lists, placeholder text, app and window borders.",
PairWith = "WindowColor" PairWith = "WindowColor"
}, },
new ColorResource new ColorResource
{ {
ResourceKey = "HotlightColor", ResourceKey = "SemiColorHotlight",
Brush = new SolidColorBrush(Color.Parse("#75E9FC")), Brush = new SolidColorBrush(Color.Parse("#75E9FC")),
Hex = "#FF75E9FC",
Description = "Hyperlinks.", Description = "Hyperlinks.",
PairWith = "WindowColor" PairWith = "WindowColor"
}, },
new ColorResource new ColorResource
{ {
ResourceKey = "GrayTextColor", ResourceKey = "SemiColorGrayText",
Brush = new SolidColorBrush(Color.Parse("#A6A6A6")), Brush = new SolidColorBrush(Color.Parse("#A6A6A6")),
Hex = "#FFA6A6A6",
Description = "Inactive (disabled) UI.", Description = "Inactive (disabled) UI.",
PairWith = "WindowColor" PairWith = "WindowColor"
}, },
new ColorResource new ColorResource
{ {
ResourceKey = "HighlightTextColor", ResourceKey = "SemiColorHighlightText",
Brush = new SolidColorBrush(Color.Parse("#263B50")), Brush = new SolidColorBrush(Color.Parse("#263B50")),
Hex = "#FF263B50",
Description = Description =
"Foreground color for text or UI that is in selected, interacted with (hover, pressed), or in progress.", "Foreground color for text or UI that is in selected, interacted with (hover, pressed), or in progress.",
PairWith = "HighlightColor" PairWith = "HighlightColor"
}, },
new ColorResource new ColorResource
{ {
ResourceKey = "HighlightColor", ResourceKey = "SemiColorHighlight",
Brush = new SolidColorBrush(Color.Parse("#8EE3F0")), Brush = new SolidColorBrush(Color.Parse("#8EE3F0")),
Hex = "#FF8EE3F0",
Description = Description =
"Background or accent color for UI that is in selected, interacted with (hover, pressed), or in progress.", "Background or accent color for UI that is in selected, interacted with (hover, pressed), or in progress.",
PairWith = "HighlightTextColor" PairWith = "HighlightTextColor"
}, },
new ColorResource new ColorResource
{ {
ResourceKey = "ButtonTextColor", ResourceKey = "SemiColorButtonText",
Brush = new SolidColorBrush(Color.Parse("#FFFFFF")), Brush = new SolidColorBrush(Color.Parse("#FFFFFF")),
Hex = "WHITE",
Description = "Foreground color for buttons and any UI that can be interacted with.", Description = "Foreground color for buttons and any UI that can be interacted with.",
PairWith = "ButtonFaceColor" PairWith = "ButtonFaceColor"
}, },
new ColorResource new ColorResource
{ {
ResourceKey = "ButtonFaceColor", ResourceKey = "SemiColorButtonFace",
Brush = new SolidColorBrush(Color.Parse("#202020")), Brush = new SolidColorBrush(Color.Parse("#202020")),
Hex = "#FF202020",
Description = "Background color for buttons and any UI that can be interacted with.", Description = "Background color for buttons and any UI that can be interacted with.",
PairWith = "ButtonTextColor" PairWith = "ButtonTextColor"
}, },
@@ -108,10 +100,10 @@ public partial class HighContrastDemoViewModel : ObservableObject
foreach (var colorResource in ColorResources) foreach (var colorResource in ColorResources)
{ {
if (colorResource.ResourceKey is null) continue; if (colorResource.ResourceKey is null) continue;
if (topLevel?.TryFindResource(colorResource.ResourceKey, value, out var o) == true && o is Color color) if (topLevel?.TryFindResource(colorResource.ResourceKey, value, out var o) == true
&& o is ISolidColorBrush color)
{ {
colorResource.Brush = new SolidColorBrush(color); colorResource.Brush = color;
colorResource.Hex = color.ToString().ToUpperInvariant();
} }
} }
} }
@@ -130,8 +122,12 @@ public partial class HighContrastDemoViewModel : ObservableObject
public partial class ColorResource : ObservableObject public partial class ColorResource : ObservableObject
{ {
[ObservableProperty] private string? _resourceKey; [ObservableProperty] private string? _resourceKey;
[ObservableProperty] private SolidColorBrush? _brush; [ObservableProperty] private ISolidColorBrush? _brush;
[ObservableProperty] private string? _hex;
[ObservableProperty] private string? _description; [ObservableProperty] private string? _description;
[ObservableProperty] private string? _pairWith; [ObservableProperty] private string? _pairWith;
public string CopyText =>
$"""
<StaticResource x:Key="" ResourceKey="{ResourceKey}" />
""";
} }

View File

@@ -1,15 +1,18 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
using System.Globalization;
using Avalonia.Controls; using Avalonia.Controls;
using Avalonia.Media; using Avalonia.Media;
using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Messaging; using CommunityToolkit.Mvvm.Messaging;
using Semi.Avalonia.Demo.Constant;
using Semi.Avalonia.Demo.Converters;
using Semi.Avalonia.Tokens.Palette; using Semi.Avalonia.Tokens.Palette;
namespace Semi.Avalonia.Demo.ViewModels; namespace Semi.Avalonia.Demo.ViewModels;
public class PaletteDemoViewModel : ObservableObject public partial class PaletteDemoViewModel : ObservableObject
{ {
private readonly string[] _predefinedColorNames = private readonly string[] _predefinedColorNames =
[ [
@@ -22,31 +25,10 @@ public class PaletteDemoViewModel : ObservableObject
private readonly IResourceDictionary? _lightResourceDictionary; private readonly IResourceDictionary? _lightResourceDictionary;
private readonly IResourceDictionary? _darkResourceDictionary; private readonly IResourceDictionary? _darkResourceDictionary;
private ColorItemViewModel _selectedColor = null!; [ObservableProperty] private ColorItemViewModel? _selectedColor;
public ColorItemViewModel SelectedColor
{
get => _selectedColor;
set => SetProperty(ref _selectedColor, value);
}
private ObservableCollection<ColorListViewModel>? _lightLists;
public ObservableCollection<ColorListViewModel>? LightLists
{
get => _lightLists;
set => SetProperty(ref _lightLists, value);
}
private ObservableCollection<ColorListViewModel>? _darkLists;
public ObservableCollection<ColorListViewModel>? DarkLists
{
get => _darkLists;
set => SetProperty(ref _darkLists, value);
}
public ObservableCollection<ColorListViewModel> LightLists { get; set; } = [];
public ObservableCollection<ColorListViewModel> DarkLists { get; set; } = [];
public ObservableCollection<FunctionalColorGroupViewModel> FunctionalColors { get; set; } = []; public ObservableCollection<FunctionalColorGroupViewModel> FunctionalColors { get; set; } = [];
public ObservableCollection<ShadowGroupViewModel> Shadows { get; set; } = []; public ObservableCollection<ShadowGroupViewModel> Shadows { get; set; } = [];
@@ -54,7 +36,7 @@ public class PaletteDemoViewModel : ObservableObject
{ {
_lightResourceDictionary = new Light(); _lightResourceDictionary = new Light();
_darkResourceDictionary = new Dark(); _darkResourceDictionary = new Dark();
WeakReferenceMessenger.Default.Register<PaletteDemoViewModel, ColorItemViewModel>(this, OnClickColorItem); WeakReferenceMessenger.Default.Register<ColorItemViewModel>(this, (_, item) => SelectedColor = item);
} }
public void InitializeResources() public void InitializeResources()
@@ -66,7 +48,6 @@ public class PaletteDemoViewModel : ObservableObject
private void InitializePalette() private void InitializePalette()
{ {
LightLists = [];
foreach (var color in _predefinedColorNames) foreach (var color in _predefinedColorNames)
{ {
ColorListViewModel s = new ColorListViewModel(); ColorListViewModel s = new ColorListViewModel();
@@ -74,7 +55,6 @@ public class PaletteDemoViewModel : ObservableObject
LightLists.Add(s); LightLists.Add(s);
} }
DarkLists = [];
foreach (var color in _predefinedColorNames) foreach (var color in _predefinedColorNames)
{ {
ColorListViewModel s = new ColorListViewModel(); ColorListViewModel s = new ColorListViewModel();
@@ -85,126 +65,82 @@ public class PaletteDemoViewModel : ObservableObject
private void InitializeFunctionalColors() private void InitializeFunctionalColors()
{ {
FunctionalColors.Add(new FunctionalColorGroupViewModel("Primary", _lightResourceDictionary, _darkResourceDictionary, ColorTokens.PrimaryTokens)); FunctionalColors.Add(new FunctionalColorGroupViewModel(
FunctionalColors.Add(new FunctionalColorGroupViewModel("Secondary", _lightResourceDictionary, _darkResourceDictionary, ColorTokens.SecondaryTokens)); "Primary", _lightResourceDictionary, _darkResourceDictionary, ColorTokens.PrimaryTokens));
FunctionalColors.Add(new FunctionalColorGroupViewModel("Tertiary", _lightResourceDictionary, _darkResourceDictionary, ColorTokens.TertiaryTokens)); FunctionalColors.Add(new FunctionalColorGroupViewModel(
FunctionalColors.Add(new FunctionalColorGroupViewModel("Information", _lightResourceDictionary, _darkResourceDictionary, ColorTokens.InformationTokens)); "Secondary", _lightResourceDictionary, _darkResourceDictionary, ColorTokens.SecondaryTokens));
FunctionalColors.Add(new FunctionalColorGroupViewModel("Success", _lightResourceDictionary, _darkResourceDictionary, ColorTokens.SuccessTokens)); FunctionalColors.Add(new FunctionalColorGroupViewModel(
FunctionalColors.Add(new FunctionalColorGroupViewModel("Warning", _lightResourceDictionary, _darkResourceDictionary, ColorTokens.WarningTokens)); "Tertiary", _lightResourceDictionary, _darkResourceDictionary, ColorTokens.TertiaryTokens));
FunctionalColors.Add(new FunctionalColorGroupViewModel("Danger", _lightResourceDictionary, _darkResourceDictionary, ColorTokens.DangerTokens)); FunctionalColors.Add(new FunctionalColorGroupViewModel(
FunctionalColors.Add(new FunctionalColorGroupViewModel("Text", _lightResourceDictionary, _darkResourceDictionary, ColorTokens.TextTokens)); "Information", _lightResourceDictionary, _darkResourceDictionary, ColorTokens.InformationTokens));
FunctionalColors.Add(new FunctionalColorGroupViewModel("Link", _lightResourceDictionary, _darkResourceDictionary, ColorTokens.LinkTokens)); FunctionalColors.Add(new FunctionalColorGroupViewModel(
FunctionalColors.Add(new FunctionalColorGroupViewModel("Background", _lightResourceDictionary, _darkResourceDictionary, ColorTokens.BackgroundTokens)); "Success", _lightResourceDictionary, _darkResourceDictionary, ColorTokens.SuccessTokens));
FunctionalColors.Add(new FunctionalColorGroupViewModel("Fill", _lightResourceDictionary, _darkResourceDictionary, ColorTokens.FillTokens)); FunctionalColors.Add(new FunctionalColorGroupViewModel(
FunctionalColors.Add(new FunctionalColorGroupViewModel("Border", _lightResourceDictionary, _darkResourceDictionary, ColorTokens.BorderTokens)); "Warning", _lightResourceDictionary, _darkResourceDictionary, ColorTokens.WarningTokens));
FunctionalColors.Add(new FunctionalColorGroupViewModel("Disabled", _lightResourceDictionary, _darkResourceDictionary, ColorTokens.DisabledTokens)); FunctionalColors.Add(new FunctionalColorGroupViewModel(
"Danger", _lightResourceDictionary, _darkResourceDictionary, ColorTokens.DangerTokens));
FunctionalColors.Add(new FunctionalColorGroupViewModel(
"Text", _lightResourceDictionary, _darkResourceDictionary, ColorTokens.TextTokens));
FunctionalColors.Add(new FunctionalColorGroupViewModel(
"Link", _lightResourceDictionary, _darkResourceDictionary, ColorTokens.LinkTokens));
FunctionalColors.Add(new FunctionalColorGroupViewModel(
"Background", _lightResourceDictionary, _darkResourceDictionary, ColorTokens.BackgroundTokens));
FunctionalColors.Add(new FunctionalColorGroupViewModel(
"Fill", _lightResourceDictionary, _darkResourceDictionary, ColorTokens.FillTokens));
FunctionalColors.Add(new FunctionalColorGroupViewModel(
"Border", _lightResourceDictionary, _darkResourceDictionary, ColorTokens.BorderTokens));
FunctionalColors.Add(new FunctionalColorGroupViewModel(
"Disabled", _lightResourceDictionary, _darkResourceDictionary, ColorTokens.DisabledTokens));
FunctionalColors.Add(new FunctionalColorGroupViewModel(
"Others", _lightResourceDictionary, _darkResourceDictionary, ColorTokens.OtherTokens));
} }
private void InitializeShadows() private void InitializeShadows()
{ {
Shadows.Add(new ShadowGroupViewModel("Shadow", _lightResourceDictionary, _darkResourceDictionary, ColorTokens.ShadowTokens)); Shadows.Add(new ShadowGroupViewModel(
} "Shadow", _lightResourceDictionary, _darkResourceDictionary, ColorTokens.ShadowTokens));
private void OnClickColorItem(PaletteDemoViewModel vm, ColorItemViewModel item)
{
SelectedColor = item;
} }
} }
public class ColorListViewModel : ObservableObject public partial class ColorListViewModel : ObservableObject
{ {
private ObservableCollection<ColorItemViewModel>? _colors; public ObservableCollection<ColorItemViewModel> Color { get; set; } = [];
public ObservableCollection<ColorItemViewModel>? Color [ObservableProperty] private string? _seriesName;
{
get => _colors;
set => SetProperty(ref _colors, value);
}
private string? _seriesName;
public string? SeriesName
{
get => _seriesName;
set => SetProperty(ref _seriesName, value);
}
internal void Initialize(IResourceDictionary? resourceDictionary, string color, bool light) internal void Initialize(IResourceDictionary? resourceDictionary, string color, bool light)
{ {
if (resourceDictionary is null) if (resourceDictionary is null) return;
{
return;
}
SeriesName = color; SeriesName = color;
Color = [];
for (var i = 0; i < 10; i++) for (var i = 0; i < 10; i++)
{ {
var key = "Semi" + color + i; var key = $"Semi{color}{i}";
if (resourceDictionary.TryGetValue(key, out var value)) if (resourceDictionary.TryGetValue(key, out var value) && value is ISolidColorBrush brush)
{ {
if (value is ISolidColorBrush brush) var name = $"{color} {i}";
{ var item = new ColorItemViewModel(name, brush, key, light, i);
string name = color + " " + i; item.ColorResourceKey = $"{item.ResourceKey}Color";
var item = new ColorItemViewModel(name, brush, key, light, i); Color.Add(item);
item.ColorResourceKey = item.ResourceKey + "Color";
Color.Add(item);
}
} }
} }
} }
} }
public class ColorItemViewModel : ObservableObject public partial class ColorItemViewModel : ObservableObject
{ {
private IBrush _brush = null!; [ObservableProperty] private IBrush? _brush;
[ObservableProperty] private IBrush? _textBrush;
[ObservableProperty] private string? _colorDisplayName;
[ObservableProperty] private string? _resourceKey;
[ObservableProperty] private string? _colorResourceKey;
[ObservableProperty] private string? _hex;
public IBrush Brush public string CopyText =>
{ $"""
get => _brush; <StaticResource x:Key="" ResourceKey="{ResourceKey}" />
set => SetProperty(ref _brush, value); """;
}
private IBrush _textBrush = null!;
public IBrush TextBrush
{
get => _textBrush;
set => SetProperty(ref _textBrush, value);
}
private string _colorDisplayName = null!;
public string ColorDisplayName
{
get => _colorDisplayName;
set => SetProperty(ref _colorDisplayName, value);
}
private string _resourceKey = null!;
public string ResourceKey
{
get => _resourceKey;
set => SetProperty(ref _resourceKey, value);
}
private string _colorResourceKey = null!;
public string ColorResourceKey
{
get => _colorResourceKey;
set => SetProperty(ref _colorResourceKey, value);
}
private string _hex = null!;
public string Hex
{
get => _hex;
set => SetProperty(ref _hex, value);
}
public ColorItemViewModel(string colorDisplayName, ISolidColorBrush brush, string resourceKey, bool light, public ColorItemViewModel(string colorDisplayName, ISolidColorBrush brush, string resourceKey, bool light,
int index) int index)
@@ -212,7 +148,8 @@ public class ColorItemViewModel : ObservableObject
ColorDisplayName = colorDisplayName; ColorDisplayName = colorDisplayName;
Brush = brush; Brush = brush;
ResourceKey = resourceKey; ResourceKey = resourceKey;
Hex = brush.ToString().ToUpperInvariant(); var hex = ColorConverter.ToHex.Convert(brush.Color, typeof(string), false, CultureInfo.InvariantCulture);
Hex = hex as string ?? string.Empty;
if ((light && index < 5) || (!light && index >= 5)) if ((light && index < 5) || (!light && index >= 5))
{ {
TextBrush = Brushes.Black; TextBrush = Brushes.Black;
@@ -224,16 +161,9 @@ public class ColorItemViewModel : ObservableObject
} }
} }
public class FunctionalColorGroupViewModel : ObservableObject public partial class FunctionalColorGroupViewModel : ObservableObject
{ {
private string _title = null!; [ObservableProperty] private string? _title;
public string Title
{
get => _title;
set => SetProperty(ref _title, value);
}
public ObservableCollection<ColorItemViewModel> LightColors { get; set; } = []; public ObservableCollection<ColorItemViewModel> LightColors { get; set; } = [];
public ObservableCollection<ColorItemViewModel> DarkColors { get; set; } = []; public ObservableCollection<ColorItemViewModel> DarkColors { get; set; } = [];
@@ -262,31 +192,16 @@ public class FunctionalColorGroupViewModel : ObservableObject
} }
} }
public class ShadowItemViewModel : ObservableObject public partial class ShadowItemViewModel : ObservableObject
{ {
private string _shadowDisplayName = null!; [ObservableProperty] private string? _shadowDisplayName;
[ObservableProperty] private string? _resourceKey;
[ObservableProperty] private string? _boxShadowValue;
public string ShadowDisplayName public string CopyText =>
{ $"""
get => _shadowDisplayName; <StaticResource x:Key="" ResourceKey="{ResourceKey}" />
set => SetProperty(ref _shadowDisplayName, value); """;
}
private string _resourceKey = null!;
public string ResourceKey
{
get => _resourceKey;
set => SetProperty(ref _resourceKey, value);
}
private string _boxShadowValue = null!;
public string BoxShadowValue
{
get => _boxShadowValue;
set => SetProperty(ref _boxShadowValue, value);
}
public ShadowItemViewModel(string shadowDisplayName, BoxShadows boxShadows, string resourceKey) public ShadowItemViewModel(string shadowDisplayName, BoxShadows boxShadows, string resourceKey)
{ {
@@ -296,16 +211,9 @@ public class ShadowItemViewModel : ObservableObject
} }
} }
public class ShadowGroupViewModel : ObservableObject public partial class ShadowGroupViewModel : ObservableObject
{ {
private string _title = null!; [ObservableProperty] private string? _title;
public string Title
{
get => _title;
set => SetProperty(ref _title, value);
}
public ObservableCollection<ShadowItemViewModel> LightShadows { get; set; } = []; public ObservableCollection<ShadowItemViewModel> LightShadows { get; set; } = [];
public ObservableCollection<ShadowItemViewModel> DarkShadows { get; set; } = []; public ObservableCollection<ShadowItemViewModel> DarkShadows { get; set; } = [];
@@ -334,131 +242,3 @@ public class ShadowGroupViewModel : ObservableObject
} }
} }
} }
public static class ColorTokens
{
public static IReadOnlyList<Tuple<string, string>> PrimaryTokens { get; } = new List<Tuple<string, string>>
{
new("SemiColorPrimary", "Primary"),
new("SemiColorPrimaryPointerover", "Primary Pointerover"),
new("SemiColorPrimaryActive", "Primary Active"),
new("SemiColorPrimaryDisabled", "Primary Disabled"),
new("SemiColorPrimaryLight", "Primary Light"),
new("SemiColorPrimaryLightPointerover", "Primary Light Pointerover"),
new("SemiColorPrimaryLightActive", "Primary Light Active"),
};
public static IReadOnlyList<Tuple<string, string>> SecondaryTokens { get; } = new List<Tuple<string, string>>
{
new("SemiColorSecondary", "Secondary"),
new("SemiColorSecondaryPointerover", "Secondary Pointerover"),
new("SemiColorSecondaryActive", "Secondary Active"),
new("SemiColorSecondaryDisabled", "Secondary Disabled"),
new("SemiColorSecondaryLight", "Secondary Light"),
new("SemiColorSecondaryLightPointerover", "Secondary Light Pointerover"),
new("SemiColorSecondaryLightActive", "Secondary Light Active"),
};
public static IReadOnlyList<Tuple<string, string>> TertiaryTokens { get; } = new List<Tuple<string, string>>
{
new("SemiColorTertiary", "Tertiary"),
new("SemiColorTertiaryPointerover", "Tertiary Pointerover"),
new("SemiColorTertiaryActive", "Tertiary Active"),
new("SemiColorTertiaryLight", "Tertiary Light"),
new("SemiColorTertiaryLightPointerover", "Tertiary Light Pointerover"),
new("SemiColorTertiaryLightActive", "Tertiary Light Active"),
};
public static IReadOnlyList<Tuple<string, string>> InformationTokens { get; } = new List<Tuple<string, string>>
{
new("SemiColorInformation", "Information"),
new("SemiColorInformationPointerover", "Information Pointerover"),
new("SemiColorInformationActive", "Information Active"),
new("SemiColorInformationDisabled", "Information Disabled"),
new("SemiColorInformationLight", "Information Light"),
new("SemiColorInformationLightPointerover", "Information Light Pointerover"),
new("SemiColorInformationLightActive", "Information Light Active"),
};
public static IReadOnlyList<Tuple<string, string>> SuccessTokens { get; } = new List<Tuple<string, string>>
{
new("SemiColorSuccess", "Success"),
new("SemiColorSuccessPointerover", "Success Pointerover"),
new("SemiColorSuccessActive", "Success Active"),
new("SemiColorSuccessDisabled", "Success Disabled"),
new("SemiColorSuccessLight", "Success Light"),
new("SemiColorSuccessLightPointerover", "Success Light Pointerover"),
new("SemiColorSuccessLightActive", "Success Light Active"),
};
public static IReadOnlyList<Tuple<string, string>> WarningTokens { get; } = new List<Tuple<string, string>>
{
new("SemiColorWarning", "Warning"),
new("SemiColorWarningPointerover", "Warning Pointerover"),
new("SemiColorWarningActive", "Warning Active"),
new("SemiColorWarningLight", "Warning Light"),
new("SemiColorWarningLightPointerover", "Warning Light Pointerover"),
new("SemiColorWarningLightActive", "Warning Light Active"),
};
public static IReadOnlyList<Tuple<string, string>> DangerTokens { get; } = new List<Tuple<string, string>>
{
new("SemiColorDanger", "Danger"),
new("SemiColorDangerPointerover", "Danger Pointerover"),
new("SemiColorDangerActive", "Danger Active"),
new("SemiColorDangerLight", "Danger Light"),
new("SemiColorDangerLightPointerover", "Danger Light Pointerover"),
new("SemiColorDangerLightActive", "Danger Light Active"),
};
public static IReadOnlyList<Tuple<string, string>> TextTokens { get; } = new List<Tuple<string, string>>
{
new("SemiColorText0", "Text 0"),
new("SemiColorText1", "Text 1"),
new("SemiColorText2", "Text 2"),
new("SemiColorText3", "Text 3"),
};
public static IReadOnlyList<Tuple<string, string>> LinkTokens { get; } = new List<Tuple<string, string>>
{
new("SemiColorLink", "Link"),
new("SemiColorLinkPointerover", "Link Pointerover"),
new("SemiColorLinkActive", "Link Active"),
new("SemiColorLinkVisited", "Link Visited"),
};
public static IReadOnlyList<Tuple<string, string>> BackgroundTokens { get; } = new List<Tuple<string, string>>
{
new("SemiColorBackground0", "Background 0"),
new("SemiColorBackground1", "Background 1"),
new("SemiColorBackground2", "Background 2"),
new("SemiColorBackground3", "Background 3"),
new("SemiColorBackground4", "Background 4"),
};
public static IReadOnlyList<Tuple<string, string>> FillTokens { get; } = new List<Tuple<string, string>>
{
new("SemiColorFill0", "Fill 0"),
new("SemiColorFill1", "Fill 1"),
new("SemiColorFill2", "Fill 2"),
};
public static IReadOnlyList<Tuple<string, string>> BorderTokens { get; } = new List<Tuple<string, string>>
{
new("SemiColorBorder", "Border"),
};
public static IReadOnlyList<Tuple<string, string>> DisabledTokens { get; } = new List<Tuple<string, string>>
{
new("SemiColorDisabledText", "Disabled Text"),
new("SemiColorDisabledBorder", "Disabled Border"),
new("SemiColorDisabledBackground", "Disabled Background"),
new("SemiColorDisabledFill", "Disabled Fill"),
};
public static IReadOnlyList<Tuple<string, string>> ShadowTokens { get; } = new List<Tuple<string, string>>
{
new("SemiColorShadow", "Shadow"),
new("SemiShadowElevated", "Shadow Elevated"),
};
}

View File

@@ -0,0 +1,123 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using Avalonia;
using Avalonia.Collections;
using Avalonia.Controls;
using Avalonia.Media;
using CommunityToolkit.Mvvm.ComponentModel;
using Semi.Avalonia.Tokens;
namespace Semi.Avalonia.Demo.ViewModels;
public class VariablesDemoViewModel : ObservableObject
{
public DataGridCollectionView GridData { get; set; }
public VariablesDemoViewModel()
{
IResourceDictionary dictionary = new Variables();
foreach (var token in Tokens)
{
if (token.ResourceKey is not null && dictionary.TryGetValue(token.ResourceKey, out var value))
{
token.Type = value?.GetType();
token.Value = GetValueString(value);
}
}
GridData = new DataGridCollectionView(Tokens);
GridData.GroupDescriptions.Add(new DataGridPathGroupDescription(nameof(VariableItem.Category)));
}
private static string GetValueString(object? value)
{
if (value is null) return string.Empty;
return value switch
{
double d => d.ToString(CultureInfo.InvariantCulture),
CornerRadius c => c.IsUniform ? $"{c.TopLeft}" : c.ToString(),
Thickness t => t.IsUniform ? $"{t.Left}" : t.ToString(),
FontWeight fontWeight => Convert.ToInt32(fontWeight).ToString(),
FontFamily fontFamily => fontFamily.FamilyNames.ToString(),
_ => value.ToString()
};
}
private static List<VariableItem> Tokens { get; set; } =
[
new("Height", "SemiHeightControlSmall"),
new("Height", "SemiHeightControlDefault"),
new("Height", "SemiHeightControlLarge"),
new("Icon Size", "SemiWidthIconExtraSmall"),
new("Icon Size", "SemiWidthIconSmall"),
new("Icon Size", "SemiWidthIconMedium"),
new("Icon Size", "SemiWidthIconLarge"),
new("Icon Size", "SemiWidthIconExtraLarge"),
new("Border CornerRadius", "SemiBorderRadiusExtraSmall"),
new("Border CornerRadius", "SemiBorderRadiusSmall"),
new("Border CornerRadius", "SemiBorderRadiusMedium"),
new("Border CornerRadius", "SemiBorderRadiusLarge"),
new("Border CornerRadius", "SemiBorderRadiusFull"),
new("Border Spacing", "SemiBorderSpacing"),
new("Border Spacing", "SemiBorderSpacingControl"),
new("Border Spacing", "SemiBorderSpacingControlFocus"),
new("Border Thickness", "SemiBorderThickness"),
new("Border Thickness", "SemiBorderThicknessControl"),
new("Border Thickness", "SemiBorderThicknessControlFocus"),
new("Spacing", "SemiSpacingNone"),
new("Spacing", "SemiSpacingSuperTight"),
new("Spacing", "SemiSpacingExtraTight"),
new("Spacing", "SemiSpacingTight"),
new("Spacing", "SemiSpacingBaseTight"),
new("Spacing", "SemiSpacingBase"),
new("Spacing", "SemiSpacingBaseLoose"),
new("Spacing", "SemiSpacingLoose"),
new("Spacing", "SemiSpacingExtraLoose"),
new("Spacing", "SemiSpacingSuperLoose"),
new("Thickness", "SemiThicknessNone"),
new("Thickness", "SemiThicknessSuperTight"),
new("Thickness", "SemiThicknessExtraTight"),
new("Thickness", "SemiThicknessTight"),
new("Thickness", "SemiThicknessBaseTight"),
new("Thickness", "SemiThicknessBase"),
new("Thickness", "SemiThicknessBaseLoose"),
new("Thickness", "SemiThicknessLoose"),
new("Thickness", "SemiThicknessExtraLoose"),
new("Thickness", "SemiThicknessSuperLoose"),
new("FontSize", "SemiFontSizeSmall"),
new("FontSize", "SemiFontSizeRegular"),
new("FontSize", "SemiFontSizeHeader6"),
new("FontSize", "SemiFontSizeHeader5"),
new("FontSize", "SemiFontSizeHeader4"),
new("FontSize", "SemiFontSizeHeader3"),
new("FontSize", "SemiFontSizeHeader2"),
new("FontSize", "SemiFontSizeHeader1"),
new("FontWeight", "SemiFontWeightLight"),
new("FontWeight", "SemiFontWeightRegular"),
new("FontWeight", "SemiFontWeightBold"),
new("FontFamily", "SemiFontFamilyRegular"),
];
}
public class VariableItem()
{
public string? Category { get; set; }
public string? ResourceKey { get; set; }
public Type? Type { get; set; }
public string? Value { get; set; }
public string? Description { get; set; }
public VariableItem(string category, string resourceKey, string description = "") : this()
{
Category = category;
ResourceKey = resourceKey;
Description = description;
}
public string CopyText =>
$"""
<StaticResource x:Key="" ResourceKey="{ResourceKey}" />
""";
}

View File

@@ -11,14 +11,6 @@
x:CompileBindings="True" x:CompileBindings="True"
x:DataType="views:MainViewModel" x:DataType="views:MainViewModel"
mc:Ignorable="d"> mc:Ignorable="d">
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceInclude Source="../Themes/TabMenu.axaml" />
<ResourceInclude Source="../Themes/ToggleSwitch.axaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
<Grid RowDefinitions="Auto, *"> <Grid RowDefinitions="Auto, *">
<Border <Border
Grid.Row="0" Grid.Row="0"
@@ -29,7 +21,8 @@
<StackPanel Orientation="Horizontal" Spacing="8"> <StackPanel Orientation="Horizontal" Spacing="8">
<ToggleSwitch <ToggleSwitch
Name="ExpandButton" Name="ExpandButton"
Theme="{DynamicResource SplitViewToggleSwitch}" /> Theme="{DynamicResource IconBorderlessToggleSwitch}"
Content="{StaticResource SemiIconSidebar}" />
<SelectableTextBlock <SelectableTextBlock
VerticalAlignment="Center" VerticalAlignment="Center"
Classes="H6" Classes="H6"
@@ -44,36 +37,27 @@
Text="{ReflectionBinding #tab.SelectedItem.Header}" /> Text="{ReflectionBinding #tab.SelectedItem.Header}" />
</StackPanel> </StackPanel>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right"> <StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
<StackPanel.Styles> <Button
<Style Selector="Button"> Theme="{DynamicResource IconBorderlessButton}"
<Setter Property="Theme" Value="{DynamicResource BorderlessButton}" /> Command="{Binding OpenUrlCommand}"
<Setter Property="Padding" Value="8" /> CommandParameter="{Binding DocumentationUrl}"
<Setter Property="Foreground" Value="{DynamicResource ButtonDefaultTertiaryForeground}" /> Content="{StaticResource SemiIconGlobe}" />
</Style>
<Style Selector="ToggleSwitch">
<Setter Property="Theme" Value="{DynamicResource ThemeToggleSwitch}" />
<Setter Property="Foreground" Value="{DynamicResource ButtonDefaultTertiaryForeground}" />
</Style>
<Style Selector="PathIcon">
<Setter Property="Theme" Value="{DynamicResource InnerPathIcon}" />
</Style>
</StackPanel.Styles>
<Button Command="{Binding OpenUrlCommand}" CommandParameter="{Binding DocumentationUrl}"> <Button
<PathIcon Data="{StaticResource SemiIconGlobe}" /> Theme="{DynamicResource IconBorderlessButton}"
</Button> Command="{Binding OpenUrlCommand}"
CommandParameter="{Binding RepoUrl}"
<Button Command="{Binding OpenUrlCommand}" CommandParameter="{Binding RepoUrl}"> Content="{StaticResource SemiIconGithubLogo}" />
<PathIcon Data="{StaticResource SemiIconGithubLogo}" />
</Button>
<ToggleSwitch <ToggleSwitch
Theme="{DynamicResource IconBorderlessToggleSwitch}"
Command="{Binding ToggleThemeCommand}" Command="{Binding ToggleThemeCommand}"
OnContent="{StaticResource SemiIconMoon}" OnContent="{StaticResource SemiIconMoon}"
OffContent="{StaticResource SemiIconSun}" /> OffContent="{StaticResource SemiIconSun}" />
<Button> <Button
<PathIcon Data="{StaticResource SemiIconMenu}" /> Theme="{DynamicResource IconBorderlessButton}"
Content="{StaticResource SemiIconMenu}">
<Button.Flyout> <Button.Flyout>
<MenuFlyout Placement="Bottom" ItemsSource="{Binding MenuItems}" /> <MenuFlyout Placement="Bottom" ItemsSource="{Binding MenuItems}" />
</Button.Flyout> </Button.Flyout>
@@ -107,6 +91,9 @@
<TabItem Header="HighContrastTheme"> <TabItem Header="HighContrastTheme">
<pages:HighContrastDemo /> <pages:HighContrastDemo />
</TabItem> </TabItem>
<TabItem Header="Variables">
<pages:VariablesDemo />
</TabItem>
<TabItem Header="Icon"> <TabItem Header="Icon">
<pages:IconDemo /> <pages:IconDemo />
</TabItem> </TabItem>

View File

@@ -1,5 +1,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Globalization;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows.Input; using System.Windows.Input;
using Avalonia; using Avalonia;
@@ -32,9 +33,14 @@ public partial class MainViewModel : ObservableObject
[ [
new MenuItemViewModel new MenuItemViewModel
{ {
Header = "High Contrast Theme", Header = "Theme",
Items = Items =
[ [
new MenuItemViewModel
{
Header = "Auto",
Command = FollowSystemThemeCommand
},
new MenuItemViewModel new MenuItemViewModel
{ {
Header = "Aquatic", Header = "Aquatic",
@@ -60,10 +66,71 @@ public partial class MainViewModel : ObservableObject
CommandParameter = SemiTheme.NightSky CommandParameter = SemiTheme.NightSky
}, },
] ]
},
new MenuItemViewModel
{
Header = "Locale",
Items =
[
new MenuItemViewModel
{
Header = "简体中文",
Command = SelectLocaleCommand,
CommandParameter = new CultureInfo("zh-cn")
},
new MenuItemViewModel
{
Header = "English",
Command = SelectLocaleCommand,
CommandParameter = new CultureInfo("en-us")
},
new MenuItemViewModel
{
Header = "日本語",
Command = SelectLocaleCommand,
CommandParameter = new CultureInfo("ja-jp")
},
new MenuItemViewModel
{
Header = "Українська",
Command = SelectLocaleCommand,
CommandParameter = new CultureInfo("uk-ua")
},
new MenuItemViewModel
{
Header = "Русский",
Command = SelectLocaleCommand,
CommandParameter = new CultureInfo("ru-ru")
},
new MenuItemViewModel
{
Header = "繁體中文",
Command = SelectLocaleCommand,
CommandParameter = new CultureInfo("zh-tw")
},
new MenuItemViewModel
{
Header = "Deutsch",
Command = SelectLocaleCommand,
CommandParameter = new CultureInfo("de-de")
},
new MenuItemViewModel
{
Header = "Español",
Command = SelectLocaleCommand,
CommandParameter = new CultureInfo("es-es")
},
]
} }
]; ];
} }
[RelayCommand]
private void FollowSystemTheme()
{
Application.Current?.RegisterFollowSystemTheme();
}
[RelayCommand] [RelayCommand]
private void ToggleTheme() private void ToggleTheme()
{ {
@@ -71,16 +138,24 @@ public partial class MainViewModel : ObservableObject
if (app is null) return; if (app is null) return;
var theme = app.ActualThemeVariant; var theme = app.ActualThemeVariant;
app.RequestedThemeVariant = theme == ThemeVariant.Dark ? ThemeVariant.Light : ThemeVariant.Dark; app.RequestedThemeVariant = theme == ThemeVariant.Dark ? ThemeVariant.Light : ThemeVariant.Dark;
app.UnregisterFollowSystemTheme();
} }
[RelayCommand] [RelayCommand]
private void SelectTheme(object? obj) private void SelectTheme(object? obj)
{ {
var app = Application.Current; var app = Application.Current;
if (app is not null) if (app is null) return;
{ app.RequestedThemeVariant = obj as ThemeVariant;
app.RequestedThemeVariant = obj as ThemeVariant; app.UnregisterFollowSystemTheme();
} }
[RelayCommand]
private void SelectLocale(object? obj)
{
var app = Application.Current;
if (app is null) return;
SemiTheme.OverrideLocaleResources(app, obj as CultureInfo);
} }
[RelayCommand] [RelayCommand]

View File

@@ -8,7 +8,7 @@
Title="Semi.Avalonia.Demo" Title="Semi.Avalonia.Demo"
d:DesignHeight="450" d:DesignHeight="450"
d:DesignWidth="800" d:DesignWidth="800"
Icon="/Assets/avalonia-logo.ico" Icon="/Assets/irihi.ico"
mc:Ignorable="d"> mc:Ignorable="d">
<views:MainView /> <views:MainView />
</Window> </Window>

View File

@@ -2,11 +2,10 @@
x:Class="Semi.Avalonia.TreeDataGrid.Demo.App" x:Class="Semi.Avalonia.TreeDataGrid.Demo.App"
xmlns="https://github.com/avaloniaui" xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
RequestedThemeVariant="Default"> xmlns:semi="https://irihi.tech/semi">
<!-- "Default" ThemeVariant follows system theme variant. "Dark" or "Light" are other available options. -->
<Application.Styles> <Application.Styles>
<StyleInclude Source="avares://Semi.Avalonia/Themes/Index.axaml" /> <semi:SemiTheme Locale="zh-CN" />
<StyleInclude Source="avares://Semi.Avalonia.TreeDataGrid/Index.axaml" /> <StyleInclude Source="avares://Semi.Avalonia.TreeDataGrid/Index.axaml" />
</Application.Styles> </Application.Styles>
</Application> </Application>

View File

@@ -3,15 +3,13 @@ using System.Collections.Generic;
using System.Globalization; using System.Globalization;
using Avalonia; using Avalonia;
using Avalonia.Data.Converters; using Avalonia.Data.Converters;
using Avalonia.Media;
using Avalonia.Metadata; using Avalonia.Metadata;
namespace Semi.Avalonia.TreeDataGrid.Demo.Converters; namespace Semi.Avalonia.TreeDataGrid.Demo.Converters;
public class FileIconConverter: IMultiValueConverter public class FileIconConverter : IMultiValueConverter
{ {
[Content] [Content] public IDictionary<string, object?> Items { get; } = new Dictionary<string, object?>();
public Dictionary<string, PathGeometry> Items { get; set; } = new Dictionary<string, PathGeometry>();
public object? Convert(IList<object?> values, Type targetType, object? parameter, CultureInfo culture) public object? Convert(IList<object?> values, Type targetType, object? parameter, CultureInfo culture)
{ {
@@ -21,8 +19,10 @@ public class FileIconConverter: IMultiValueConverter
{ {
return Items["file"]; return Items["file"];
} }
return isOpen ? Items["folderOpen"] : Items["folderClosed"]; return isOpen ? Items["folderOpen"] : Items["folderClosed"];
} }
return AvaloniaProperty.UnsetValue; return AvaloniaProperty.UnsetValue;
} }
} }

View File

@@ -13,9 +13,9 @@
mc:Ignorable="d"> mc:Ignorable="d">
<Window.Resources> <Window.Resources>
<converters:FileIconConverter x:Key="FileIconConverter"> <converters:FileIconConverter x:Key="FileIconConverter">
<PathGeometry x:Key="file">M14,2H6A2,2 0 0,0 4,4V20A2,2 0 0,0 6,22H18A2,2 0 0,0 20,20V8L14,2M18,20H6V4H13V9H18V20Z</PathGeometry> <StaticResource x:Key="file" ResourceKey="SemiIconFile" />
<PathGeometry x:Key="folderOpen">M6.1,10L4,18V8H21A2,2 0 0,0 19,6H12L10,4H4A2,2 0 0,0 2,6V18A2,2 0 0,0 4,20H19C19.9,20 20.7,19.4 20.9,18.5L23.2,10H6.1M19,18H6L7.6,12H20.6L19,18Z</PathGeometry> <StaticResource x:Key="folderOpen" ResourceKey="SemiIconFolderOpen" />
<PathGeometry x:Key="folderClosed">M20,18H4V8H20M20,6H12L10,4H4C2.89,4 2,4.89 2,6V18A2,2 0 0,0 4,20H20A2,2 0 0,0 22,18V8C22,6.89 21.1,6 20,6Z</PathGeometry> <StaticResource x:Key="folderClosed" ResourceKey="SemiIconFolder" />
</converters:FileIconConverter> </converters:FileIconConverter>
</Window.Resources> </Window.Resources>
<Grid RowDefinitions="Auto, *"> <Grid RowDefinitions="Auto, *">
@@ -58,7 +58,7 @@
</TreeDataGrid.Resources> </TreeDataGrid.Resources>
<TreeDataGrid.Styles> <TreeDataGrid.Styles>
<Style Selector="TreeDataGrid TreeDataGridRow:nth-last-child(2n)"> <Style Selector="TreeDataGrid TreeDataGridRow:nth-last-child(2n)">
<Setter Property="Background" Value="#20808080" /> <Setter Property="Background" Value="{DynamicResource SemiColorFill0}" />
</Style> </Style>
</TreeDataGrid.Styles> </TreeDataGrid.Styles>
</TreeDataGrid> </TreeDataGrid>
@@ -86,10 +86,8 @@
<DataTemplate x:Key="FileNameCell" DataType="vm:FileNodeViewModel"> <DataTemplate x:Key="FileNameCell" DataType="vm:FileNodeViewModel">
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
<PathIcon <PathIcon
Width="16" Theme="{StaticResource InnerPathIcon}"
Height="16" Margin="8,0">
Margin="8,0"
VerticalAlignment="Center">
<PathIcon.Data> <PathIcon.Data>
<MultiBinding Converter="{StaticResource FileIconConverter}"> <MultiBinding Converter="{StaticResource FileIconConverter}">
<Binding Path="IsDirectory" /> <Binding Path="IsDirectory" />
@@ -127,7 +125,7 @@
</TreeDataGrid.Resources> </TreeDataGrid.Resources>
<TreeDataGrid.Styles> <TreeDataGrid.Styles>
<Style Selector="TreeDataGrid TreeDataGridRow:nth-child(2n)"> <Style Selector="TreeDataGrid TreeDataGridRow:nth-child(2n)">
<Setter Property="Background" Value="#20808080" /> <Setter Property="Background" Value="{DynamicResource SemiColorFill0}" />
</Style> </Style>
</TreeDataGrid.Styles> </TreeDataGrid.Styles>
</TreeDataGrid> </TreeDataGrid>

View File

@@ -1,10 +1,10 @@
using Avalonia; using System;
using System; using Avalonia;
using Avalonia.Media; using Avalonia.Media;
namespace Semi.Avalonia.TreeDataGrid.Demo; namespace Semi.Avalonia.TreeDataGrid.Demo;
class Program sealed class Program
{ {
// Initialization code. Don't use any Avalonia, third-party APIs or any // Initialization code. Don't use any Avalonia, third-party APIs or any
// SynchronizationContext-reliant code before AppMain is called: things aren't initialized // SynchronizationContext-reliant code before AppMain is called: things aren't initialized

View File

@@ -12,18 +12,21 @@
<!--<IncludeNativeLibrariesForSelfExtract>true</IncludeNativeLibrariesForSelfExtract>--> <!--<IncludeNativeLibrariesForSelfExtract>true</IncludeNativeLibrariesForSelfExtract>-->
</PropertyGroup> </PropertyGroup>
<Import Project="../Directory.Build.props" /> <Import Project="../Directory.Build.props"/>
<ItemGroup> <ItemGroup>
<PackageReference Include="Avalonia" Version="$(AvaloniaVersion)" /> <PackageReference Include="Avalonia" Version="$(AvaloniaVersion)"/>
<PackageReference Include="Avalonia.Desktop" Version="$(AvaloniaVersion)" /> <PackageReference Include="Avalonia.Desktop" Version="$(AvaloniaVersion)"/>
<!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.--> <!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->
<PackageReference Condition="'$(Configuration)' == 'Debug'" Include="Avalonia.Diagnostics" Version="$(AvaloniaVersion)" /> <PackageReference Include="Avalonia.Diagnostics" Version="$(AvaloniaVersion)">
<PackageReference Include="CommunityToolkit.Mvvm" Version="$(CommunityToolkitVersion)" /> <IncludeAssets Condition="'$(Configuration)' != 'Debug'">None</IncludeAssets>
<PrivateAssets Condition="'$(Configuration)' != 'Debug'">All</PrivateAssets>
</PackageReference>
<PackageReference Include="CommunityToolkit.Mvvm" Version="$(CommunityToolkitVersion)"/>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\..\src\Semi.Avalonia.TreeDataGrid\Semi.Avalonia.TreeDataGrid.csproj" /> <ProjectReference Include="..\..\src\Semi.Avalonia.TreeDataGrid\Semi.Avalonia.TreeDataGrid.csproj"/>
<ProjectReference Include="..\..\src\Semi.Avalonia\Semi.Avalonia.csproj" /> <ProjectReference Include="..\..\src\Semi.Avalonia\Semi.Avalonia.csproj"/>
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@@ -1,9 +1,9 @@
<Project> <Project>
<PropertyGroup> <PropertyGroup>
<TargetFrameworks>net6.0;net8.0;netstandard2.0</TargetFrameworks> <TargetFrameworks>netstandard2.0;net6.0;net8.0</TargetFrameworks>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<LangVersion>latest</LangVersion> <LangVersion>latest</LangVersion>
<Version>11.2.1.2</Version> <Version>11.2.1.6</Version>
<Authors>IRIHI Technology Co., Ltd.</Authors> <Authors>IRIHI Technology Co., Ltd.</Authors>
<Description>Avalonia Theme inspired by Semi Design.</Description> <Description>Avalonia Theme inspired by Semi Design.</Description>
<RepositoryUrl>https://github.com/irihitech/Semi.Avalonia</RepositoryUrl> <RepositoryUrl>https://github.com/irihitech/Semi.Avalonia</RepositoryUrl>

View File

@@ -0,0 +1,3 @@
using Avalonia.Metadata;
[assembly: XmlnsDefinition("https://irihi.tech/semi", "Semi.Avalonia.ColorPicker")]

View File

@@ -1,62 +1,48 @@
<ResourceDictionary <ResourceDictionary
xmlns="https://github.com/avaloniaui" xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:controls="using:Avalonia.Controls"
xmlns:converters="using:Avalonia.Controls.Converters" xmlns:converters="using:Avalonia.Controls.Converters"
xmlns:primitives="using:Avalonia.Controls.Primitives"
x:CompileBindings="True"> x:CompileBindings="True">
<ResourceDictionary.MergedDictionaries>
<ResourceInclude Source="avares://Semi.Avalonia.ColorPicker/Controls/ColorPreviewer.axaml" />
<ResourceInclude Source="avares://Semi.Avalonia.ColorPicker/Controls/ColorSlider.axaml" />
<ResourceInclude Source="avares://Semi.Avalonia.ColorPicker/Controls/ColorSpectrum.axaml" />
<ResourceInclude Source="avares://Semi.Avalonia.ColorPicker/Controls/ColorView.axaml" />
</ResourceDictionary.MergedDictionaries>
<converters:CornerRadiusFilterConverter x:Key="LeftCornerRadiusFilterConverter" Filter="TopLeft, BottomLeft" /> <converters:CornerRadiusFilterConverter x:Key="LeftCornerRadiusFilterConverter" Filter="TopLeft, BottomLeft" />
<converters:ToBrushConverter x:Key="ToBrushConverter" /> <converters:ToBrushConverter x:Key="ToBrushConverter" />
<ControlTheme x:Key="{x:Type ColorPicker}" TargetType="ColorPicker"> <ControlTheme x:Key="{x:Type ColorPicker}" TargetType="ColorPicker">
<Setter Property="CornerRadius" Value="3" />
<Setter Property="Height" Value="32" />
<Setter Property="Width" Value="64" />
<Setter Property="MinWidth" Value="64" /> <Setter Property="MinWidth" Value="64" />
<Setter Property="HorizontalContentAlignment" Value="Stretch" /> <Setter Property="HorizontalAlignment" Value="Center" />
<Setter Property="VerticalContentAlignment" Value="Stretch" /> <Setter Property="MinHeight" Value="{DynamicResource ColorPickerMinHeight}" />
<Setter Property="CornerRadius" Value="{DynamicResource ColorPickerCornerRadius}" />
<Setter Property="Content"> <Setter Property="Content">
<Template> <Template>
<Panel> <Panel>
<Border <Border
Margin="1,1,0,1" Margin="1,1,0,1"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Background="{DynamicResource ColorControlCheckeredBackgroundBrush}" Background="{DynamicResource ColorControlCheckeredBackgroundBrush}"
CornerRadius="{TemplateBinding CornerRadius, CornerRadius="{TemplateBinding CornerRadius, Converter={StaticResource LeftCornerRadiusFilterConverter}}" />
Converter={StaticResource LeftCornerRadiusFilterConverter}}" />
<Border <Border
Margin="1,1,0,1" Margin="1,1,0,1"
HorizontalAlignment="Stretch" Background="{TemplateBinding HsvColor, Converter={StaticResource ToBrushConverter}}"
VerticalAlignment="Stretch" CornerRadius="{TemplateBinding CornerRadius, Converter={StaticResource LeftCornerRadiusFilterConverter}}" />
Background="{TemplateBinding HsvColor,
Converter={StaticResource ToBrushConverter}}"
CornerRadius="{TemplateBinding CornerRadius,
Converter={StaticResource LeftCornerRadiusFilterConverter}}" />
</Panel> </Panel>
</Template> </Template>
</Setter> </Setter>
<Setter Property="Palette"> <Setter Property="Palette">
<controls:FluentColorPalette /> <FluentColorPalette />
</Setter> </Setter>
<Setter Property="Template"> <Setter Property="Template">
<ControlTemplate TargetType="{x:Type ColorPicker}"> <ControlTemplate TargetType="{x:Type ColorPicker}">
<DropDownButton <DropDownButton
Width="{TemplateBinding Width}" Width="{TemplateBinding Width}"
Height="{TemplateBinding Height}" Height="{TemplateBinding Height}"
HorizontalContentAlignment="Stretch" MinWidth="{TemplateBinding MinWidth}"
VerticalContentAlignment="Stretch" MinHeight="{TemplateBinding MinHeight}"
ClipToBounds="True" HorizontalAlignment="{TemplateBinding HorizontalAlignment}"
VerticalAlignment="{TemplateBinding VerticalAlignment}"
HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
Content="{TemplateBinding Content}" Content="{TemplateBinding Content}"
ContentTemplate="{TemplateBinding ContentTemplate}" ContentTemplate="{TemplateBinding ContentTemplate}"
CornerRadius="{TemplateBinding CornerRadius}" CornerRadius="{TemplateBinding CornerRadius}"
ClipToBounds="True"
UseLayoutRounding="False"> UseLayoutRounding="False">
<DropDownButton.Styles> <DropDownButton.Styles>
<Style Selector="FlyoutPresenter.nopadding"> <Style Selector="FlyoutPresenter.nopadding">
@@ -76,7 +62,6 @@
Width="300" Width="300"
Height="300" Height="300"
RowDefinitions="*,Auto"> RowDefinitions="*,Auto">
<Grid.Styles />
<!-- Backgrounds --> <!-- Backgrounds -->
<!-- TODO: Background="{DynamicResource ColorViewTabBackgroundBrush}" --> <!-- TODO: Background="{DynamicResource ColorViewTabBackgroundBrush}" -->
<Border <Border
@@ -114,13 +99,10 @@
<!-- Spectrum Tab --> <!-- Spectrum Tab -->
<TabItem IsVisible="{TemplateBinding IsColorSpectrumVisible}"> <TabItem IsVisible="{TemplateBinding IsColorSpectrumVisible}">
<TabItem.Header> <TabItem.Header>
<Border Height="{DynamicResource ColorViewTabStripHeight}"> <PathIcon
<PathIcon Theme="{StaticResource InnerPathIcon}"
Width="16" Data="{DynamicResource ColorViewSpectrumIconGlyph}"
Height="16" Foreground="{Binding $parent[TabItem].Foreground}" />
Data="{DynamicResource ColorViewSpectrumIconGlyph}"
Foreground="{Binding $parent[TabItem].Foreground}" />
</Border>
</TabItem.Header> </TabItem.Header>
<Grid Margin="12" RowDefinitions="*"> <Grid Margin="12" RowDefinitions="*">
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
@@ -128,7 +110,7 @@
<ColumnDefinition Width="*" /> <ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" MinWidth="32" /> <ColumnDefinition Width="Auto" MinWidth="32" />
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<primitives:ColorSlider <ColorSlider
Name="ColorSpectrumThirdComponentSlider" Name="ColorSpectrumThirdComponentSlider"
Grid.Column="0" Grid.Column="0"
Margin="0,0,12,0" Margin="0,0,12,0"
@@ -142,7 +124,7 @@
IsPerceptive="False" IsPerceptive="False"
IsVisible="{TemplateBinding IsColorSpectrumSliderVisible}" IsVisible="{TemplateBinding IsColorSpectrumSliderVisible}"
Orientation="Vertical" /> Orientation="Vertical" />
<primitives:ColorSpectrum <ColorSpectrum
Name="ColorSpectrum" Name="ColorSpectrum"
Grid.Column="1" Grid.Column="1"
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
@@ -156,7 +138,7 @@
MinSaturation="{TemplateBinding MinSaturation}" MinSaturation="{TemplateBinding MinSaturation}"
MinValue="{TemplateBinding MinValue}" MinValue="{TemplateBinding MinValue}"
Shape="{TemplateBinding ColorSpectrumShape}" /> Shape="{TemplateBinding ColorSpectrumShape}" />
<primitives:ColorSlider <ColorSlider
Name="ColorSpectrumAlphaSlider" Name="ColorSpectrumAlphaSlider"
Grid.Column="2" Grid.Column="2"
Margin="12,0,0,0" Margin="12,0,0,0"
@@ -168,24 +150,21 @@
HsvColor="{Binding HsvColor, ElementName=ColorSpectrum}" HsvColor="{Binding HsvColor, ElementName=ColorSpectrum}"
IsEnabled="{TemplateBinding IsAlphaEnabled}" IsEnabled="{TemplateBinding IsAlphaEnabled}"
Orientation="Vertical"> Orientation="Vertical">
<primitives:ColorSlider.IsVisible> <ColorSlider.IsVisible>
<MultiBinding Converter="{x:Static BoolConverters.And}"> <MultiBinding Converter="{x:Static BoolConverters.And}">
<Binding Path="IsAlphaVisible" RelativeSource="{RelativeSource TemplatedParent}" /> <Binding Path="IsAlphaVisible" RelativeSource="{RelativeSource TemplatedParent}" />
</MultiBinding> </MultiBinding>
</primitives:ColorSlider.IsVisible> </ColorSlider.IsVisible>
</primitives:ColorSlider> </ColorSlider>
</Grid> </Grid>
</TabItem> </TabItem>
<!-- Palette Tab --> <!-- Palette Tab -->
<TabItem IsVisible="{TemplateBinding IsColorPaletteVisible}"> <TabItem IsVisible="{TemplateBinding IsColorPaletteVisible}">
<TabItem.Header> <TabItem.Header>
<Border Height="{DynamicResource ColorViewTabStripHeight}"> <PathIcon
<PathIcon Theme="{StaticResource InnerPathIcon}"
Width="16" Data="{DynamicResource ColorViewPaletteIconGlyph}"
Height="16" Foreground="{Binding $parent[TabItem].Foreground}" />
Data="{DynamicResource ColorViewPaletteIconGlyph}"
Foreground="{Binding $parent[TabItem].Foreground}" />
</Border>
</TabItem.Header> </TabItem.Header>
<ListBox <ListBox
Margin="12" Margin="12"
@@ -218,18 +197,15 @@
<!-- Components Tab --> <!-- Components Tab -->
<TabItem IsVisible="{TemplateBinding IsColorComponentsVisible}"> <TabItem IsVisible="{TemplateBinding IsColorComponentsVisible}">
<TabItem.Header> <TabItem.Header>
<Border Height="{DynamicResource ColorViewTabStripHeight}"> <PathIcon
<PathIcon Theme="{StaticResource InnerPathIcon}"
Width="16" Data="{DynamicResource ColorViewComponentsIconGlyph}"
Height="16" Foreground="{Binding $parent[TabItem].Foreground}" />
Data="{DynamicResource ColorViewComponentsIconGlyph}"
Foreground="{Binding $parent[TabItem].Foreground}" />
</Border>
</TabItem.Header> </TabItem.Header>
<Grid <Grid
Margin="12" Margin="12"
ColumnDefinitions="Auto,*" ColumnDefinitions="Auto,*"
RowDefinitions="Auto,24,1*,1*,1*,1*,12" RowDefinitions="Auto,24,*,*,*,*,12"
Tag="{TemplateBinding ColorModel}"> Tag="{TemplateBinding ColorModel}">
<Grid.Styles> <Grid.Styles>
<Style Selector="NumericUpDown"> <Style Selector="NumericUpDown">
@@ -273,13 +249,13 @@
Grid.Row="0" Grid.Row="0"
Grid.Column="0" Grid.Column="0"
Grid.ColumnSpan="2" Grid.ColumnSpan="2"
ColumnDefinitions="1*,12,1*"> ColumnDefinitions="*,12,*">
<!-- RadioButtonGroup --> <!-- RadioButtonGroup -->
<Border <Border
Padding="2" Padding="2"
Background="{DynamicResource ColorViewRadioButtonPointeroverBackground}" Background="{DynamicResource ColorViewRadioButtonPointeroverBackground}"
CornerRadius="3"> CornerRadius="3">
<Grid ColumnDefinitions="1*,1*" IsVisible="{TemplateBinding IsColorModelVisible}"> <Grid ColumnDefinitions="*,*" IsVisible="{TemplateBinding IsColorModelVisible}">
<RadioButton <RadioButton
Name="RgbRadioButton" Name="RgbRadioButton"
Grid.Column="0" Grid.Column="0"
@@ -288,9 +264,9 @@
Content="RGB" Content="RGB"
CornerRadius="3,0,0,3" CornerRadius="3,0,0,3"
IsChecked="{TemplateBinding ColorModel, IsChecked="{TemplateBinding ColorModel,
Converter={StaticResource EnumToBoolConverter}, Converter={StaticResource EnumToBoolConverter},
ConverterParameter={x:Static controls:ColorModel.Rgba}, ConverterParameter={x:Static ColorModel.Rgba},
Mode=TwoWay}" Mode=TwoWay}"
Theme="{DynamicResource ColorViewRadioButton}" /> Theme="{DynamicResource ColorViewRadioButton}" />
<RadioButton <RadioButton
Name="HsvRadioButton" Name="HsvRadioButton"
@@ -300,21 +276,20 @@
Content="HSV" Content="HSV"
CornerRadius="0,3,3,0" CornerRadius="0,3,3,0"
IsChecked="{TemplateBinding ColorModel, IsChecked="{TemplateBinding ColorModel,
Converter={StaticResource EnumToBoolConverter}, Converter={StaticResource EnumToBoolConverter},
ConverterParameter={x:Static controls:ColorModel.Hsva}, ConverterParameter={x:Static ColorModel.Hsva},
Mode=TwoWay}" Mode=TwoWay}"
Theme="{DynamicResource ColorViewRadioButton}" /> Theme="{DynamicResource ColorViewRadioButton}" />
</Grid> </Grid>
</Border> </Border>
<TextBox <TextBox
Name="PART_HexTextBox" Name="PART_HexTextBox"
Grid.Column="2" Grid.Column="2"
Height="32"
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
AutomationProperties.Name="Hexadecimal Color" AutomationProperties.Name="Hexadecimal Color"
InnerLeftContent="#" InnerLeftContent="#"
IsVisible="{TemplateBinding IsHexInputVisible}" IsVisible="{TemplateBinding IsHexInputVisible}"
MaxLength="9" /> MaxLength="8" />
</Grid> </Grid>
<!-- Color component editing controls --> <!-- Color component editing controls -->
<!-- Component 1 RGB:Red HSV:Hue --> <!-- Component 1 RGB:Red HSV:Hue -->
@@ -333,15 +308,14 @@
NumberFormat="{StaticResource ColorViewComponentNumberFormat}" NumberFormat="{StaticResource ColorViewComponentNumberFormat}"
ShowButtonSpinner="False" ShowButtonSpinner="False"
Value="{Binding Value, ElementName=Component1Slider}" /> Value="{Binding Value, ElementName=Component1Slider}" />
<primitives:ColorSlider <ColorSlider
Name="Component1Slider" Name="Component1Slider"
Grid.Row="2" Grid.Row="2"
Grid.Column="1" Grid.Column="1"
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
VerticalAlignment="Center" VerticalAlignment="Center"
ColorComponent="Component1" ColorComponent="Component1"
ColorModel="{TemplateBinding ColorModel, ColorModel="{TemplateBinding ColorModel,Mode=OneWay}"
Mode=OneWay}"
HsvColor="{Binding HsvColor, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}" HsvColor="{Binding HsvColor, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}"
IsRoundingEnabled="True" IsRoundingEnabled="True"
IsSnapToTickEnabled="True" IsSnapToTickEnabled="True"
@@ -364,15 +338,14 @@
NumberFormat="{StaticResource ColorViewComponentNumberFormat}" NumberFormat="{StaticResource ColorViewComponentNumberFormat}"
ShowButtonSpinner="False" ShowButtonSpinner="False"
Value="{Binding Value, ElementName=Component2Slider}" /> Value="{Binding Value, ElementName=Component2Slider}" />
<primitives:ColorSlider <ColorSlider
Name="Component2Slider" Name="Component2Slider"
Grid.Row="3" Grid.Row="3"
Grid.Column="1" Grid.Column="1"
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
VerticalAlignment="Center" VerticalAlignment="Center"
ColorComponent="Component2" ColorComponent="Component2"
ColorModel="{TemplateBinding ColorModel, ColorModel="{TemplateBinding ColorModel,Mode=OneWay}"
Mode=OneWay}"
HsvColor="{Binding HsvColor, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}" HsvColor="{Binding HsvColor, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}"
IsRoundingEnabled="True" IsRoundingEnabled="True"
IsSnapToTickEnabled="True" IsSnapToTickEnabled="True"
@@ -395,15 +368,14 @@
NumberFormat="{StaticResource ColorViewComponentNumberFormat}" NumberFormat="{StaticResource ColorViewComponentNumberFormat}"
ShowButtonSpinner="False" ShowButtonSpinner="False"
Value="{Binding Value, ElementName=Component3Slider}" /> Value="{Binding Value, ElementName=Component3Slider}" />
<primitives:ColorSlider <ColorSlider
Name="Component3Slider" Name="Component3Slider"
Grid.Row="4" Grid.Row="4"
Grid.Column="1" Grid.Column="1"
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
VerticalAlignment="Center" VerticalAlignment="Center"
ColorComponent="Component3" ColorComponent="Component3"
ColorModel="{TemplateBinding ColorModel, ColorModel="{TemplateBinding ColorModel,Mode=OneWay}"
Mode=OneWay}"
HsvColor="{Binding HsvColor, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}" HsvColor="{Binding HsvColor, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}"
IsRoundingEnabled="True" IsRoundingEnabled="True"
IsSnapToTickEnabled="True" IsSnapToTickEnabled="True"
@@ -433,34 +405,33 @@
</MultiBinding> </MultiBinding>
</NumericUpDown.IsVisible> </NumericUpDown.IsVisible>
</NumericUpDown> </NumericUpDown>
<primitives:ColorSlider <ColorSlider
Name="AlphaComponentSlider" Name="AlphaComponentSlider"
Grid.Row="5" Grid.Row="5"
Grid.Column="1" Grid.Column="1"
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
VerticalAlignment="Center" VerticalAlignment="Center"
ColorComponent="Alpha" ColorComponent="Alpha"
ColorModel="{TemplateBinding ColorModel, ColorModel="{TemplateBinding ColorModel,Mode=OneWay}"
Mode=OneWay}"
HsvColor="{Binding HsvColor, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}" HsvColor="{Binding HsvColor, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}"
IsEnabled="{TemplateBinding IsAlphaEnabled}" IsEnabled="{TemplateBinding IsAlphaEnabled}"
IsRoundingEnabled="True" IsRoundingEnabled="True"
IsSnapToTickEnabled="True" IsSnapToTickEnabled="True"
Orientation="Horizontal" Orientation="Horizontal"
TickFrequency="1"> TickFrequency="1">
<primitives:ColorSlider.IsVisible> <ColorSlider.IsVisible>
<MultiBinding Converter="{x:Static BoolConverters.And}"> <MultiBinding Converter="{x:Static BoolConverters.And}">
<Binding Path="IsAlphaVisible" RelativeSource="{RelativeSource TemplatedParent}" /> <Binding Path="IsAlphaVisible" RelativeSource="{RelativeSource TemplatedParent}" />
<Binding Path="IsComponentSliderVisible" RelativeSource="{RelativeSource TemplatedParent}" /> <Binding Path="IsComponentSliderVisible" RelativeSource="{RelativeSource TemplatedParent}" />
</MultiBinding> </MultiBinding>
</primitives:ColorSlider.IsVisible> </ColorSlider.IsVisible>
</primitives:ColorSlider> </ColorSlider>
</Grid> </Grid>
</TabItem> </TabItem>
</TabControl> </TabControl>
<!-- Previewer --> <!-- Previewer -->
<!-- Note that top/bottom margins have -5 to remove for drop shadow padding --> <!-- Note that top/bottom margins have -5 to remove for drop shadow padding -->
<primitives:ColorPreviewer <ColorPreviewer
Grid.Row="1" Grid.Row="1"
Margin="12,-5,12,7" Margin="12,-5,12,7"
HsvColor="{Binding HsvColor, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}" HsvColor="{Binding HsvColor, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}"
@@ -474,7 +445,7 @@
</Setter> </Setter>
<Style Selector="^ /template/ DropDownButton"> <Style Selector="^ /template/ DropDownButton">
<Setter Property="Padding" Value="0 0 10 0"></Setter> <Setter Property="Padding" Value="0 0 10 0" />
</Style> </Style>
</ControlTheme> </ControlTheme>
@@ -482,7 +453,7 @@
x:Key="HexColorPicker" x:Key="HexColorPicker"
BasedOn="{StaticResource {x:Type ColorPicker}}" BasedOn="{StaticResource {x:Type ColorPicker}}"
TargetType="ColorPicker"> TargetType="ColorPicker">
<Setter Property="Width" Value="200" /> <Setter Property="MinWidth" Value="200" />
<Setter Property="Content"> <Setter Property="Content">
<Template> <Template>
<Grid ColumnDefinitions="Auto, *"> <Grid ColumnDefinitions="Auto, *">
@@ -500,8 +471,7 @@
Margin="1,1,0,1" Margin="1,1,0,1"
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
VerticalAlignment="Stretch" VerticalAlignment="Stretch"
Background="{TemplateBinding HsvColor, Background="{TemplateBinding HsvColor,Converter={StaticResource ToBrushConverter}}"
Converter={StaticResource ToBrushConverter}}"
CornerRadius="{TemplateBinding CornerRadius}" /> CornerRadius="{TemplateBinding CornerRadius}" />
<TextBlock <TextBlock
Grid.Column="1" Grid.Column="1"
@@ -526,9 +496,12 @@
<DropDownButton <DropDownButton
Width="{TemplateBinding Width}" Width="{TemplateBinding Width}"
Height="{TemplateBinding Height}" Height="{TemplateBinding Height}"
HorizontalContentAlignment="Stretch" MinWidth="{TemplateBinding MinWidth}"
VerticalContentAlignment="Stretch" MinHeight="{TemplateBinding MinHeight}"
ClipToBounds="True" HorizontalAlignment="{TemplateBinding HorizontalAlignment}"
VerticalAlignment="{TemplateBinding VerticalAlignment}"
HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
Content="{TemplateBinding Content}" Content="{TemplateBinding Content}"
ContentTemplate="{TemplateBinding ContentTemplate}" ContentTemplate="{TemplateBinding ContentTemplate}"
CornerRadius="{TemplateBinding CornerRadius}" CornerRadius="{TemplateBinding CornerRadius}"
@@ -558,7 +531,7 @@
Grid.Row="0" Grid.Row="0"
CornerRadius="8 8 0 0" CornerRadius="8 8 0 0"
ClipToBounds="True"> ClipToBounds="True">
<primitives:ColorSpectrum <ColorSpectrum
Name="ColorSpectrum" Name="ColorSpectrum"
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
VerticalAlignment="Stretch" VerticalAlignment="Stretch"
@@ -572,7 +545,7 @@
MinValue="{TemplateBinding MinValue}" MinValue="{TemplateBinding MinValue}"
Shape="{TemplateBinding ColorSpectrumShape}" /> Shape="{TemplateBinding ColorSpectrumShape}" />
</Border> </Border>
<primitives:ColorSlider <ColorSlider
Name="ColorSpectrumThirdComponentSlider" Name="ColorSpectrumThirdComponentSlider"
Grid.Row="1" Grid.Row="1"
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
@@ -584,7 +557,7 @@
IsVisible="{TemplateBinding IsColorSpectrumSliderVisible}" IsVisible="{TemplateBinding IsColorSpectrumSliderVisible}"
Orientation="Horizontal" /> Orientation="Horizontal" />
<primitives:ColorSlider <ColorSlider
Name="ColorSpectrumAlphaSlider" Name="ColorSpectrumAlphaSlider"
Grid.Row="2" Grid.Row="2"
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
@@ -598,8 +571,7 @@
IsRoundingEnabled="True" IsRoundingEnabled="True"
IsSnapToTickEnabled="True" IsSnapToTickEnabled="True"
TickFrequency="1" TickFrequency="1"
Orientation="Horizontal"> Orientation="Horizontal" />
</primitives:ColorSlider>
<StackPanel <StackPanel
Grid.Row="3" Grid.Row="3"
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
@@ -676,7 +648,7 @@
x:Key="HexSimpleColorPicker" x:Key="HexSimpleColorPicker"
BasedOn="{StaticResource SimpleColorPicker}" BasedOn="{StaticResource SimpleColorPicker}"
TargetType="ColorPicker"> TargetType="ColorPicker">
<Setter Property="Width" Value="200" /> <Setter Property="MinWidth" Value="200" />
<Setter Property="Content"> <Setter Property="Content">
<Template> <Template>
<Grid ColumnDefinitions="Auto, *"> <Grid ColumnDefinitions="Auto, *">
@@ -694,8 +666,7 @@
Margin="1,1,0,1" Margin="1,1,0,1"
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
VerticalAlignment="Stretch" VerticalAlignment="Stretch"
Background="{TemplateBinding HsvColor, Background="{TemplateBinding HsvColor,Converter={StaticResource ToBrushConverter}}"
Converter={StaticResource ToBrushConverter}}"
CornerRadius="{TemplateBinding CornerRadius}" /> CornerRadius="{TemplateBinding CornerRadius}" />
<TextBlock <TextBlock
Grid.Column="1" Grid.Column="1"

View File

@@ -33,17 +33,16 @@
Name="PART_AccentDecrement2Border" Name="PART_AccentDecrement2Border"
Grid.Column="0" Grid.Column="0"
Background="{TemplateBinding HsvColor, Background="{TemplateBinding HsvColor,
Converter={StaticResource AccentColorConverter}, Converter={StaticResource AccentColorConverter},
ConverterParameter='-2'}" ConverterParameter='-2'}"
CornerRadius="{TemplateBinding CornerRadius, CornerRadius="{TemplateBinding CornerRadius,Converter={StaticResource LeftCornerRadiusFilterConverter}}"
Converter={StaticResource LeftCornerRadiusFilterConverter}}"
Tag="-2" /> Tag="-2" />
<Border <Border
Name="PART_AccentDecrement1Border" Name="PART_AccentDecrement1Border"
Grid.Column="1" Grid.Column="1"
Background="{TemplateBinding HsvColor, Background="{TemplateBinding HsvColor,
Converter={StaticResource AccentColorConverter}, Converter={StaticResource AccentColorConverter},
ConverterParameter='-1'}" ConverterParameter='-1'}"
Tag="-1" /> Tag="-1" />
</Grid> </Grid>
<!-- Right accent colors --> <!-- Right accent colors -->
@@ -63,17 +62,16 @@
Name="PART_AccentIncrement1Border" Name="PART_AccentIncrement1Border"
Grid.Column="0" Grid.Column="0"
Background="{TemplateBinding HsvColor, Background="{TemplateBinding HsvColor,
Converter={StaticResource AccentColorConverter}, Converter={StaticResource AccentColorConverter},
ConverterParameter='1'}" ConverterParameter='1'}"
Tag="1" /> Tag="1" />
<Border <Border
Name="PART_AccentIncrement2Border" Name="PART_AccentIncrement2Border"
Grid.Column="1" Grid.Column="1"
Background="{TemplateBinding HsvColor, Background="{TemplateBinding HsvColor,
Converter={StaticResource AccentColorConverter}, Converter={StaticResource AccentColorConverter},
ConverterParameter='2'}" ConverterParameter='2'}"
CornerRadius="{TemplateBinding CornerRadius, CornerRadius="{TemplateBinding CornerRadius,Converter={StaticResource RightCornerRadiusFilterConverter}}"
Converter={StaticResource RightCornerRadiusFilterConverter}}"
Tag="2" /> Tag="2" />
</Grid> </Grid>
<!-- Preview color: Must be last for drop shadow Z-index --> <!-- Preview color: Must be last for drop shadow Z-index -->
@@ -85,12 +83,13 @@
BoxShadow="{DynamicResource ColorPreviewerMainBoxShadow}" BoxShadow="{DynamicResource ColorPreviewerMainBoxShadow}"
CornerRadius="{TemplateBinding CornerRadius}"> CornerRadius="{TemplateBinding CornerRadius}">
<Panel> <Panel>
<Border Background="{DynamicResource ColorControlCheckeredBackgroundBrush}" CornerRadius="{TemplateBinding CornerRadius}" /> <Border
Background="{DynamicResource ColorControlCheckeredBackgroundBrush}"
CornerRadius="{TemplateBinding CornerRadius}" />
<Border <Border
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
VerticalAlignment="Stretch" VerticalAlignment="Stretch"
Background="{TemplateBinding HsvColor, Background="{TemplateBinding HsvColor,Converter={StaticResource ToBrushConverter}}"
Converter={StaticResource ToBrushConverter}}"
CornerRadius="{TemplateBinding CornerRadius}" /> CornerRadius="{TemplateBinding CornerRadius}" />
</Panel> </Panel>
</Border> </Border>
@@ -100,15 +99,15 @@
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
VerticalAlignment="Stretch" VerticalAlignment="Stretch"
CornerRadius="{TemplateBinding CornerRadius}" CornerRadius="{TemplateBinding CornerRadius}"
IsVisible="{TemplateBinding IsAccentColorsVisible, IsVisible="{TemplateBinding IsAccentColorsVisible,Converter={x:Static BoolConverters.Not}}">
Converter={x:Static BoolConverters.Not}}">
<Panel> <Panel>
<Border Background="{DynamicResource ColorControlCheckeredBackgroundBrush}" CornerRadius="{TemplateBinding CornerRadius}" /> <Border
Background="{DynamicResource ColorControlCheckeredBackgroundBrush}"
CornerRadius="{TemplateBinding CornerRadius}" />
<Border <Border
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
VerticalAlignment="Stretch" VerticalAlignment="Stretch"
Background="{TemplateBinding HsvColor, Background="{TemplateBinding HsvColor,Converter={StaticResource ToBrushConverter}}"
Converter={StaticResource ToBrushConverter}}"
CornerRadius="{TemplateBinding CornerRadius}" /> CornerRadius="{TemplateBinding CornerRadius}" />
</Panel> </Panel>
</Border> </Border>

View File

@@ -11,19 +11,17 @@
<Setter Property="UseLayoutRounding" Value="False" /> <Setter Property="UseLayoutRounding" Value="False" />
<Setter Property="BorderBrush" Value="{DynamicResource ColorSliderDefaultBorderBrush}" /> <Setter Property="BorderBrush" Value="{DynamicResource ColorSliderDefaultBorderBrush}" />
<Setter Property="BorderThickness" Value="{DynamicResource ColorSliderThumbBorderBrush}" /> <Setter Property="BorderThickness" Value="{DynamicResource ColorSliderThumbBorderBrush}" />
<Setter Property="CornerRadius" Value="999" /> <Setter Property="CornerRadius" Value="{DynamicResource ColorSliderThumbCornerRadius}" />
<Setter Property="Template"> <Setter Property="Template">
<Setter.Value> <ControlTemplate>
<ControlTemplate> <Border
<Border Margin="1"
Margin="1" Background="{TemplateBinding Background}"
Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}"
BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}"
BorderThickness="{TemplateBinding BorderThickness}" BoxShadow="{DynamicResource ColorSliderBoxShadow}"
BoxShadow="{DynamicResource ColorSliderBoxShadow}" CornerRadius="{TemplateBinding CornerRadius}" />
CornerRadius="{TemplateBinding CornerRadius}" /> </ControlTemplate>
</ControlTemplate>
</Setter.Value>
</Setter> </Setter>
</ControlTheme> </ControlTheme>
@@ -45,20 +43,16 @@
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
VerticalAlignment="Stretch" VerticalAlignment="Stretch"
Fill="{DynamicResource ColorControlCheckeredBackgroundBrush}" Fill="{DynamicResource ColorControlCheckeredBackgroundBrush}"
RadiusX="{TemplateBinding CornerRadius, RadiusX="{TemplateBinding CornerRadius,Converter={StaticResource TopLeftCornerRadiusConverter}}"
Converter={StaticResource TopLeftCornerRadiusConverter}}" RadiusY="{TemplateBinding CornerRadius,Converter={StaticResource BottomRightCornerRadiusConverter}}" />
RadiusY="{TemplateBinding CornerRadius,
Converter={StaticResource BottomRightCornerRadiusConverter}}" />
<Rectangle <Rectangle
Width="{Binding #PART_Track.Bounds.Width}" Width="{Binding #PART_Track.Bounds.Width}"
Height="{Binding #PART_Track.Bounds.Height}" Height="{Binding #PART_Track.Bounds.Height}"
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
VerticalAlignment="Stretch" VerticalAlignment="Stretch"
Fill="{TemplateBinding Background}" Fill="{TemplateBinding Background}"
RadiusX="{TemplateBinding CornerRadius, RadiusX="{TemplateBinding CornerRadius,Converter={StaticResource TopLeftCornerRadiusConverter}}"
Converter={StaticResource TopLeftCornerRadiusConverter}}" RadiusY="{TemplateBinding CornerRadius,Converter={StaticResource BottomRightCornerRadiusConverter}}" />
RadiusY="{TemplateBinding CornerRadius,
Converter={StaticResource BottomRightCornerRadiusConverter}}" />
<Track <Track
Name="PART_Track" Name="PART_Track"
Height="12" Height="12"
@@ -68,8 +62,7 @@
Maximum="{TemplateBinding Maximum}" Maximum="{TemplateBinding Maximum}"
Minimum="{TemplateBinding Minimum}" Minimum="{TemplateBinding Minimum}"
Orientation="Horizontal" Orientation="Horizontal"
Value="{TemplateBinding Value, Value="{TemplateBinding Value,Mode=TwoWay}">
Mode=TwoWay}">
<Track.DecreaseButton> <Track.DecreaseButton>
<RepeatButton <RepeatButton
Name="PART_DecreaseButton" Name="PART_DecreaseButton"
@@ -106,10 +99,8 @@
</Track.IncreaseButton> </Track.IncreaseButton>
<Thumb <Thumb
Name="ColorSliderThumb" Name="ColorSliderThumb"
Width="16" Width="{TemplateBinding Height}"
Height="16" Height="{TemplateBinding Height}"
Margin="0"
Padding="0"
DataContext="{TemplateBinding Value}" DataContext="{TemplateBinding Value}"
Theme="{StaticResource ColorSliderThumbTheme}" /> Theme="{StaticResource ColorSliderThumbTheme}" />
</Track> </Track>
@@ -136,20 +127,16 @@
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
VerticalAlignment="Stretch" VerticalAlignment="Stretch"
Fill="{DynamicResource ColorControlCheckeredBackgroundBrush}" Fill="{DynamicResource ColorControlCheckeredBackgroundBrush}"
RadiusX="{TemplateBinding CornerRadius, RadiusX="{TemplateBinding CornerRadius,Converter={StaticResource TopLeftCornerRadiusConverter}}"
Converter={StaticResource TopLeftCornerRadiusConverter}}" RadiusY="{TemplateBinding CornerRadius,Converter={StaticResource BottomRightCornerRadiusConverter}}" />
RadiusY="{TemplateBinding CornerRadius,
Converter={StaticResource BottomRightCornerRadiusConverter}}" />
<Rectangle <Rectangle
Width="{Binding #PART_Track.Bounds.Width}" Width="{Binding #PART_Track.Bounds.Width}"
Height="{Binding #PART_Track.Bounds.Height}" Height="{Binding #PART_Track.Bounds.Height}"
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
VerticalAlignment="Stretch" VerticalAlignment="Stretch"
Fill="{TemplateBinding Background}" Fill="{TemplateBinding Background}"
RadiusX="{TemplateBinding CornerRadius, RadiusX="{TemplateBinding CornerRadius,Converter={StaticResource TopLeftCornerRadiusConverter}}"
Converter={StaticResource TopLeftCornerRadiusConverter}}" RadiusY="{TemplateBinding CornerRadius,Converter={StaticResource BottomRightCornerRadiusConverter}}" />
RadiusY="{TemplateBinding CornerRadius,
Converter={StaticResource BottomRightCornerRadiusConverter}}" />
<Track <Track
Name="PART_Track" Name="PART_Track"
Width="12" Width="12"
@@ -159,8 +146,7 @@
Maximum="{TemplateBinding Maximum}" Maximum="{TemplateBinding Maximum}"
Minimum="{TemplateBinding Minimum}" Minimum="{TemplateBinding Minimum}"
Orientation="Vertical" Orientation="Vertical"
Value="{TemplateBinding Value, Value="{TemplateBinding Value,Mode=TwoWay}">
Mode=TwoWay}">
<Track.DecreaseButton> <Track.DecreaseButton>
<RepeatButton <RepeatButton
Name="PART_DecreaseButton" Name="PART_DecreaseButton"
@@ -199,8 +185,6 @@
Name="ColorSliderThumb" Name="ColorSliderThumb"
Width="{TemplateBinding Width}" Width="{TemplateBinding Width}"
Height="{TemplateBinding Width}" Height="{TemplateBinding Width}"
Margin="0"
Padding="0"
DataContext="{TemplateBinding Value}" DataContext="{TemplateBinding Value}"
Theme="{StaticResource ColorSliderThumbTheme}" /> Theme="{StaticResource ColorSliderThumbTheme}" />
</Track> </Track>

View File

@@ -1,125 +1,115 @@
<ResourceDictionary <ResourceDictionary
xmlns="https://github.com/avaloniaui" xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:controls="using:Avalonia.Controls"
xmlns:converters="using:Avalonia.Controls.Converters" xmlns:converters="using:Avalonia.Controls.Converters"
x:CompileBindings="True"> x:CompileBindings="True">
<converters:EnumToBoolConverter x:Key="EnumToBoolConverter" /> <converters:EnumToBoolConverter x:Key="EnumToBoolConverter" />
<converters:CornerRadiusToDoubleConverter x:Key="TopLeftCornerRadiusConverter" Corner="TopLeft" /> <converters:CornerRadiusToDoubleConverter x:Key="TopLeftCornerRadiusConverter" Corner="TopLeft" />
<converters:CornerRadiusToDoubleConverter x:Key="BottomRightCornerRadiusConverter" Corner="BottomRight" /> <converters:CornerRadiusToDoubleConverter x:Key="BottomRightCornerRadiusConverter" Corner="BottomRight" />
<ControlTheme x:Key="{x:Type ColorSpectrum}" TargetType="ColorSpectrum"> <ControlTheme x:Key="{x:Type ColorSpectrum}" TargetType="ColorSpectrum">
<Setter Property="CornerRadius" Value="6" /> <Setter Property="CornerRadius" Value="{DynamicResource ColorSpectrumCornerRadius}" />
<Setter Property="Template"> <Setter Property="Template">
<Setter.Value> <ControlTemplate TargetType="{x:Type ColorSpectrum}">
<ControlTemplate TargetType="{x:Type ColorSpectrum}"> <Panel
Name="PART_LayoutRoot"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch">
<Panel <Panel
Name="PART_LayoutRoot" Name="PART_SizingPanel"
HorizontalAlignment="Stretch" HorizontalAlignment="Center"
VerticalAlignment="Stretch"> VerticalAlignment="Center"
<Panel ClipToBounds="True">
Name="PART_SizingPanel" <Rectangle
HorizontalAlignment="Center" Name="PART_SpectrumRectangle"
VerticalAlignment="Center" HorizontalAlignment="Stretch"
ClipToBounds="True"> VerticalAlignment="Stretch"
<Rectangle IsHitTestVisible="False"
Name="PART_SpectrumRectangle" IsVisible="{TemplateBinding Shape,
HorizontalAlignment="Stretch" Converter={StaticResource EnumToBoolConverter},
VerticalAlignment="Stretch" ConverterParameter={x:Static ColorSpectrumShape.Box}}"
IsHitTestVisible="False" RadiusX="{TemplateBinding CornerRadius,Converter={StaticResource TopLeftCornerRadiusConverter}}"
IsVisible="{TemplateBinding Shape, RadiusY="{TemplateBinding CornerRadius,Converter={StaticResource BottomRightCornerRadiusConverter}}" />
Converter={StaticResource EnumToBoolConverter}, <Rectangle
ConverterParameter={x:Static controls:ColorSpectrumShape.Box}}" Name="PART_SpectrumOverlayRectangle"
RadiusX="{TemplateBinding CornerRadius, HorizontalAlignment="Stretch"
Converter={StaticResource TopLeftCornerRadiusConverter}}" VerticalAlignment="Stretch"
RadiusY="{TemplateBinding CornerRadius, IsHitTestVisible="False"
Converter={StaticResource BottomRightCornerRadiusConverter}}" /> IsVisible="{TemplateBinding Shape,
<Rectangle Converter={StaticResource EnumToBoolConverter},
Name="PART_SpectrumOverlayRectangle" ConverterParameter={x:Static ColorSpectrumShape.Box}}"
HorizontalAlignment="Stretch" RadiusX="{TemplateBinding CornerRadius,Converter={StaticResource TopLeftCornerRadiusConverter}}"
VerticalAlignment="Stretch" RadiusY="{TemplateBinding CornerRadius,Converter={StaticResource BottomRightCornerRadiusConverter}}" />
IsHitTestVisible="False" <Ellipse
IsVisible="{TemplateBinding Shape, Name="PART_SpectrumEllipse"
Converter={StaticResource EnumToBoolConverter}, HorizontalAlignment="Stretch"
ConverterParameter={x:Static controls:ColorSpectrumShape.Box}}" VerticalAlignment="Stretch"
RadiusX="{TemplateBinding CornerRadius, IsHitTestVisible="False"
Converter={StaticResource TopLeftCornerRadiusConverter}}" IsVisible="{TemplateBinding Shape,
RadiusY="{TemplateBinding CornerRadius, Converter={StaticResource EnumToBoolConverter},
Converter={StaticResource BottomRightCornerRadiusConverter}}" /> ConverterParameter={x:Static ColorSpectrumShape.Ring}}" />
<Ellipse <Ellipse
Name="PART_SpectrumEllipse" Name="PART_SpectrumOverlayEllipse"
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
VerticalAlignment="Stretch" VerticalAlignment="Stretch"
IsHitTestVisible="False" IsHitTestVisible="False"
IsVisible="{TemplateBinding Shape, IsVisible="{TemplateBinding Shape,
Converter={StaticResource EnumToBoolConverter}, Converter={StaticResource EnumToBoolConverter},
ConverterParameter={x:Static controls:ColorSpectrumShape.Ring}}" /> ConverterParameter={x:Static ColorSpectrumShape.Ring}}" />
<Ellipse <Canvas
Name="PART_SpectrumOverlayEllipse" Name="PART_InputTarget"
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
VerticalAlignment="Stretch" VerticalAlignment="Stretch"
IsHitTestVisible="False" Background="Transparent">
IsVisible="{TemplateBinding Shape, <!-- Note: ToolTip.VerticalOffset is for touch devices to keep the tip above fingers -->
Converter={StaticResource EnumToBoolConverter}, <Panel
ConverterParameter={x:Static controls:ColorSpectrumShape.Ring}}" /> Name="PART_SelectionEllipsePanel"
<Canvas ToolTip.Placement="Top"
Name="PART_InputTarget" ToolTip.VerticalOffset="-10">
HorizontalAlignment="Stretch" <Ellipse
VerticalAlignment="Stretch" Name="FocusEllipse"
Background="Transparent"> Margin="-2"
<!-- Note: ToolTip.VerticalOffset is for touch devices to keep the tip above fingers --> HorizontalAlignment="Stretch"
<Panel VerticalAlignment="Stretch"
Name="PART_SelectionEllipsePanel" IsHitTestVisible="False"
ToolTip.Placement="Top" StrokeThickness="2" />
ToolTip.VerticalOffset="-10"> <Ellipse
<Ellipse Name="SelectionEllipse"
Name="FocusEllipse" HorizontalAlignment="Stretch"
Margin="-2" VerticalAlignment="Stretch"
HorizontalAlignment="Stretch" IsHitTestVisible="False"
VerticalAlignment="Stretch" StrokeThickness="2" />
IsHitTestVisible="False" <ToolTip.Tip>
StrokeThickness="2" /> <!-- Set in code-behind -->
<Ellipse </ToolTip.Tip>
Name="SelectionEllipse" </Panel>
HorizontalAlignment="Stretch" </Canvas>
VerticalAlignment="Stretch" <Rectangle
IsHitTestVisible="False" Name="BorderRectangle"
StrokeThickness="2" /> HorizontalAlignment="Stretch"
<ToolTip.Tip> VerticalAlignment="Stretch"
<!-- Set in code-behind --> IsHitTestVisible="False"
</ToolTip.Tip> IsVisible="{TemplateBinding Shape,
</Panel> Converter={StaticResource EnumToBoolConverter},
</Canvas> ConverterParameter={x:Static ColorSpectrumShape.Box}}"
<Rectangle RadiusX="{TemplateBinding CornerRadius,Converter={StaticResource TopLeftCornerRadiusConverter}}"
Name="BorderRectangle" RadiusY="{TemplateBinding CornerRadius,Converter={StaticResource BottomRightCornerRadiusConverter}}" />
HorizontalAlignment="Stretch" <Ellipse
VerticalAlignment="Stretch" Name="BorderEllipse"
IsHitTestVisible="False" HorizontalAlignment="Stretch"
IsVisible="{TemplateBinding Shape, VerticalAlignment="Stretch"
Converter={StaticResource EnumToBoolConverter}, IsHitTestVisible="False"
ConverterParameter={x:Static controls:ColorSpectrumShape.Box}}" IsVisible="{TemplateBinding Shape,
RadiusX="{TemplateBinding CornerRadius, Converter={StaticResource EnumToBoolConverter},
Converter={StaticResource TopLeftCornerRadiusConverter}}" ConverterParameter={x:Static ColorSpectrumShape.Ring}}" />
RadiusY="{TemplateBinding CornerRadius,
Converter={StaticResource BottomRightCornerRadiusConverter}}" />
<Ellipse
Name="BorderEllipse"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
IsHitTestVisible="False"
IsVisible="{TemplateBinding Shape,
Converter={StaticResource EnumToBoolConverter},
ConverterParameter={x:Static controls:ColorSpectrumShape.Ring}}" />
</Panel>
</Panel> </Panel>
</ControlTemplate> </Panel>
</Setter.Value> </ControlTemplate>
</Setter> </Setter>
<!-- Normal --> <!-- Normal -->
<!-- Separating this allows easier customization in applications --> <!-- Separating this allows easier customization in applications -->
<Style Selector="^ /template/ Ellipse#BorderEllipse, ^ /template/ Rectangle#BorderRectangle"> <Style Selector="^ /template/ Ellipse#BorderEllipse,^ /template/ Rectangle#BorderRectangle">
<Setter Property="Stroke" Value="{DynamicResource ColorSpectrumBorderBrush}" /> <Setter Property="Stroke" Value="{DynamicResource ColorSpectrumBorderBrush}" />
<Setter Property="StrokeThickness" Value="1" /> <Setter Property="StrokeThickness" Value="1" />
</Style> </Style>

View File

@@ -1,11 +1,9 @@
<ResourceDictionary <ResourceDictionary
xmlns="https://github.com/avaloniaui" xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:controls="using:Avalonia.Controls"
xmlns:converters="using:Avalonia.Controls.Converters" xmlns:converters="using:Avalonia.Controls.Converters"
xmlns:globalization="using:System.Globalization" xmlns:globalization="using:System.Globalization"
xmlns:pc="using:Avalonia.Controls.Primitives.Converters" xmlns:pc="using:Avalonia.Controls.Primitives.Converters"
xmlns:primitives="using:Avalonia.Controls.Primitives"
xmlns:cvts="clr-namespace:Semi.Avalonia.ColorPicker.Converters" xmlns:cvts="clr-namespace:Semi.Avalonia.ColorPicker.Converters"
x:CompileBindings="True"> x:CompileBindings="True">
<pc:ContrastBrushConverter x:Key="ContrastBrushConverter" /> <pc:ContrastBrushConverter x:Key="ContrastBrushConverter" />
@@ -19,6 +17,15 @@
<cvts:ToColorModel x:Key="ToColorModel" /> <cvts:ToColorModel x:Key="ToColorModel" />
<globalization:NumberFormatInfo x:Key="ColorViewComponentNumberFormat" NumberDecimalDigits="0" /> <globalization:NumberFormatInfo x:Key="ColorViewComponentNumberFormat" NumberDecimalDigits="0" />
<Design.PreviewWith>
<ColorView
Theme="{StaticResource SimpleColorView}"
IsAlphaVisible="True"
IsAlphaEnabled="True"
ColorModel="Hsva"
HsvColor="hsv(120,7%,90%)" />
</Design.PreviewWith>
<VisualBrush <VisualBrush
x:Key="ColorControlCheckeredBackgroundBrush" x:Key="ColorControlCheckeredBackgroundBrush"
DestinationRect="0,0,8,8" DestinationRect="0,0,8,8"
@@ -116,12 +123,12 @@
</ControlTheme> </ControlTheme>
<ControlTheme x:Key="ColorViewRadioButton" TargetType="RadioButton"> <ControlTheme x:Key="ColorViewRadioButton" TargetType="RadioButton">
<Setter Property="RadioButton.Cursor" Value="Hand" /> <Setter Property="Cursor" Value="Hand" />
<Setter Property="RadioButton.FontWeight" Value="{DynamicResource ColorViewRadioButtonFontWeight}" /> <Setter Property="FontWeight" Value="{DynamicResource ColorViewRadioButtonFontWeight}" />
<Setter Property="RadioButton.Padding" Value="{DynamicResource ColorViewRadioButtonPadding}" /> <Setter Property="Padding" Value="{DynamicResource ColorViewRadioButtonPadding}" />
<Setter Property="RadioButton.Foreground" Value="{DynamicResource ColorViewRadioButtonForeground}" /> <Setter Property="Foreground" Value="{DynamicResource ColorViewRadioButtonForeground}" />
<Setter Property="RadioButton.Background" Value="{DynamicResource ColorViewRadioButtonBackground}" /> <Setter Property="Background" Value="{DynamicResource ColorViewRadioButtonBackground}" />
<Setter Property="RadioButton.Template"> <Setter Property="Template">
<ControlTemplate TargetType="RadioButton"> <ControlTemplate TargetType="RadioButton">
<ContentPresenter <ContentPresenter
Name="PART_ContentPresenter" Name="PART_ContentPresenter"
@@ -163,10 +170,10 @@
<ControlTheme x:Key="{x:Type ColorView}" TargetType="ColorView"> <ControlTheme x:Key="{x:Type ColorView}" TargetType="ColorView">
<Setter Property="CornerRadius" Value="{DynamicResource ControlCornerRadius}" /> <Setter Property="CornerRadius" Value="{DynamicResource ControlCornerRadius}" />
<Setter Property="ColorView.Width" Value="300" /> <Setter Property="Width" Value="300" />
<Setter Property="ColorView.Height" Value="300" /> <Setter Property="Height" Value="300" />
<Setter Property="ColorView.Palette"> <Setter Property="Palette">
<controls:FluentColorPalette /> <FluentColorPalette />
</Setter> </Setter>
<Setter Property="Template"> <Setter Property="Template">
<ControlTemplate TargetType="{x:Type ColorView}"> <ControlTemplate TargetType="{x:Type ColorView}">
@@ -208,13 +215,10 @@
<!-- Spectrum Tab --> <!-- Spectrum Tab -->
<TabItem IsVisible="{TemplateBinding IsColorSpectrumVisible}"> <TabItem IsVisible="{TemplateBinding IsColorSpectrumVisible}">
<TabItem.Header> <TabItem.Header>
<Border Height="{DynamicResource ColorViewTabStripHeight}"> <PathIcon
<PathIcon Theme="{StaticResource InnerPathIcon}"
Width="16" Data="{DynamicResource ColorViewSpectrumIconGlyph}"
Height="16" Foreground="{Binding $parent[TabItem].Foreground}" />
Data="{DynamicResource ColorViewSpectrumIconGlyph}"
Foreground="{Binding $parent[TabItem].Foreground}" />
</Border>
</TabItem.Header> </TabItem.Header>
<Grid Margin="12" RowDefinitions="*"> <Grid Margin="12" RowDefinitions="*">
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
@@ -222,7 +226,7 @@
<ColumnDefinition Width="*" /> <ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" MinWidth="32" /> <ColumnDefinition Width="Auto" MinWidth="32" />
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<primitives:ColorSlider <ColorSlider
Name="ColorSpectrumThirdComponentSlider" Name="ColorSpectrumThirdComponentSlider"
Grid.Column="0" Grid.Column="0"
Margin="0,0,12,0" Margin="0,0,12,0"
@@ -236,7 +240,7 @@
IsPerceptive="False" IsPerceptive="False"
IsVisible="{TemplateBinding IsColorSpectrumSliderVisible}" IsVisible="{TemplateBinding IsColorSpectrumSliderVisible}"
Orientation="Vertical" /> Orientation="Vertical" />
<primitives:ColorSpectrum <ColorSpectrum
Name="ColorSpectrum" Name="ColorSpectrum"
Grid.Column="1" Grid.Column="1"
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
@@ -250,7 +254,7 @@
MinSaturation="{TemplateBinding MinSaturation}" MinSaturation="{TemplateBinding MinSaturation}"
MinValue="{TemplateBinding MinValue}" MinValue="{TemplateBinding MinValue}"
Shape="{TemplateBinding ColorSpectrumShape}" /> Shape="{TemplateBinding ColorSpectrumShape}" />
<primitives:ColorSlider <ColorSlider
Name="ColorSpectrumAlphaSlider" Name="ColorSpectrumAlphaSlider"
Grid.Column="2" Grid.Column="2"
Margin="12,0,0,0" Margin="12,0,0,0"
@@ -262,24 +266,21 @@
HsvColor="{Binding HsvColor, ElementName=ColorSpectrum}" HsvColor="{Binding HsvColor, ElementName=ColorSpectrum}"
IsEnabled="{TemplateBinding IsAlphaEnabled}" IsEnabled="{TemplateBinding IsAlphaEnabled}"
Orientation="Vertical"> Orientation="Vertical">
<primitives:ColorSlider.IsVisible> <ColorSlider.IsVisible>
<MultiBinding Converter="{x:Static BoolConverters.And}"> <MultiBinding Converter="{x:Static BoolConverters.And}">
<Binding Path="IsAlphaVisible" RelativeSource="{RelativeSource TemplatedParent}" /> <Binding Path="IsAlphaVisible" RelativeSource="{RelativeSource TemplatedParent}" />
</MultiBinding> </MultiBinding>
</primitives:ColorSlider.IsVisible> </ColorSlider.IsVisible>
</primitives:ColorSlider> </ColorSlider>
</Grid> </Grid>
</TabItem> </TabItem>
<!-- Palette Tab --> <!-- Palette Tab -->
<TabItem IsVisible="{TemplateBinding IsColorPaletteVisible}"> <TabItem IsVisible="{TemplateBinding IsColorPaletteVisible}">
<TabItem.Header> <TabItem.Header>
<Border Height="{DynamicResource ColorViewTabStripHeight}"> <PathIcon
<PathIcon Theme="{StaticResource InnerPathIcon}"
Width="16" Data="{DynamicResource ColorViewPaletteIconGlyph}"
Height="16" Foreground="{Binding $parent[TabItem].Foreground}" />
Data="{DynamicResource ColorViewPaletteIconGlyph}"
Foreground="{Binding $parent[TabItem].Foreground}" />
</Border>
</TabItem.Header> </TabItem.Header>
<ListBox <ListBox
Margin="12" Margin="12"
@@ -312,18 +313,15 @@
<!-- Components Tab --> <!-- Components Tab -->
<TabItem IsVisible="{TemplateBinding IsColorComponentsVisible}"> <TabItem IsVisible="{TemplateBinding IsColorComponentsVisible}">
<TabItem.Header> <TabItem.Header>
<Border Height="{DynamicResource ColorViewTabStripHeight}"> <PathIcon
<PathIcon Theme="{StaticResource InnerPathIcon}"
Width="16" Data="{DynamicResource ColorViewComponentsIconGlyph}"
Height="16" Foreground="{Binding $parent[TabItem].Foreground}" />
Data="{DynamicResource ColorViewComponentsIconGlyph}"
Foreground="{Binding $parent[TabItem].Foreground}" />
</Border>
</TabItem.Header> </TabItem.Header>
<Grid <Grid
Margin="12" Margin="12"
ColumnDefinitions="Auto,*" ColumnDefinitions="Auto,*"
RowDefinitions="Auto,24,1*,1*,1*,1*,12" RowDefinitions="Auto,24,*,*,*,*,12"
UseLayoutRounding="False"> UseLayoutRounding="False">
<Grid.Styles> <Grid.Styles>
<Style Selector="NumericUpDown"> <Style Selector="NumericUpDown">
@@ -339,13 +337,13 @@
Grid.Row="0" Grid.Row="0"
Grid.Column="0" Grid.Column="0"
Grid.ColumnSpan="2" Grid.ColumnSpan="2"
ColumnDefinitions="1*,12,1*"> ColumnDefinitions="*,12,*">
<!-- RadioButtonGroup --> <!-- RadioButtonGroup -->
<Border <Border
Padding="2" Padding="2"
Background="{DynamicResource ColorViewRadioButtonPointeroverBackground}" Background="{DynamicResource ColorViewRadioButtonPointeroverBackground}"
CornerRadius="3"> CornerRadius="3">
<Grid ColumnDefinitions="1*,1*" IsVisible="{TemplateBinding IsColorModelVisible}"> <Grid ColumnDefinitions="*,*" IsVisible="{TemplateBinding IsColorModelVisible}">
<RadioButton <RadioButton
Name="RgbRadioButton" Name="RgbRadioButton"
Grid.Column="0" Grid.Column="0"
@@ -354,9 +352,9 @@
Content="RGB" Content="RGB"
CornerRadius="3,0,0,3" CornerRadius="3,0,0,3"
IsChecked="{TemplateBinding ColorModel, IsChecked="{TemplateBinding ColorModel,
Converter={StaticResource EnumToBoolConverter}, Converter={StaticResource EnumToBoolConverter},
ConverterParameter={x:Static controls:ColorModel.Rgba}, ConverterParameter={x:Static ColorModel.Rgba},
Mode=TwoWay}" Mode=TwoWay}"
Theme="{DynamicResource ColorViewRadioButton}" /> Theme="{DynamicResource ColorViewRadioButton}" />
<RadioButton <RadioButton
Name="HsvRadioButton" Name="HsvRadioButton"
@@ -366,16 +364,15 @@
Content="HSV" Content="HSV"
CornerRadius="0,3,3,0" CornerRadius="0,3,3,0"
IsChecked="{TemplateBinding ColorModel, IsChecked="{TemplateBinding ColorModel,
Converter={StaticResource EnumToBoolConverter}, Converter={StaticResource EnumToBoolConverter},
ConverterParameter={x:Static controls:ColorModel.Hsva}, ConverterParameter={x:Static ColorModel.Hsva},
Mode=TwoWay}" Mode=TwoWay}"
Theme="{DynamicResource ColorViewRadioButton}" /> Theme="{DynamicResource ColorViewRadioButton}" />
</Grid> </Grid>
</Border> </Border>
<TextBox <TextBox
Name="PART_HexTextBox" Name="PART_HexTextBox"
Grid.Column="2" Grid.Column="2"
Height="32"
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
AutomationProperties.Name="Hexadecimal Color" AutomationProperties.Name="Hexadecimal Color"
InnerLeftContent="#" InnerLeftContent="#"
@@ -399,15 +396,14 @@
NumberFormat="{StaticResource ColorViewComponentNumberFormat}" NumberFormat="{StaticResource ColorViewComponentNumberFormat}"
ShowButtonSpinner="False" ShowButtonSpinner="False"
Value="{Binding Value, ElementName=Component1Slider}" /> Value="{Binding Value, ElementName=Component1Slider}" />
<primitives:ColorSlider <ColorSlider
Name="Component1Slider" Name="Component1Slider"
Grid.Row="2" Grid.Row="2"
Grid.Column="1" Grid.Column="1"
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
VerticalAlignment="Center" VerticalAlignment="Center"
ColorComponent="Component1" ColorComponent="Component1"
ColorModel="{TemplateBinding ColorModel, ColorModel="{TemplateBinding ColorModel,Mode=OneWay}"
Mode=OneWay}"
HsvColor="{Binding HsvColor, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}" HsvColor="{Binding HsvColor, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}"
IsRoundingEnabled="True" IsRoundingEnabled="True"
IsSnapToTickEnabled="True" IsSnapToTickEnabled="True"
@@ -430,15 +426,14 @@
NumberFormat="{StaticResource ColorViewComponentNumberFormat}" NumberFormat="{StaticResource ColorViewComponentNumberFormat}"
ShowButtonSpinner="False" ShowButtonSpinner="False"
Value="{Binding Value, ElementName=Component2Slider}" /> Value="{Binding Value, ElementName=Component2Slider}" />
<primitives:ColorSlider <ColorSlider
Name="Component2Slider" Name="Component2Slider"
Grid.Row="3" Grid.Row="3"
Grid.Column="1" Grid.Column="1"
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
VerticalAlignment="Center" VerticalAlignment="Center"
ColorComponent="Component2" ColorComponent="Component2"
ColorModel="{TemplateBinding ColorModel, ColorModel="{TemplateBinding ColorModel,Mode=OneWay}"
Mode=OneWay}"
HsvColor="{Binding HsvColor, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}" HsvColor="{Binding HsvColor, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}"
IsRoundingEnabled="True" IsRoundingEnabled="True"
IsSnapToTickEnabled="True" IsSnapToTickEnabled="True"
@@ -461,15 +456,14 @@
NumberFormat="{StaticResource ColorViewComponentNumberFormat}" NumberFormat="{StaticResource ColorViewComponentNumberFormat}"
ShowButtonSpinner="False" ShowButtonSpinner="False"
Value="{Binding Value, ElementName=Component3Slider}" /> Value="{Binding Value, ElementName=Component3Slider}" />
<primitives:ColorSlider <ColorSlider
Name="Component3Slider" Name="Component3Slider"
Grid.Row="4" Grid.Row="4"
Grid.Column="1" Grid.Column="1"
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
VerticalAlignment="Center" VerticalAlignment="Center"
ColorComponent="Component3" ColorComponent="Component3"
ColorModel="{TemplateBinding ColorModel, ColorModel="{TemplateBinding ColorModel,Mode=OneWay}"
Mode=OneWay}"
HsvColor="{Binding HsvColor, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}" HsvColor="{Binding HsvColor, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}"
IsRoundingEnabled="True" IsRoundingEnabled="True"
IsSnapToTickEnabled="True" IsSnapToTickEnabled="True"
@@ -499,34 +493,33 @@
</MultiBinding> </MultiBinding>
</NumericUpDown.IsVisible> </NumericUpDown.IsVisible>
</NumericUpDown> </NumericUpDown>
<primitives:ColorSlider <ColorSlider
Name="AlphaComponentSlider" Name="AlphaComponentSlider"
Grid.Row="5" Grid.Row="5"
Grid.Column="1" Grid.Column="1"
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
VerticalAlignment="Center" VerticalAlignment="Center"
ColorComponent="Alpha" ColorComponent="Alpha"
ColorModel="{TemplateBinding ColorModel, ColorModel="{TemplateBinding ColorModel,Mode=OneWay}"
Mode=OneWay}"
HsvColor="{Binding HsvColor, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}" HsvColor="{Binding HsvColor, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}"
IsEnabled="{TemplateBinding IsAlphaEnabled}" IsEnabled="{TemplateBinding IsAlphaEnabled}"
IsRoundingEnabled="True" IsRoundingEnabled="True"
IsSnapToTickEnabled="True" IsSnapToTickEnabled="True"
Orientation="Horizontal" Orientation="Horizontal"
TickFrequency="1"> TickFrequency="1">
<primitives:ColorSlider.IsVisible> <ColorSlider.IsVisible>
<MultiBinding Converter="{x:Static BoolConverters.And}"> <MultiBinding Converter="{x:Static BoolConverters.And}">
<Binding Path="IsAlphaVisible" RelativeSource="{RelativeSource TemplatedParent}" /> <Binding Path="IsAlphaVisible" RelativeSource="{RelativeSource TemplatedParent}" />
<Binding Path="IsComponentSliderVisible" RelativeSource="{RelativeSource TemplatedParent}" /> <Binding Path="IsComponentSliderVisible" RelativeSource="{RelativeSource TemplatedParent}" />
</MultiBinding> </MultiBinding>
</primitives:ColorSlider.IsVisible> </ColorSlider.IsVisible>
</primitives:ColorSlider> </ColorSlider>
</Grid> </Grid>
</TabItem> </TabItem>
</TabControl> </TabControl>
<!-- Previewer --> <!-- Previewer -->
<!-- Note that top/bottom margins have -5 to remove for drop shadow padding --> <!-- Note that top/bottom margins have -5 to remove for drop shadow padding -->
<primitives:ColorPreviewer <ColorPreviewer
Grid.Row="1" Grid.Row="1"
Margin="12,-5,12,7" Margin="12,-5,12,7"
HsvColor="{Binding HsvColor, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}" HsvColor="{Binding HsvColor, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}"
@@ -583,7 +576,7 @@
Grid.Row="0" Grid.Row="0"
CornerRadius="8 8 0 0" CornerRadius="8 8 0 0"
ClipToBounds="True"> ClipToBounds="True">
<primitives:ColorSpectrum <ColorSpectrum
Name="ColorSpectrum" Name="ColorSpectrum"
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
VerticalAlignment="Stretch" VerticalAlignment="Stretch"
@@ -597,7 +590,7 @@
MinValue="{TemplateBinding MinValue}" MinValue="{TemplateBinding MinValue}"
Shape="{TemplateBinding ColorSpectrumShape}" /> Shape="{TemplateBinding ColorSpectrumShape}" />
</Border> </Border>
<primitives:ColorSlider <ColorSlider
Name="ColorSpectrumThirdComponentSlider" Name="ColorSpectrumThirdComponentSlider"
Grid.Row="1" Grid.Row="1"
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
@@ -609,8 +602,8 @@
IsVisible="{TemplateBinding IsColorSpectrumSliderVisible}" IsVisible="{TemplateBinding IsColorSpectrumSliderVisible}"
Orientation="Horizontal" /> Orientation="Horizontal" />
<primitives:ColorSlider <ColorSlider
Name="ColorSpectrumAlphaSlider" x:Name="ColorSpectrumAlphaSlider"
Grid.Row="2" Grid.Row="2"
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
VerticalAlignment="Center" VerticalAlignment="Center"
@@ -623,8 +616,7 @@
IsRoundingEnabled="True" IsRoundingEnabled="True"
IsSnapToTickEnabled="True" IsSnapToTickEnabled="True"
TickFrequency="1" TickFrequency="1"
Orientation="Horizontal"> Orientation="Horizontal" />
</primitives:ColorSlider>
<StackPanel <StackPanel
Grid.Row="3" Grid.Row="3"
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
@@ -693,13 +685,4 @@
<Setter Property="Width" Value="176" /> <Setter Property="Width" Value="176" />
</Style> </Style>
</ControlTheme> </ControlTheme>
<Design.PreviewWith>
<ColorView
Theme="{StaticResource SimpleColorView}"
IsAlphaVisible="True"
IsAlphaEnabled="True"
ColorModel="Hsva"
HsvColor="hsv(120,7%,90%)" />
</Design.PreviewWith>
</ResourceDictionary> </ResourceDictionary>

View File

@@ -0,0 +1,12 @@
<ResourceDictionary
x:CompileBindings="True"
xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ResourceDictionary.MergedDictionaries>
<ResourceInclude Source="avares://Semi.Avalonia.ColorPicker/Controls/ColorPicker.axaml" />
<ResourceInclude Source="avares://Semi.Avalonia.ColorPicker/Controls/ColorPreviewer.axaml" />
<ResourceInclude Source="avares://Semi.Avalonia.ColorPicker/Controls/ColorSlider.axaml" />
<ResourceInclude Source="avares://Semi.Avalonia.ColorPicker/Controls/ColorSpectrum.axaml" />
<ResourceInclude Source="avares://Semi.Avalonia.ColorPicker/Controls/ColorView.axaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>

View File

@@ -1,21 +1,17 @@
<ResourceDictionary xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <ResourceDictionary xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<SolidColorBrush x:Key="ColorViewRadioButtonForeground" Color="#54A9FF" /> <StaticResource x:Key="ColorViewRadioButtonForeground" ResourceKey="SemiColorPrimary" />
<SolidColorBrush x:Key="ColorViewRadioButtonBackground" Color="#1C1F23" /> <StaticResource x:Key="ColorViewRadioButtonBackground" ResourceKey="SemiColorBackground0" />
<SolidColorBrush x:Key="ColorViewRadioButtonPointeroverBackground" Opacity="0.16" Color="White" /> <StaticResource x:Key="ColorViewRadioButtonPointeroverBackground" ResourceKey="SemiColorFill1" />
<SolidColorBrush x:Key="ColorViewRadioButtonPressedBackground" Opacity="0.20" Color="White" /> <StaticResource x:Key="ColorViewRadioButtonPressedBackground" ResourceKey="SemiColorFill2" />
<SolidColorBrush x:Key="ColorViewRadioButtonCheckedForeground" Color="White" /> <StaticResource x:Key="ColorViewRadioButtonCheckedForeground" ResourceKey="SemiColorWhite" />
<SolidColorBrush x:Key="ColorViewRadioButtonCheckedBackground" Color="#54A9FF" /> <StaticResource x:Key="ColorViewRadioButtonCheckedBackground" ResourceKey="SemiColorPrimary" />
<SolidColorBrush x:Key="ColorViewRadioButtonCheckedPointeroverBackground" Color="#7FC1FF" /> <StaticResource x:Key="ColorViewRadioButtonCheckedPointeroverBackground" ResourceKey="SemiColorPrimaryPointerover" />
<SolidColorBrush x:Key="ColorViewRadioButtonCheckedPressedBackground" Color="#A9D7FF" /> <StaticResource x:Key="ColorViewRadioButtonCheckedPressedBackground" ResourceKey="SemiColorPrimaryActive" />
<StaticResource x:Key="ColorViewTabItemSelectedForeground" ResourceKey="SemiColorPrimary" />
<SolidColorBrush x:Key="ColorViewTabItemSelectedForeground" Color="#54A9FF" /> <StaticResource x:Key="ColorSliderDefaultBorderBrush" ResourceKey="SemiColorBlack" />
<StaticResource x:Key="ColorSliderLightBorderBrush" ResourceKey="SemiColorWhite" />
<StaticResource x:Key="ColorSliderDarkBorderBrush" ResourceKey="SemiColorBlack" />
<SolidColorBrush x:Key="ColorSliderDefaultBorderBrush" Color="Black" /> <StaticResource x:Key="ColorSpectrumBorderBrush" ResourceKey="SemiColorBorder" />
<SolidColorBrush x:Key="ColorSliderLightBorderBrush" Color="White" /> <StaticResource x:Key="ColorPreviewerMainBoxShadow" ResourceKey="SemiShadowElevated" />
<SolidColorBrush x:Key="ColorSliderDarkBorderBrush" Color="#E4000000" /> <BoxShadows x:Key="ColorSliderBoxShadow">0 0 2 1 #FFFFFF</BoxShadows>
<SolidColorBrush x:Key="ColorSpectrumBorderBrush" Opacity="0.08" Color="#1C1F23" />
<BoxShadows x:Key="ColorPreviewerMainBoxShadow">inset 0 0 0 1 #1AFFFFFF, 0 4 14 #40000000</BoxShadows>
</ResourceDictionary> </ResourceDictionary>

View File

@@ -6,7 +6,7 @@
<ResourceInclude x:Key="Dark" Source="avares://Semi.Avalonia.ColorPicker/Dark.axaml" /> <ResourceInclude x:Key="Dark" Source="avares://Semi.Avalonia.ColorPicker/Dark.axaml" />
</ResourceDictionary.ThemeDictionaries> </ResourceDictionary.ThemeDictionaries>
<ResourceDictionary.MergedDictionaries> <ResourceDictionary.MergedDictionaries>
<ResourceInclude Source="avares://Semi.Avalonia.ColorPicker/Controls/ColorPicker.axaml" /> <ResourceInclude Source="avares://Semi.Avalonia.ColorPicker/Controls/_index.axaml" />
<ResourceInclude Source="avares://Semi.Avalonia.ColorPicker/Shared.axaml" /> <ResourceInclude Source="avares://Semi.Avalonia.ColorPicker/Shared.axaml" />
</ResourceDictionary.MergedDictionaries> </ResourceDictionary.MergedDictionaries>
</ResourceDictionary> </ResourceDictionary>

View File

@@ -1,21 +1,17 @@
<ResourceDictionary xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <ResourceDictionary xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<SolidColorBrush x:Key="ColorViewRadioButtonForeground" Color="#0077FA" /> <StaticResource x:Key="ColorViewRadioButtonForeground" ResourceKey="SemiColorPrimary" />
<SolidColorBrush x:Key="ColorViewRadioButtonBackground" Color="White" /> <StaticResource x:Key="ColorViewRadioButtonBackground" ResourceKey="SemiColorBackground0" />
<SolidColorBrush x:Key="ColorViewRadioButtonPointeroverBackground" Opacity="0.09" Color="#2E3238" /> <StaticResource x:Key="ColorViewRadioButtonPointeroverBackground" ResourceKey="SemiColorFill1" />
<SolidColorBrush x:Key="ColorViewRadioButtonPressedBackground" Opacity="0.13" Color="#2E3238" /> <StaticResource x:Key="ColorViewRadioButtonPressedBackground" ResourceKey="SemiColorFill2" />
<SolidColorBrush x:Key="ColorViewRadioButtonCheckedForeground" Color="White" /> <StaticResource x:Key="ColorViewRadioButtonCheckedForeground" ResourceKey="SemiColorWhite" />
<SolidColorBrush x:Key="ColorViewRadioButtonCheckedBackground" Color="#0077FA" /> <StaticResource x:Key="ColorViewRadioButtonCheckedBackground" ResourceKey="SemiColorPrimary" />
<SolidColorBrush x:Key="ColorViewRadioButtonCheckedPointeroverBackground" Color="#0062D6" /> <StaticResource x:Key="ColorViewRadioButtonCheckedPointeroverBackground" ResourceKey="SemiColorPrimaryPointerover" />
<SolidColorBrush x:Key="ColorViewRadioButtonCheckedPressedBackground" Color="#004FB3" /> <StaticResource x:Key="ColorViewRadioButtonCheckedPressedBackground" ResourceKey="SemiColorPrimaryActive" />
<StaticResource x:Key="ColorViewTabItemSelectedForeground" ResourceKey="SemiColorPrimary" />
<SolidColorBrush x:Key="ColorViewTabItemSelectedForeground" Color="#0077FA" /> <StaticResource x:Key="ColorSliderDefaultBorderBrush" ResourceKey="SemiColorBlack" />
<StaticResource x:Key="ColorSliderLightBorderBrush" ResourceKey="SemiColorWhite" />
<StaticResource x:Key="ColorSliderDarkBorderBrush" ResourceKey="SemiColorBlack" />
<SolidColorBrush x:Key="ColorSliderDefaultBorderBrush" Color="Black" /> <StaticResource x:Key="ColorSpectrumBorderBrush" ResourceKey="SemiColorBorder" />
<SolidColorBrush x:Key="ColorSliderLightBorderBrush" Color="White" /> <StaticResource x:Key="ColorPreviewerMainBoxShadow" ResourceKey="SemiShadowElevated" />
<SolidColorBrush x:Key="ColorSliderDarkBorderBrush" Color="#E4000000" /> <BoxShadows x:Key="ColorSliderBoxShadow">0 0 2 1 #FFFFFF</BoxShadows>
<SolidColorBrush x:Key="ColorSpectrumBorderBrush" Opacity="0.08" Color="#1C1F23" />
<BoxShadows x:Key="ColorPreviewerMainBoxShadow">0 0 1 #4A000000, 0 4 14 #1A000000</BoxShadows>
</ResourceDictionary> </ResourceDictionary>

View File

@@ -4,7 +4,7 @@
<PropertyGroup> <PropertyGroup>
<Title>Semi.Avalonia.ColorPicker</Title> <Title>Semi.Avalonia.ColorPicker</Title>
<PackageReleaseNotes>Update to Semi.Avalonia.ColorPicker 11.2.1.2</PackageReleaseNotes> <PackageReleaseNotes>Update to Semi.Avalonia.ColorPicker 11.2.1.6</PackageReleaseNotes>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net8.0'))"> <PropertyGroup Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net8.0'))">
@@ -12,7 +12,6 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Avalonia" Version="$(AvaloniaVersion)"/>
<PackageReference Include="Avalonia.Controls.ColorPicker" Version="$(AvaloniaVersion)"/> <PackageReference Include="Avalonia.Controls.ColorPicker" Version="$(AvaloniaVersion)"/>
</ItemGroup> </ItemGroup>

View File

@@ -1,30 +1,31 @@
<ResourceDictionary <ResourceDictionary
xmlns="https://github.com/avaloniaui" xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:colorPicker="clr-namespace:Semi.Avalonia.ColorPicker"> xmlns:semi="https://irihi.tech/semi">
<FontWeight x:Key="ColorViewRadioButtonFontWeight">600</FontWeight> <StaticResource x:Key="ColorViewRadioButtonFontWeight" ResourceKey="SemiFontWeightBold" />
<Thickness x:Key="ColorViewRadioButtonPadding">16 4</Thickness> <Thickness x:Key="ColorViewRadioButtonPadding">16 4</Thickness>
<x:Double x:Key="ColorViewNumericUpDownWidth">70</x:Double> <x:Double x:Key="ColorViewNumericUpDownWidth">70</x:Double>
<StreamGeometry x:Key="ColorViewSpectrumIconGlyph">M1.22 20.77a4.24 4.24 0 0 1 .02-5.98l9.33-9.28-.94-.95a1.41 1.41 0 0 1 0-1.99 1.39 1.39 0 0 1 1.97 0l.95.97L14.9 1.2a4.16 4.16 0 0 1 5.89.02 4.24 4.24 0 0 1-.02 5.98l-2.3 2.28 1.02 1.02c.54.55.54 1.44 0 1.99-.55.55-1.43.55-1.97 0l-1.03-1.03-9.37 9.32a4.16 4.16 0 0 1-5.89-.02ZM12.54 7.49l1.97 1.99-9.35 9.3c-.55.55-1.42.55-1.97 0a1.41 1.41 0 0 1 .01-2l9.34-9.29Z</StreamGeometry> <StaticResource x:Key="ColorViewSpectrumIconGlyph" ResourceKey="SemiIconEyedropper" />
<StreamGeometry x:Key="ColorViewPaletteIconGlyph">M2 4c0-1.1.9-2 2-2h5a2 2 0 0 1 2 2v16a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V4Zm6 13.5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0Zm11.59-8.91L16.4 5.4a2 2 0 0 0-2.82 0L13 6v12l6.59-6.59a2 2 0 0 0 0-2.82ZM22 16a2 2 0 0 0-2-2l-8 8h8a2 2 0 0 0 2-2v-4Z</StreamGeometry> <StaticResource x:Key="ColorViewPaletteIconGlyph" ResourceKey="SemiIconColorPalette" />
<StreamGeometry x:Key="ColorViewComponentsIconGlyph">M4 6.5a2 2 0 1 0 0-4 2 2 0 0 0 0 4ZM9.5 3a1.5 1.5 0 1 0 0 3h11a1.5 1.5 0 0 0 0-3h-11ZM8 11.5c0-.83.67-1.5 1.5-1.5h11a1.5 1.5 0 0 1 0 3h-11A1.5 1.5 0 0 1 8 11.5Zm0 7c0-.83.67-1.5 1.5-1.5h11a1.5 1.5 0 0 1 0 3h-11A1.5 1.5 0 0 1 8 18.5Zm-2-7a2 2 0 1 1-4 0 2 2 0 0 1 4 0Zm-2 9a2 2 0 1 0 0-4 2 2 0 0 0 0 4Z</StreamGeometry> <StaticResource x:Key="ColorViewComponentsIconGlyph" ResourceKey="SemiIconList" />
<!-- <StaticResource x:Key="ColorViewSpectrumIconGlyph" ResourceKey="SemiIconEyedropper" /> -->
<!-- <StaticResource x:Key="ColorViewPaletteIconGlyph" ResourceKey="SemiIconColorPalette" /> -->
<!-- <StaticResource x:Key="ColorViewComponentsIconGlyph" ResourceKey="SemiIconList" /> -->
<x:Double x:Key="ColorSliderWidth">16</x:Double> <StaticResource x:Key="ColorSliderWidth" ResourceKey="SemiSpacingBase" />
<CornerRadius x:Key="ColorSliderCornerRadius">6</CornerRadius> <StaticResource x:Key="ColorSliderCornerRadius" ResourceKey="SemiBorderRadiusMedium" />
<Thickness x:Key="ColorSliderThumbBorderBrush">2</Thickness> <StaticResource x:Key="ColorSliderThumbBorderBrush" ResourceKey="SemiThicknessSuperTight" />
<BoxShadows x:Key="ColorSliderBoxShadow">0 0 2 1 #FFFFFF</BoxShadows> <StaticResource x:Key="ColorSliderThumbCornerRadius" ResourceKey="SemiBorderRadiusFull" />
<x:Double x:Key="ColorPreviewerAccentSectionWidth">80</x:Double> <x:Double x:Key="ColorPreviewerAccentSectionWidth">80</x:Double>
<x:Double x:Key="ColorPreviewerAccentSectionHeight">20</x:Double> <x:Double x:Key="ColorPreviewerAccentSectionHeight">20</x:Double>
<x:Double x:Key="ColorPreviewerHeight">48</x:Double> <x:Double x:Key="ColorPreviewerHeight">48</x:Double>
<CornerRadius x:Key="ColorPreviewerCornerRadius">3</CornerRadius> <StaticResource x:Key="ColorPreviewerCornerRadius" ResourceKey="SemiBorderRadiusSmall" />
<colorPicker:SemiColorDarkPalette x:Key="SemiColorPalette" /> <semi:SemiColorDarkPalette x:Key="SemiColorPalette" />
<StaticResource x:Key="ColorSpectrumCornerRadius" ResourceKey="SemiBorderRadiusMedium" />
<StaticResource x:Key="ColorPickerMinHeight" ResourceKey="SemiHeightControlDefault" />
<StaticResource x:Key="ColorPickerCornerRadius" ResourceKey="SemiBorderRadiusSmall" />
<PlacementMode x:Key="ColorPickerFlyoutPlacement">AnchorAndGravity</PlacementMode> <PlacementMode x:Key="ColorPickerFlyoutPlacement">AnchorAndGravity</PlacementMode>
<PlacementMode x:Key="SimpleColorPickerFlyoutPlacement">BottomEdgeAlignedLeft</PlacementMode> <PlacementMode x:Key="SimpleColorPickerFlyoutPlacement">BottomEdgeAlignedLeft</PlacementMode>
</ResourceDictionary> </ResourceDictionary>

View File

@@ -1,29 +1,21 @@
<ResourceDictionary xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <ResourceDictionary xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<SolidColorBrush x:Key="DataGridLineBrush" Opacity="0.08" Color="White" /> <StaticResource x:Key="DataGridLineBrush" ResourceKey="SemiColorBorder" />
<SolidColorBrush x:Key="DataGridCellBackground" Color="Transparent" /> <SolidColorBrush x:Key="DataGridCellBackground" Color="Transparent" />
<SolidColorBrush x:Key="DataGridCellFocusBorderBrush" Color="#41464C" /> <StaticResource x:Key="DataGridCellFocusBorderBrush" ResourceKey="SemiColorTertiaryLightActive" />
<SolidColorBrush x:Key="DataGridCellCurrentBorderBrush" Opacity="0.08" Color="White" /> <StaticResource x:Key="DataGridCellCurrentBorderBrush" ResourceKey="SemiColorBorder" />
<SolidColorBrush x:Key="DataGridCellErrorBrush" Color="#6C090B" /> <StaticResource x:Key="DataGridCellErrorBrush" ResourceKey="SemiColorDangerLight" />
<StaticResource x:Key="DataGridColumnHeaderForeground" ResourceKey="SemiColorText2" />
<SolidColorBrush x:Key="DataGridColumnHeaderForeground" Opacity="0.6" Color="#F9F9F9" />
<SolidColorBrush x:Key="DataGridColumnHeaderBackground" Color="Transparent" /> <SolidColorBrush x:Key="DataGridColumnHeaderBackground" Color="Transparent" />
<SolidColorBrush x:Key="DataGridColumnHeaderPointeroverBackground" Opacity="0.16" Color="White" /> <StaticResource x:Key="DataGridColumnHeaderPointeroverBackground" ResourceKey="SemiColorFill1" />
<SolidColorBrush x:Key="DataGridColumnHeaderPressedBackground" Opacity="0.20" Color="White" /> <StaticResource x:Key="DataGridColumnHeaderPressedBackground" ResourceKey="SemiColorFill2" />
<SolidColorBrush x:Key="DataGridRowBackground" Color="Transparent" /> <SolidColorBrush x:Key="DataGridRowBackground" Color="Transparent" />
<StaticResource x:Key="DataGridRowErrorBackground" ResourceKey="SemiColorDangerLight" />
<SolidColorBrush x:Key="DataGridRowErrorBackground" Color="#6C090B" />
<SolidColorBrush x:Key="DataGridDetailsPresenterBackground" Color="Transparent" /> <SolidColorBrush x:Key="DataGridDetailsPresenterBackground" Color="Transparent" />
<StaticResource x:Key="DataGridRowPointeroverBackground" ResourceKey="SemiColorFill1" />
<SolidColorBrush x:Key="DataGridRowPointeroverBackground" Opacity="0.16" Color="White" /> <StaticResource x:Key="DataGridRowSelectedBackground" ResourceKey="SemiColorPrimaryLight" />
<SolidColorBrush x:Key="DataGridRowSelectedBackground" Opacity="0.2" Color="#FF54A9FF" /> <StaticResource x:Key="DataGridRowSelectedPointeroverBackground" ResourceKey="SemiColorPrimaryLightPointerover" />
<SolidColorBrush x:Key="DataGridRowSelectedPointeroverBackground" Opacity="0.3" Color="#FF54A9FF" /> <StaticResource x:Key="DataGridRowGroupHeaderExpandIconForeground" ResourceKey="SemiColorText2" />
<SolidColorBrush x:Key="DataGridRowGroupHeaderExpandIconForeground" Opacity="0.6" Color="#F9F9F9" /> <StaticResource x:Key="DataGridRowGroupHeaderBackground" ResourceKey="SemiColorFill0" />
<SolidColorBrush x:Key="DataGridRowGroupHeaderBackground" Opacity="0.12" Color="White" /> <StaticResource x:Key="DataGridRowGroupHeaderCurrentBorderBrush" ResourceKey="SemiColorBorder" />
<StaticResource x:Key="DataGridDisabledBackground" ResourceKey="SemiColorDisabledFill" />
<SolidColorBrush x:Key="DataGridRowGroupHeaderCurrentBorderBrush" Opacity="0.08" Color="White" />
<SolidColorBrush x:Key="DataGridDisabledBackground" Color="#E6E8EA" Opacity="0.04" />
</ResourceDictionary> </ResourceDictionary>

View File

@@ -126,21 +126,19 @@
Name="HeaderBackground" Name="HeaderBackground"
Grid.ColumnSpan="2" Grid.ColumnSpan="2"
Margin="4" Margin="4"
CornerRadius="3" /> CornerRadius="{DynamicResource DataGridColumnHeaderCornerRadius}" />
<Grid <Grid
ColumnDefinitions="*,Auto"
Margin="{TemplateBinding Padding}" Margin="{TemplateBinding Padding}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"> VerticalAlignment="{TemplateBinding VerticalContentAlignment}">
<Grid.ColumnDefinitions> <ContentPresenter
<ColumnDefinition Width="*" /> Content="{TemplateBinding Content}"
<ColumnDefinition Width="Auto" /> ContentTemplate="{TemplateBinding ContentTemplate}" />
</Grid.ColumnDefinitions>
<ContentPresenter Content="{TemplateBinding Content}" ContentTemplate="{TemplateBinding ContentTemplate}" />
<PathIcon <PathIcon
Name="SortIcon" Name="SortIcon"
Grid.Column="1" Grid.Column="1"
Width="8" Theme="{StaticResource InnerPathIcon}"
Height="8"
Margin="0,0,8,0" Margin="0,0,8,0"
Foreground="{TemplateBinding Foreground}" /> Foreground="{TemplateBinding Foreground}" />
</Grid> </Grid>
@@ -293,7 +291,7 @@
Grid.ColumnSpan="2" Grid.ColumnSpan="2"
Margin="{DynamicResource DataGridRowMargin}" Margin="{DynamicResource DataGridRowMargin}"
Background="{DynamicResource DataGridRowBackground}" Background="{DynamicResource DataGridRowBackground}"
CornerRadius="3" /> CornerRadius="{DynamicResource DataGridRowCornerRadius}" />
<Rectangle <Rectangle
Name="InvalidVisualElement" Name="InvalidVisualElement"
Grid.ColumnSpan="2" Grid.ColumnSpan="2"
@@ -358,8 +356,7 @@
<Setter Property="Template"> <Setter Property="Template">
<ControlTemplate TargetType="ToggleButton"> <ControlTemplate TargetType="ToggleButton">
<PathIcon <PathIcon
Width="12" Theme="{StaticResource InnerPathIcon}"
Height="12"
HorizontalAlignment="Center" HorizontalAlignment="Center"
VerticalAlignment="Center" VerticalAlignment="Center"
Background="Transparent" Background="Transparent"
@@ -375,7 +372,7 @@
<ControlTheme x:Key="{x:Type DataGridRowGroupHeader}" TargetType="DataGridRowGroupHeader"> <ControlTheme x:Key="{x:Type DataGridRowGroupHeader}" TargetType="DataGridRowGroupHeader">
<Setter Property="Focusable" Value="False" /> <Setter Property="Focusable" Value="False" />
<Setter Property="Background" Value="{DynamicResource DataGridRowGroupHeaderBackground}" /> <Setter Property="Background" Value="{DynamicResource DataGridRowGroupHeaderBackground}" />
<Setter Property="MinHeight" Value="32" /> <Setter Property="MinHeight" Value="{DynamicResource DataGridRowGroupHeaderMinHeight}" />
<Setter Property="Template"> <Setter Property="Template">
<ControlTemplate x:DataType="collections:DataGridCollectionViewGroup" TargetType="DataGridRowGroupHeader"> <ControlTemplate x:DataType="collections:DataGridCollectionViewGroup" TargetType="DataGridRowGroupHeader">
<DataGridFrozenGrid <DataGridFrozenGrid
@@ -400,20 +397,18 @@
Grid.Column="3" Grid.Column="3"
Margin="12,0,0,0" Margin="12,0,0,0"
VerticalAlignment="Center" VerticalAlignment="Center"
Orientation="Horizontal"> Orientation="Horizontal"
Spacing="4">
<TextBlock <TextBlock
Name="PART_PropertyNameElement" Name="PART_PropertyNameElement"
Margin="4,0,0,0"
Foreground="{TemplateBinding Foreground}" Foreground="{TemplateBinding Foreground}"
IsVisible="{TemplateBinding IsPropertyNameVisible}" /> IsVisible="{TemplateBinding IsPropertyNameVisible}" />
<ContentControl <ContentControl
Name="PART_GroupKeyContentControl" Name="PART_GroupKeyContentControl"
Margin="4,0,0,0"
Foreground="{TemplateBinding Foreground}" Foreground="{TemplateBinding Foreground}"
Content="{Binding Key}" /> Content="{Binding Key}" />
<TextBlock <TextBlock
Name="PART_ItemCountElement" Name="PART_ItemCountElement"
Margin="4,0,0,0"
Foreground="{TemplateBinding Foreground}" Foreground="{TemplateBinding Foreground}"
IsVisible="{TemplateBinding IsItemCountVisible}" /> IsVisible="{TemplateBinding IsItemCountVisible}" />
</StackPanel> </StackPanel>
@@ -530,6 +525,7 @@
Name="PART_VerticalScrollbar" Name="PART_VerticalScrollbar"
Grid.Row="1" Grid.Row="1"
Grid.Column="2" Grid.Column="2"
AllowAutoHide="{Binding Path=(ScrollViewer.AllowAutoHide), RelativeSource={RelativeSource TemplatedParent}}"
Orientation="Vertical" /> Orientation="Vertical" />
<Grid <Grid
@@ -540,6 +536,7 @@
<ScrollBar <ScrollBar
Name="PART_HorizontalScrollbar" Name="PART_HorizontalScrollbar"
Grid.Column="1" Grid.Column="1"
AllowAutoHide="{Binding Path=(ScrollViewer.AllowAutoHide), RelativeSource={RelativeSource TemplatedParent}}"
Height="{DynamicResource ScrollBarSize}" Height="{DynamicResource ScrollBarSize}"
Orientation="Horizontal" /> Orientation="Horizontal" />
</Grid> </Grid>
@@ -552,7 +549,7 @@
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
VerticalAlignment="Stretch" VerticalAlignment="Stretch"
Background="{DynamicResource DataGridDisabledBackground}" Background="{DynamicResource DataGridDisabledBackground}"
CornerRadius="2" CornerRadius="{DynamicResource DataGridDisabledCornerRadius}"
IsHitTestVisible="False" IsHitTestVisible="False"
IsVisible="{Binding !$parent[DataGrid].IsEnabled}" /> IsVisible="{Binding !$parent[DataGrid].IsEnabled}" />
</Grid> </Grid>
@@ -572,7 +569,7 @@
</Style> </Style>
</Style> </Style>
<Style Selector="^[(ScrollViewer.AllowAutoHide)=False]"> <Style Selector="^.InsetContent">
<Style Selector="^ /template/ DataGridRowsPresenter#PART_RowsPresenter"> <Style Selector="^ /template/ DataGridRowsPresenter#PART_RowsPresenter">
<Setter Property="Grid.RowSpan" Value="1" /> <Setter Property="Grid.RowSpan" Value="1" />
<Setter Property="Grid.ColumnSpan" Value="2" /> <Setter Property="Grid.ColumnSpan" Value="2" />

View File

@@ -1,29 +1,21 @@
<ResourceDictionary xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <ResourceDictionary xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<SolidColorBrush x:Key="DataGridLineBrush" Opacity="0.08" Color="#1C1F23" /> <StaticResource x:Key="DataGridLineBrush" ResourceKey="SemiColorBorder" />
<SolidColorBrush x:Key="DataGridCellBackground" Color="Transparent" /> <SolidColorBrush x:Key="DataGridCellBackground" Color="Transparent" />
<SolidColorBrush x:Key="DataGridCellFocusBorderBrush" Color="#C6CACD" /> <StaticResource x:Key="DataGridCellFocusBorderBrush" ResourceKey="SemiColorTertiaryLightActive" />
<SolidColorBrush x:Key="DataGridCellCurrentBorderBrush" Opacity="0.08" Color="#1C1F23" /> <StaticResource x:Key="DataGridCellCurrentBorderBrush" ResourceKey="SemiColorBorder" />
<SolidColorBrush x:Key="DataGridCellErrorBrush" Color="#FEF2ED" /> <StaticResource x:Key="DataGridCellErrorBrush" ResourceKey="SemiColorDangerLight" />
<StaticResource x:Key="DataGridColumnHeaderForeground" ResourceKey="SemiColorText2" />
<SolidColorBrush x:Key="DataGridColumnHeaderForeground" Opacity="0.62" Color="#1C1F23" />
<SolidColorBrush x:Key="DataGridColumnHeaderBackground" Color="Transparent" /> <SolidColorBrush x:Key="DataGridColumnHeaderBackground" Color="Transparent" />
<SolidColorBrush x:Key="DataGridColumnHeaderPointeroverBackground" Opacity="0.09" Color="#2E3238" /> <StaticResource x:Key="DataGridColumnHeaderPointeroverBackground" ResourceKey="SemiColorFill1" />
<SolidColorBrush x:Key="DataGridColumnHeaderPressedBackground" Opacity="0.13" Color="#2E3238" /> <StaticResource x:Key="DataGridColumnHeaderPressedBackground" ResourceKey="SemiColorFill2" />
<SolidColorBrush x:Key="DataGridRowBackground" Color="Transparent" /> <SolidColorBrush x:Key="DataGridRowBackground" Color="Transparent" />
<StaticResource x:Key="DataGridRowErrorBackground" ResourceKey="SemiColorDangerLight" />
<SolidColorBrush x:Key="DataGridRowErrorBackground" Color="#FEF2ED" />
<SolidColorBrush x:Key="DataGridDetailsPresenterBackground" Color="Transparent" /> <SolidColorBrush x:Key="DataGridDetailsPresenterBackground" Color="Transparent" />
<StaticResource x:Key="DataGridRowPointeroverBackground" ResourceKey="SemiColorFill1" />
<SolidColorBrush x:Key="DataGridRowPointeroverBackground" Opacity="0.09" Color="#2E3238" /> <StaticResource x:Key="DataGridRowSelectedBackground" ResourceKey="SemiColorPrimaryLight" />
<SolidColorBrush x:Key="DataGridRowSelectedBackground" Color="#EAF5FF" /> <StaticResource x:Key="DataGridRowSelectedPointeroverBackground" ResourceKey="SemiColorPrimaryLightPointerover" />
<SolidColorBrush x:Key="DataGridRowSelectedPointeroverBackground" Color="#CBE7FE" /> <StaticResource x:Key="DataGridRowGroupHeaderExpandIconForeground" ResourceKey="SemiColorText2" />
<SolidColorBrush x:Key="DataGridRowGroupHeaderExpandIconForeground" Opacity="0.62" Color="#1C1F23" /> <StaticResource x:Key="DataGridRowGroupHeaderBackground" ResourceKey="SemiColorFill0" />
<SolidColorBrush x:Key="DataGridRowGroupHeaderBackground" Opacity="0.05" Color="#2E3238" /> <StaticResource x:Key="DataGridRowGroupHeaderCurrentBorderBrush" ResourceKey="SemiColorBorder" />
<StaticResource x:Key="DataGridDisabledBackground" ResourceKey="SemiColorDisabledFill" />
<SolidColorBrush x:Key="DataGridRowGroupHeaderCurrentBorderBrush" Opacity="0.08" Color="#1C1F23" />
<SolidColorBrush x:Key="DataGridDisabledBackground" Color="#2E3238" Opacity="0.02" />
</ResourceDictionary> </ResourceDictionary>

View File

@@ -1,10 +1,18 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<Import Project="../Package.props"/>
<PropertyGroup> <PropertyGroup>
<TargetFrameworks>netstandard2.0;net6.0;net8.0</TargetFrameworks>
<Nullable>enable</Nullable>
<LangVersion>latest</LangVersion>
<Version>11.2.1.6</Version>
<PackageReleaseNotes>Update to Semi.Avalonia.DataGrid 11.2.1.6</PackageReleaseNotes>
<Authors>IRIHI Technology Co., Ltd.</Authors>
<Description>Avalonia Theme inspired by Semi Design.</Description>
<RepositoryUrl>https://github.com/irihitech/Semi.Avalonia</RepositoryUrl>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
<PackageIcon>irihi.png</PackageIcon>
<PackageProjectUrl>https://github.com/irihitech/Semi.Avalonia</PackageProjectUrl>
<Title>Semi.Avalonia.DataGrid</Title> <Title>Semi.Avalonia.DataGrid</Title>
<PackageReleaseNotes>Update to Semi.Avalonia.DataGrid 11.2.1.2</PackageReleaseNotes>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net8.0'))"> <PropertyGroup Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net8.0'))">
@@ -12,8 +20,8 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Avalonia" Version="$(AvaloniaVersion)"/> <PackageReference Include="Avalonia.Controls.DataGrid" Version="11.2.1"/>
<PackageReference Include="Avalonia.Controls.DataGrid" Version="$(AvaloniaVersion)"/> <None Include="irihi.png" Pack="true" PackagePath=""/>
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@@ -1,23 +1,22 @@
<ResourceDictionary xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <ResourceDictionary xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Thickness x:Key="DataGridCellTextBlockDefaultMargin">12 0</Thickness> <Thickness x:Key="DataGridCellTextBlockDefaultMargin">12 0</Thickness>
<StaticResource x:Key="DataGridCellMinHeight" ResourceKey="SemiHeightControlDefault" />
<x:Double x:Key="DataGridCellMinHeight">32</x:Double> <StaticResource x:Key="DataGridCellVisualBorderThickness" ResourceKey="SemiBorderThicknessControl" />
<Thickness x:Key="DataGridCellVisualBorderThickness">1</Thickness> <StaticResource x:Key="DataGridCellVisualStrokeThickness" ResourceKey="SemiBorderSpacingControl" />
<x:Double x:Key="DataGridCellVisualStrokeThickness">1</x:Double>
<Thickness x:Key="DataGridColumnHeaderPadding">12 0 0 0</Thickness> <Thickness x:Key="DataGridColumnHeaderPadding">12 0 0 0</Thickness>
<x:Double x:Key="DataGridColumnHeaderMinHeight">32</x:Double> <StaticResource x:Key="DataGridColumnHeaderMinHeight" ResourceKey="SemiHeightControlDefault" />
<StaticResource x:Key="DataGridColumnHeaderCornerRadius" ResourceKey="SemiBorderRadiusSmall" />
<StreamGeometry x:Key="DataGridColumnHeaderAscendingGlyph">m6.45 8.34 4.8-5.48a1 1 0 0 1 1.5 0l4.8 5.48A1 1 0 0 1 16.8 10H7.2a1 1 0 0 1-.75-1.66Z</StreamGeometry> <StaticResource x:Key="DataGridColumnHeaderAscendingGlyph" ResourceKey="SemiIconSmallTriangleTop" />
<StreamGeometry x:Key="DataGridColumnHeaderDescendingGlyph">m17.55 15.66-4.8 5.48a1 1 0 0 1-1.5 0l-4.8-5.48A1 1 0 0 1 7.2 14h9.6a1 1 0 0 1 .75 1.66Z</StreamGeometry> <StaticResource x:Key="DataGridColumnHeaderDescendingGlyph" ResourceKey="SemiIconSmallTriangleDown" />
<!-- <StaticResource x:Key="DataGridColumnHeaderAscendingGlyph" ResourceKey="SemiIconCaretUp" /> -->
<!-- <StaticResource x:Key="DataGridColumnHeaderDescendingGlyph" ResourceKey="SemiIconCaretDown" /> -->
<Thickness x:Key="DataGridRowHeaderMargin">8 0</Thickness> <Thickness x:Key="DataGridRowHeaderMargin">8 0</Thickness>
<Thickness x:Key="DataGridRowMargin">2</Thickness> <StaticResource x:Key="DataGridRowCornerRadius" ResourceKey="SemiBorderRadiusSmall" />
<StaticResource x:Key="DataGridRowMargin" ResourceKey="SemiThicknessSuperTight" />
<StreamGeometry x:Key="DataGridRowGroupHeaderExpandIconGlyph">M7.44 19.8a1.5 1.5 0 0 1 0-2.13l5.66-5.65-5.66-5.66a1.5 1.5 0 1 1 2.12-2.12l6.72 6.72a1.5 1.5 0 0 1 0 2.12L9.56 19.8a1.5 1.5 0 0 1-2.12 0Z</StreamGeometry> <StaticResource x:Key="DataGridRowGroupHeaderMinHeight" ResourceKey="SemiHeightControlDefault" />
<!-- <StaticResource x:Key="DataGridRowGroupHeaderExpandIconGlyph" ResourceKey="SemiIconChevronRight" /> --> <StaticResource x:Key="DataGridRowGroupHeaderExpandIconGlyph" ResourceKey="SemiIconChevronRight" />
<StaticResource x:Key="DataGridRowGroupHeaderVisualStrokeThickness" ResourceKey="SemiBorderSpacingControl" />
<x:Double x:Key="DataGridRowGroupHeaderVisualStrokeThickness">1</x:Double> <StaticResource x:Key="DataGridDisabledCornerRadius" ResourceKey="SemiBorderRadiusSmall" />
</ResourceDictionary> </ResourceDictionary>

View File

@@ -1,11 +1,11 @@
<ResourceDictionary xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <ResourceDictionary xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<SolidColorBrush x:Key="TreeDataGridGridLinesBrush" Opacity="0.08" Color="White" /> <StaticResource x:Key="TreeDataGridGridLinesBrush" ResourceKey="SemiColorBorder" />
<SolidColorBrush x:Key="TreeDataGridHeaderPointerOverBackground" Opacity="0.16" Color="White" /> <StaticResource x:Key="TreeDataGridHeaderPointerOverBackground" ResourceKey="SemiColorFill1" />
<SolidColorBrush x:Key="TreeDataGridHeaderPressedBackground" Opacity="0.20" Color="White" /> <StaticResource x:Key="TreeDataGridHeaderPressedBackground" ResourceKey="SemiColorFill2" />
<SolidColorBrush x:Key="TreeDataGridHeaderPointerOverBorderBrush" Color="Transparent" /> <SolidColorBrush x:Key="TreeDataGridHeaderPointerOverBorderBrush" Color="Transparent" />
<SolidColorBrush x:Key="TreeDataGridHeaderPressedBorderBrush" Color="Transparent" /> <SolidColorBrush x:Key="TreeDataGridHeaderPressedBorderBrush" Color="Transparent" />
<SolidColorBrush x:Key="TreeDataGridHeaderPointerOverForeground" Opacity="0.8" Color="#F9F9F9" /> <StaticResource x:Key="TreeDataGridHeaderPointerOverForeground" ResourceKey="SemiColorText1" />
<SolidColorBrush x:Key="TreeDataGridHeaderPressedForeground" Opacity="1" Color="#F9F9F9" /> <StaticResource x:Key="TreeDataGridHeaderPressedForeground" ResourceKey="SemiColorText0" />
<SolidColorBrush x:Key="TreeDataGridCellSelectedBackground" Opacity="0.2" Color="#FF54A9FF" /> <StaticResource x:Key="TreeDataGridCellSelectedBackground" ResourceKey="SemiColorPrimaryLight" />
<SolidColorBrush x:Key="TreeDataGridColumnHeaderForeground" Opacity="0.6" Color="#F9F9F9" /> <StaticResource x:Key="TreeDataGridColumnHeaderForeground" ResourceKey="SemiColorText2" />
</ResourceDictionary> </ResourceDictionary>

View File

@@ -1,11 +1,11 @@
<ResourceDictionary xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <ResourceDictionary xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<SolidColorBrush x:Key="TreeDataGridGridLinesBrush" Opacity="0.08" Color="#1C1F23" /> <StaticResource x:Key="TreeDataGridGridLinesBrush" ResourceKey="SemiColorBorder" />
<SolidColorBrush x:Key="TreeDataGridHeaderPointerOverBackground" Opacity="0.09" Color="#2E3238" /> <StaticResource x:Key="TreeDataGridHeaderPointerOverBackground" ResourceKey="SemiColorFill1" />
<SolidColorBrush x:Key="TreeDataGridHeaderPressedBackground" Opacity="0.13" Color="#2E3238" /> <StaticResource x:Key="TreeDataGridHeaderPressedBackground" ResourceKey="SemiColorFill2" />
<SolidColorBrush x:Key="TreeDataGridHeaderPointerOverBorderBrush" Color="Transparent" /> <SolidColorBrush x:Key="TreeDataGridHeaderPointerOverBorderBrush" Color="Transparent" />
<SolidColorBrush x:Key="TreeDataGridHeaderPressedBorderBrush" Color="Transparent" /> <SolidColorBrush x:Key="TreeDataGridHeaderPressedBorderBrush" Color="Transparent" />
<SolidColorBrush x:Key="TreeDataGridHeaderPointerOverForeground" Opacity="0.8" Color="#1C1F23" /> <StaticResource x:Key="TreeDataGridHeaderPointerOverForeground" ResourceKey="SemiColorText1" />
<SolidColorBrush x:Key="TreeDataGridHeaderPressedForeground" Opacity="1" Color="#1C1F23" /> <StaticResource x:Key="TreeDataGridHeaderPressedForeground" ResourceKey="SemiColorText0" />
<SolidColorBrush x:Key="TreeDataGridCellSelectedBackground" Color="#EAF5FF" /> <StaticResource x:Key="TreeDataGridCellSelectedBackground" ResourceKey="SemiColorPrimaryLight" />
<SolidColorBrush x:Key="TreeDataGridColumnHeaderForeground" Opacity="0.62" Color="#1C1F23" /> <StaticResource x:Key="TreeDataGridColumnHeaderForeground" ResourceKey="SemiColorText2" />
</ResourceDictionary> </ResourceDictionary>

View File

@@ -4,8 +4,8 @@
<TargetFramework>net6.0</TargetFramework> <TargetFramework>net6.0</TargetFramework>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<LangVersion>latest</LangVersion> <LangVersion>latest</LangVersion>
<Version>11.0.10.1</Version> <Version>11.0.10.2</Version>
<PackageReleaseNotes>Update to 11.0.10.1</PackageReleaseNotes> <PackageReleaseNotes>Update to 11.0.10.2</PackageReleaseNotes>
<Authors>IRIHI Technology Co., Ltd.</Authors> <Authors>IRIHI Technology Co., Ltd.</Authors>
<Description>Avalonia Theme inspired by Semi Design.</Description> <Description>Avalonia Theme inspired by Semi Design.</Description>
<RepositoryUrl>https://github.com/irihitech/Semi.Avalonia</RepositoryUrl> <RepositoryUrl>https://github.com/irihitech/Semi.Avalonia</RepositoryUrl>

View File

@@ -1,9 +1,11 @@
<ResourceDictionary xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <ResourceDictionary xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<StreamGeometry x:Key="TreeDataGridSortIconAscendingPath">m6.45 8.34 4.8-5.48a1 1 0 0 1 1.5 0l4.8 5.48A1 1 0 0 1 16.8 10H7.2a1 1 0 0 1-.75-1.66Z</StreamGeometry> <StaticResource x:Key="TreeDataGridSortIconAscendingPath" ResourceKey="SemiIconSmallTriangleTop" />
<StreamGeometry x:Key="TreeDataGridSortIconDescendingPath">m17.55 15.66-4.8 5.48a1 1 0 0 1-1.5 0l-4.8-5.48A1 1 0 0 1 7.2 14h9.6a1 1 0 0 1 .75 1.66Z</StreamGeometry> <StaticResource x:Key="TreeDataGridSortIconDescendingPath" ResourceKey="SemiIconSmallTriangleDown" />
<StreamGeometry x:Key="TreeDataGridItemCollapsedChevronPathData">m9.66 3.44 8.97 7.8a1 1 0 0 1 0 1.51l-8.97 7.81A1 1 0 0 1 8 19.81V4.19a1 1 0 0 1 1.66-.75Z</StreamGeometry> <StaticResource x:Key="TreeDataGridItemCollapsedChevronPathData" ResourceKey="SemiIconTreeTriangleRight" />
<!-- <StaticResource x:Key="TreeDataGridSortIconAscendingPath" ResourceKey="SemiIconCaretUp"/> --> <StaticResource x:Key="TreeDataGridItemCollapsedChevronWidth" ResourceKey="SemiWidthIconMedium" />
<!-- <StaticResource x:Key="TreeDataGridSortIconDescendingPath" ResourceKey="SemiIconCaretDown"/> --> <StaticResource x:Key="TreeDataGridColumnHeaderCornerRadius" ResourceKey="SemiBorderRadiusSmall" />
<!-- <StaticResource x:Key="TreeDataGridItemCollapsedChevronPathData" ResourceKey="SemiIconTreeTriangleRight"/> --> <StaticResource x:Key="TreeDataGridColumnHeaderMinHeight" ResourceKey="SemiHeightControlDefault" />
<Thickness x:Key="TreeDataGridRowMargin">2</Thickness> <StaticResource x:Key="TreeDataGridRowCornerRadius" ResourceKey="SemiBorderRadiusSmall" />
<StaticResource x:Key="TreeDataGridRowMinHeight" ResourceKey="SemiHeightControlDefault" />
<StaticResource x:Key="TreeDataGridRowMargin" ResourceKey="SemiThicknessSuperTight" />
</ResourceDictionary> </ResourceDictionary>

View File

@@ -49,10 +49,10 @@
<ControlTheme x:Key="{x:Type TreeDataGridColumnHeader}" TargetType="TreeDataGridColumnHeader"> <ControlTheme x:Key="{x:Type TreeDataGridColumnHeader}" TargetType="TreeDataGridColumnHeader">
<Setter Property="Background" Value="Transparent" /> <Setter Property="Background" Value="Transparent" />
<Setter Property="MinHeight" Value="32" /> <Setter Property="MinHeight" Value="{DynamicResource TreeDataGridColumnHeaderMinHeight}" />
<Setter Property="Padding" Value="8 2 0 2" /> <Setter Property="Padding" Value="8 2 0 2" />
<Setter Property="Cursor" Value="Hand" /> <Setter Property="Cursor" Value="Hand" />
<Setter Property="CornerRadius" Value="4" /> <Setter Property="CornerRadius" Value="{DynamicResource TreeDataGridColumnHeaderCornerRadius}" />
<Setter Property="VerticalContentAlignment" Value="Center" /> <Setter Property="VerticalContentAlignment" Value="Center" />
<Setter Property="Foreground" Value="{DynamicResource TreeDataGridColumnHeaderForeground}" /> <Setter Property="Foreground" Value="{DynamicResource TreeDataGridColumnHeaderForeground}" />
<Setter Property="Template"> <Setter Property="Template">
@@ -87,11 +87,8 @@
</Panel> </Panel>
<PathIcon <PathIcon
Name="SortIcon" Name="SortIcon"
Width="8" Theme="{StaticResource InnerPathIcon}"
Height="8"
Margin="0,0,8,0" Margin="0,0,8,0"
HorizontalAlignment="Center"
VerticalAlignment="Center"
DockPanel.Dock="Right" DockPanel.Dock="Right"
Foreground="{TemplateBinding Foreground}" Foreground="{TemplateBinding Foreground}"
TabIndex="1" /> TabIndex="1" />
@@ -140,8 +137,8 @@
<ControlTheme x:Key="{x:Type TreeDataGridRow}" TargetType="TreeDataGridRow"> <ControlTheme x:Key="{x:Type TreeDataGridRow}" TargetType="TreeDataGridRow">
<Setter Property="Background" Value="Transparent" /> <Setter Property="Background" Value="Transparent" />
<Setter Property="CornerRadius" Value="3" /> <Setter Property="CornerRadius" Value="{DynamicResource TreeDataGridRowCornerRadius}" />
<Setter Property="MinHeight" Value="32" /> <Setter Property="MinHeight" Value="{DynamicResource TreeDataGridRowMinHeight}" />
<Setter Property="Cursor" Value="Hand" /> <Setter Property="Cursor" Value="Hand" />
<Setter Property="Template"> <Setter Property="Template">
<ControlTemplate> <ControlTemplate>
@@ -192,25 +189,17 @@
</ControlTheme> </ControlTheme>
<ControlTheme x:Key="TreeDataGridExpandCollapseChevron" TargetType="ToggleButton"> <ControlTheme x:Key="TreeDataGridExpandCollapseChevron" TargetType="ToggleButton">
<Setter Property="Margin" Value="0" />
<Setter Property="Width" Value="8" />
<Setter Property="Height" Value="8" />
<Setter Property="Foreground" Value="{DynamicResource TreeDataGridColumnHeaderForeground}" /> <Setter Property="Foreground" Value="{DynamicResource TreeDataGridColumnHeaderForeground}" />
<Setter Property="Template"> <Setter Property="Template">
<ControlTemplate> <ControlTemplate>
<Border <PathIcon
Name="ChevronPath"
Width="{TemplateBinding Width}" Width="{TemplateBinding Width}"
Height="{TemplateBinding Height}" Height="{TemplateBinding Height}"
HorizontalAlignment="Center" Theme="{StaticResource InnerPathIcon}"
VerticalAlignment="Center" Classes="Small"
Background="Transparent"> Data="{DynamicResource TreeDataGridItemCollapsedChevronPathData}"
<PathIcon Foreground="{TemplateBinding Foreground}" />
Name="ChevronPath"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Data="{DynamicResource TreeDataGridItemCollapsedChevronPathData}"
Foreground="{TemplateBinding Foreground}" />
</Border>
</ControlTemplate> </ControlTemplate>
</Setter> </Setter>
<Style Selector="^:checked /template/ PathIcon#ChevronPath"> <Style Selector="^:checked /template/ PathIcon#ChevronPath">
@@ -223,18 +212,16 @@
<ControlTemplate> <ControlTemplate>
<Border <Border
Name="CellBorder" Name="CellBorder"
Padding="{TemplateBinding Indent, Padding="{TemplateBinding Indent,Converter={x:Static conv:IndentConverter.Instance}}"
Converter={x:Static conv:IndentConverter.Instance}}"
Background="{TemplateBinding Background}" Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}" BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}" BorderThickness="{TemplateBinding BorderThickness}"
CornerRadius="{TemplateBinding CornerRadius}"> CornerRadius="{TemplateBinding CornerRadius}">
<DockPanel> <DockPanel>
<Border <Border
Width="12" DockPanel.Dock="Left"
Height="12" Width="{DynamicResource TreeDataGridItemCollapsedChevronWidth}"
Margin="4,0" Margin="4,0">
DockPanel.Dock="Left">
<ToggleButton <ToggleButton
Focusable="False" Focusable="False"
IsChecked="{TemplateBinding IsExpanded, Mode=TwoWay}" IsChecked="{TemplateBinding IsExpanded, Mode=TwoWay}"

View File

@@ -1,7 +1,7 @@
<ResourceDictionary <ResourceDictionary
xmlns="https://github.com/avaloniaui" xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:ClassModifier="internal"> x:CompileBindings="True">
<ControlTheme x:Key="{x:Type AdornerLayer}" TargetType="AdornerLayer"> <ControlTheme x:Key="{x:Type AdornerLayer}" TargetType="AdornerLayer">
<Setter Property="DefaultFocusAdorner"> <Setter Property="DefaultFocusAdorner">
<FocusAdornerTemplate> <FocusAdornerTemplate>

View File

@@ -79,12 +79,12 @@
BorderThickness="{DynamicResource AutoCompleteBoxPopupBorderThickness}" BorderThickness="{DynamicResource AutoCompleteBoxPopupBorderThickness}"
BoxShadow="{DynamicResource AutoCompleteBoxPopupBoxShadow}" BoxShadow="{DynamicResource AutoCompleteBoxPopupBoxShadow}"
CornerRadius="{DynamicResource AutoCompleteBoxPopupCornerRadius}"> CornerRadius="{DynamicResource AutoCompleteBoxPopupCornerRadius}">
<ListBox <ListBox
Name="PART_SelectingItemsControl" Name="PART_SelectingItemsControl"
Foreground="{TemplateBinding Foreground}" Foreground="{TemplateBinding Foreground}"
ItemTemplate="{TemplateBinding ItemTemplate}" ItemTemplate="{TemplateBinding ItemTemplate}"
ScrollViewer.HorizontalScrollBarVisibility="Auto" ScrollViewer.HorizontalScrollBarVisibility="Auto"
ScrollViewer.VerticalScrollBarVisibility="Auto" /> ScrollViewer.VerticalScrollBarVisibility="Auto" />
</Border> </Border>
</Popup> </Popup>
</Panel> </Panel>

View File

@@ -108,11 +108,9 @@
Classes="Solid" /> Classes="Solid" />
</FocusAdornerTemplate> </FocusAdornerTemplate>
</Setter> </Setter>
<Style Selector="^ /template/ ContentPresenter#PART_ContentPresenter"> <Setter Property="Foreground" Value="{DynamicResource ButtonSolidForeground}" />
<Setter Property="Foreground" Value="{DynamicResource ButtonSolidForeground}" /> <Setter Property="Background" Value="{DynamicResource ButtonSolidPrimaryBackground}" />
<Setter Property="Background" Value="{DynamicResource ButtonSolidPrimaryBackground}" /> <Setter Property="BorderBrush" Value="{DynamicResource ButtonSolidPrimaryBorderBrush}" />
<Setter Property="BorderBrush" Value="{DynamicResource ButtonSolidPrimaryBorderBrush}" />
</Style>
<Style Selector="^:pointerover /template/ ContentPresenter#PART_ContentPresenter"> <Style Selector="^:pointerover /template/ ContentPresenter#PART_ContentPresenter">
<Setter Property="Background" Value="{DynamicResource ButtonSolidPrimaryPointeroverBackground}" /> <Setter Property="Background" Value="{DynamicResource ButtonSolidPrimaryPointeroverBackground}" />
@@ -272,8 +270,8 @@
</ControlTheme> </ControlTheme>
<ControlTheme x:Key="InnerIconButton" TargetType="Button"> <ControlTheme x:Key="InnerIconButton" TargetType="Button">
<Setter Property="Width" Value="16"/> <Setter Property="Width" Value="{DynamicResource SemiWidthIconMedium}" />
<Setter Property="Height" Value="16"/> <Setter Property="Height" Value="{DynamicResource SemiWidthIconMedium}" />
<Setter Property="Foreground" Value="{DynamicResource ButtonInputInnerForeground}" /> <Setter Property="Foreground" Value="{DynamicResource ButtonInputInnerForeground}" />
<Setter Property="Background" Value="Transparent" /> <Setter Property="Background" Value="Transparent" />
<Setter Property="Cursor" Value="Hand" /> <Setter Property="Cursor" Value="Hand" />

View File

@@ -98,7 +98,7 @@
<Setter Property="Margin" Value="0 0 4 0" /> <Setter Property="Margin" Value="0 0 4 0" />
</Style> </Style>
<Style Selector="^:pointerover /template/ Border#ButtonGroup"> <Style Selector="^:pointerover /template/ Border#ButtonGroup">
<Setter Property="BorderBrush" Value="{DynamicResource ButtonSpinnerRepeatButtonPointeroverBorderBrush}"/> <Setter Property="BorderBrush" Value="{DynamicResource ButtonSpinnerRepeatButtonPointeroverBorderBrush}" />
</Style> </Style>
</ControlTheme> </ControlTheme>
</ResourceDictionary> </ResourceDictionary>

View File

@@ -2,6 +2,11 @@
xmlns="https://github.com/avaloniaui" xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:CompileBindings="True"> x:CompileBindings="True">
<Design.PreviewWith>
<Border Padding="20">
<Calendar />
</Border>
</Design.PreviewWith>
<ControlTheme x:Key="{x:Type Calendar}" TargetType="Calendar"> <ControlTheme x:Key="{x:Type Calendar}" TargetType="Calendar">
<Setter Property="Foreground" Value="{DynamicResource CalendarForeground}" /> <Setter Property="Foreground" Value="{DynamicResource CalendarForeground}" />
<Setter Property="Background" Value="{DynamicResource CalendarBackground}" /> <Setter Property="Background" Value="{DynamicResource CalendarBackground}" />
@@ -37,7 +42,8 @@
HorizontalAlignment="Center" HorizontalAlignment="Center"
VerticalAlignment="Center" VerticalAlignment="Center"
x:DataType="x:String" x:DataType="x:String"
FontSize="12" FontSize="{DynamicResource CalendarItemWeekDayNameFontSize}"
FontWeight="{DynamicResource CalendarItemWeekDayNameFontWeight}"
Foreground="{DynamicResource CalendarItemWeekDayNameForeground}" Foreground="{DynamicResource CalendarItemWeekDayNameForeground}"
Text="{Binding}" /> Text="{Binding}" />
</Template> </Template>
@@ -58,38 +64,41 @@
VerticalAlignment="Stretch" VerticalAlignment="Stretch"
RowDefinitions="Auto,*"> RowDefinitions="Auto,*">
<Grid Grid.Row="0" ColumnDefinitions="Auto,*,Auto"> <Grid Grid.Row="0" ColumnDefinitions="Auto,*,Auto">
<Button <RepeatButton
Name="PART_PreviousButton" Name="PART_PreviousButton"
Grid.Column="0" Grid.Column="0"
HorizontalContentAlignment="Left" Padding="0"
MinWidth="{Binding $self.MinHeight}"
Foreground="{TemplateBinding Foreground}" Foreground="{TemplateBinding Foreground}"
Theme="{DynamicResource BorderlessButton}"> Theme="{DynamicResource BorderlessRepeatButton}">
<PathIcon <PathIcon
Theme="{DynamicResource InnerPathIcon}" Theme="{DynamicResource InnerPathIcon}"
Classes="Large" Classes="Large"
Data="{DynamicResource CalendarItemPreviousIconGlyph}" Data="{DynamicResource CalendarItemPreviousIconGlyph}"
Foreground="{DynamicResource CalendarItemIconForeground}" /> Foreground="{DynamicResource CalendarItemIconForeground}" />
</Button> </RepeatButton>
<Button <Button
Name="PART_HeaderButton" Name="PART_HeaderButton"
Grid.Column="1" Grid.Column="1"
HorizontalContentAlignment="Center" HorizontalContentAlignment="Center"
HorizontalAlignment="Stretch"
Foreground="{TemplateBinding Foreground}" Foreground="{TemplateBinding Foreground}"
Theme="{DynamicResource BorderlessButton}" /> Theme="{DynamicResource BorderlessButton}" />
<Button <RepeatButton
Name="PART_NextButton" Name="PART_NextButton"
Grid.Column="2" Grid.Column="2"
HorizontalContentAlignment="Left" Padding="0"
MinWidth="{Binding $self.MinHeight}"
Foreground="{TemplateBinding Foreground}" Foreground="{TemplateBinding Foreground}"
Theme="{DynamicResource BorderlessButton}"> Theme="{DynamicResource BorderlessRepeatButton}">
<PathIcon <PathIcon
Theme="{DynamicResource InnerPathIcon}" Theme="{DynamicResource InnerPathIcon}"
Classes="Large" Classes="Large"
Data="{DynamicResource CalendarItemNextIconGlyph}" Data="{DynamicResource CalendarItemNextIconGlyph}"
Foreground="{DynamicResource CalendarItemIconForeground}" /> Foreground="{DynamicResource CalendarItemIconForeground}" />
</Button> </RepeatButton>
</Grid> </Grid>
<Grid <Grid
Name="PART_MonthView" Name="PART_MonthView"

View File

@@ -13,7 +13,7 @@
<Setter Property="BorderBrush" Value="{DynamicResource CalendarDatePickerBorderBrush}" /> <Setter Property="BorderBrush" Value="{DynamicResource CalendarDatePickerBorderBrush}" />
<Setter Property="BorderThickness" Value="{DynamicResource CalendarDatePickerBorderThickness}" /> <Setter Property="BorderThickness" Value="{DynamicResource CalendarDatePickerBorderThickness}" />
<Setter Property="CornerRadius" Value="{DynamicResource CalendarDatePickerCornerRadius}" /> <Setter Property="CornerRadius" Value="{DynamicResource CalendarDatePickerCornerRadius}" />
<Setter Property="BackgroundSizing" Value="OuterBorderEdge"/> <Setter Property="BackgroundSizing" Value="OuterBorderEdge" />
<Setter Property="IsTodayHighlighted" Value="True" /> <Setter Property="IsTodayHighlighted" Value="True" />
<Setter Property="HorizontalAlignment" Value="Left" /> <Setter Property="HorizontalAlignment" Value="Left" />
<Setter Property="VerticalAlignment" Value="Center" /> <Setter Property="VerticalAlignment" Value="Center" />
@@ -34,7 +34,7 @@
Background="{TemplateBinding Background}" Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}" BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}" BorderThickness="{TemplateBinding BorderThickness}"
CornerRadius="{TemplateBinding CornerRadius}"/> CornerRadius="{TemplateBinding CornerRadius}" />
<Grid <Grid
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
VerticalAlignment="Stretch" VerticalAlignment="Stretch"

View File

@@ -5,15 +5,14 @@
<Design.PreviewWith> <Design.PreviewWith>
<CaptionButtons /> <CaptionButtons />
</Design.PreviewWith> </Design.PreviewWith>
<ControlTheme x:Key="CaptionButton" TargetType="Button"> <ControlTheme x:Key="CaptionButton" TargetType="Button">
<Setter Property="Background" Value="{DynamicResource CaptionButtonPointeroverBackground}" />
<Setter Property="BorderBrush" Value="{DynamicResource CaptionButtonPressedBackground}" />
<Setter Property="Foreground" Value="{DynamicResource CaptionButtonForeground}" /> <Setter Property="Foreground" Value="{DynamicResource CaptionButtonForeground}" />
<Setter Property="CornerRadius" Value="6" /> <Setter Property="Background" Value="Transparent" />
<Setter Property="Margin" Value="0, 4" /> <Setter Property="CornerRadius" Value="{StaticResource CaptionButtonCornerRadius}" />
<Setter Property="Padding" Value="4" /> <Setter Property="Padding" Value="{StaticResource CaptionButtonPadding}" />
<Setter Property="Height" Value="28" /> <Setter Property="Width" Value="{StaticResource CaptionButtonWidth}" />
<Setter Property="Width" Value="28" /> <Setter Property="Height" Value="{StaticResource CaptionButtonHeight}" />
<Setter Property="Cursor" Value="Hand" /> <Setter Property="Cursor" Value="Hand" />
<Setter Property="VerticalAlignment" Value="Stretch" /> <Setter Property="VerticalAlignment" Value="Stretch" />
<Setter Property="Template"> <Setter Property="Template">
@@ -21,77 +20,76 @@
<ContentPresenter <ContentPresenter
Name="PART_ContentPresenter" Name="PART_ContentPresenter"
Padding="{TemplateBinding Padding}" Padding="{TemplateBinding Padding}"
Background="Transparent" Foreground="{TemplateBinding Foreground}"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Content="{TemplateBinding Content}" Content="{TemplateBinding Content}"
ContentTemplate="{TemplateBinding ContentTemplate}"
CornerRadius="{TemplateBinding CornerRadius}" /> CornerRadius="{TemplateBinding CornerRadius}" />
</ControlTemplate> </ControlTemplate>
</Setter> </Setter>
<Style Selector="^:pointerover /template/ ContentPresenter"> <Style Selector="^:pointerover">
<Setter Property="Background" Value="{TemplateBinding Background}" /> <Setter Property="Background" Value="{DynamicResource CaptionButtonPointeroverBackground}" />
</Style> </Style>
<Style Selector="^:pressed /template/ ContentPresenter"> <Style Selector="^:pressed">
<Setter Property="Background" Value="{TemplateBinding BorderBrush}" /> <Setter Property="Background" Value="{DynamicResource CaptionButtonPressedBackground}" />
</Style> </Style>
</ControlTheme> </ControlTheme>
<ControlTheme x:Key="{x:Type CaptionButtons}" TargetType="CaptionButtons"> <ControlTheme x:Key="{x:Type CaptionButtons}" TargetType="CaptionButtons">
<Setter Property="Foreground" Value="{DynamicResource CaptionButtonForeground}" /> <Setter Property="Foreground" Value="{DynamicResource CaptionButtonForeground}" />
<Setter Property="Margin" Value="0 0 4 0" />
<Setter Property="Template"> <Setter Property="Template">
<ControlTemplate TargetType="CaptionButtons"> <ControlTemplate TargetType="CaptionButtons">
<StackPanel <StackPanel Orientation="Horizontal">
VerticalAlignment="Stretch"
Orientation="Horizontal"
Spacing="2"
TextElement.FontSize="10">
<Button Name="PART_FullScreenButton" Theme="{StaticResource CaptionButton}"> <Button Name="PART_FullScreenButton" Theme="{StaticResource CaptionButton}">
<PathIcon <PathIcon
Name="PART_FullScreenButtonIcon" Name="PART_FullScreenButtonIcon"
Theme="{DynamicResource InnerPathIcon}" Theme="{StaticResource InnerPathIcon}"
Data="{DynamicResource WindowExpandGlyph}" Data="{StaticResource WindowExpandGlyph}"
Foreground="{Binding $parent[Button].Foreground}" /> Foreground="{Binding $parent[Button].Foreground}" />
</Button> </Button>
<Button Name="PART_MinimizeButton" Theme="{StaticResource CaptionButton}"> <Button Name="PART_MinimizeButton" Theme="{StaticResource CaptionButton}">
<PathIcon <PathIcon
Theme="{DynamicResource InnerPathIcon}" Name="PART_MinimizeButtonIcon"
Data="{DynamicResource WindowMinimizeGlyph}" Theme="{StaticResource InnerPathIcon}"
Data="{StaticResource WindowMinimizeGlyph}"
Foreground="{Binding $parent[Button].Foreground}" /> Foreground="{Binding $parent[Button].Foreground}" />
</Button> </Button>
<Button Name="PART_RestoreButton" Theme="{StaticResource CaptionButton}"> <Button Name="PART_RestoreButton" Theme="{StaticResource CaptionButton}">
<PathIcon <PathIcon
Name="PART_RestoreButtonIcon" Name="PART_RestoreButtonIcon"
Theme="{DynamicResource InnerPathIcon}" Theme="{StaticResource InnerPathIcon}"
Data="{DynamicResource WindowMaximizeGlyph}" Data="{StaticResource WindowMaximizeGlyph}"
Foreground="{Binding $parent[Button].Foreground}" /> Foreground="{Binding $parent[Button].Foreground}" />
</Button> </Button>
<Button <Button Name="PART_CloseButton" Theme="{StaticResource CaptionButton}">
Name="PART_CloseButton"
Background="{DynamicResource CaptionButtonClosePointeroverBackground}"
BorderBrush="{DynamicResource CaptionButtonClosePressedBackground}"
Theme="{StaticResource CaptionButton}">
<Button.Styles>
<Style Selector="Button:pointerover">
<Setter Property="Foreground" Value="White" />
</Style>
<Style Selector="Button:pressed">
<Setter Property="Foreground" Value="White" />
</Style>
</Button.Styles>
<PathIcon <PathIcon
Theme="{DynamicResource InnerPathIcon}" Name="PART_CloseButtonIcon"
Data="{DynamicResource WindowCloseIconGlyph}" Theme="{StaticResource InnerPathIcon}"
Data="{StaticResource WindowCloseIconGlyph}"
Foreground="{Binding $parent[Button].Foreground}" /> Foreground="{Binding $parent[Button].Foreground}" />
</Button> </Button>
</StackPanel> </StackPanel>
</ControlTemplate> </ControlTemplate>
</Setter> </Setter>
<Style Selector="^ /template/ Button#PART_CloseButton:pointerover">
<Setter Property="Foreground" Value="{DynamicResource CaptionButtonCloseForeground}" />
<Setter Property="Background" Value="{DynamicResource CaptionButtonClosePointeroverBackground}" />
</Style>
<Style Selector="^ /template/ Button#PART_CloseButton:pressed">
<Setter Property="Foreground" Value="{DynamicResource CaptionButtonCloseForeground}" />
<Setter Property="Background" Value="{DynamicResource CaptionButtonClosePressedBackground}" />
</Style>
<Style Selector="^:maximized /template/ PathIcon#PART_RestoreButtonIcon"> <Style Selector="^:maximized /template/ PathIcon#PART_RestoreButtonIcon">
<Setter Property="Data" Value="{DynamicResource WindowRestoreGlyph}" /> <Setter Property="Data" Value="{StaticResource WindowRestoreGlyph}" />
</Style> </Style>
<Style Selector="^:fullscreen /template/ PathIcon#PART_FullScreenButtonIcon"> <Style Selector="^:fullscreen /template/ PathIcon#PART_FullScreenButtonIcon">
<Setter Property="Data" Value="{DynamicResource WindowCollapseGlyph}" /> <Setter Property="Data" Value="{StaticResource WindowCollapseGlyph}" />
</Style> </Style>
<Style Selector="^:fullscreen /template/ Button#PART_RestoreButton"> <Style Selector="^:fullscreen /template/ Button#PART_RestoreButton">
<Setter Property="IsVisible" Value="False" /> <Setter Property="IsVisible" Value="False" />

View File

@@ -83,7 +83,7 @@
<ControlTheme x:Key="CarouselIndicatorDotListBoxItem" TargetType="ListBoxItem"> <ControlTheme x:Key="CarouselIndicatorDotListBoxItem" TargetType="ListBoxItem">
<Setter Property="Foreground" Value="{DynamicResource CarouselIndicatorForeground}" /> <Setter Property="Foreground" Value="{DynamicResource CarouselIndicatorForeground}" />
<Setter Property="Margin" Value="4 0"/> <Setter Property="Margin" Value="4 0" />
<Setter Property="Cursor" Value="Hand" /> <Setter Property="Cursor" Value="Hand" />
<Setter Property="Template"> <Setter Property="Template">
<ControlTemplate TargetType="ListBoxItem"> <ControlTemplate TargetType="ListBoxItem">
@@ -108,7 +108,7 @@
<ControlTheme x:Key="CarouselIndicatorLineListBoxItem" <ControlTheme x:Key="CarouselIndicatorLineListBoxItem"
BasedOn="{StaticResource CarouselIndicatorDotListBoxItem}" BasedOn="{StaticResource CarouselIndicatorDotListBoxItem}"
TargetType="ListBoxItem"> TargetType="ListBoxItem">
<Setter Property="Margin" Value="2 0"/> <Setter Property="Margin" Value="2 0" />
<Setter Property="Template"> <Setter Property="Template">
<ControlTemplate TargetType="ListBoxItem"> <ControlTemplate TargetType="ListBoxItem">
<Rectangle <Rectangle
@@ -122,9 +122,9 @@
<ControlTheme x:Key="CarouselIndicatorColumnarListBoxItem" <ControlTheme x:Key="CarouselIndicatorColumnarListBoxItem"
BasedOn="{StaticResource CarouselIndicatorDotListBoxItem}" BasedOn="{StaticResource CarouselIndicatorDotListBoxItem}"
TargetType="ListBoxItem"> TargetType="ListBoxItem">
<Setter Property="Width" Value="{DynamicResource CarouselIndicatorColumnarWidth}"/> <Setter Property="Width" Value="{DynamicResource CarouselIndicatorColumnarWidth}" />
<Setter Property="Height" Value="{DynamicResource CarouselIndicatorColumnarSelectedHeight}"/> <Setter Property="Height" Value="{DynamicResource CarouselIndicatorColumnarSelectedHeight}" />
<Setter Property="Margin" Value="2 0"/> <Setter Property="Margin" Value="2 0" />
<Setter Property="Template"> <Setter Property="Template">
<ControlTemplate TargetType="ListBoxItem"> <ControlTemplate TargetType="ListBoxItem">
<Rectangle <Rectangle

View File

@@ -12,7 +12,7 @@
<ComboBoxItem>BBB</ComboBoxItem> <ComboBoxItem>BBB</ComboBoxItem>
<ComboBoxItem>CCC</ComboBoxItem> <ComboBoxItem>CCC</ComboBoxItem>
</ComboBox> </ComboBox>
<ComboBox Width="100" PlaceholderText="Select"> <ComboBox Width="100" PlaceholderText="Select" PlaceholderForeground="Red">
<ComboBoxItem>AAA</ComboBoxItem> <ComboBoxItem>AAA</ComboBoxItem>
<ComboBoxItem>BBB</ComboBoxItem> <ComboBoxItem>BBB</ComboBoxItem>
<ComboBoxItem>CCC</ComboBoxItem> <ComboBoxItem>CCC</ComboBoxItem>
@@ -44,6 +44,7 @@
<Setter Property="HorizontalAlignment" Value="Left" /> <Setter Property="HorizontalAlignment" Value="Left" />
<Setter Property="VerticalAlignment" Value="Top" /> <Setter Property="VerticalAlignment" Value="Top" />
<Setter Property="MinHeight" Value="{DynamicResource ComboBoxDefaultHeight}" /> <Setter Property="MinHeight" Value="{DynamicResource ComboBoxDefaultHeight}" />
<Setter Property="PlaceholderForeground" Value="{DynamicResource ComboBoxSelectorPlaceHolderForeground}" />
<Setter Property="Template"> <Setter Property="Template">
<ControlTemplate TargetType="ComboBox"> <ControlTemplate TargetType="ComboBox">
<DataValidationErrors> <DataValidationErrors>
@@ -65,9 +66,8 @@
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
TextTrimming="CharacterEllipsis" TextTrimming="CharacterEllipsis"
Foreground="{TemplateBinding Foreground}" Foreground="{TemplateBinding PlaceholderForeground}"
IsVisible="{TemplateBinding SelectionBoxItem,Converter={x:Static ObjectConverters.IsNull}}" IsVisible="{TemplateBinding SelectionBoxItem,Converter={x:Static ObjectConverters.IsNull}}"
Opacity="0.3"
Text="{TemplateBinding PlaceholderText}" /> Text="{TemplateBinding PlaceholderText}" />
<ContentPresenter <ContentPresenter
Name="ContentPresenter" Name="ContentPresenter"
@@ -137,7 +137,7 @@
<Setter Property="IsVisible" Value="{Binding $parent[ComboBox].SelectionBoxItem, Converter={x:Static ObjectConverters.IsNotNull}}" /> <Setter Property="IsVisible" Value="{Binding $parent[ComboBox].SelectionBoxItem, Converter={x:Static ObjectConverters.IsNotNull}}" />
</Style> </Style>
<Style Selector="^:pointerover /template/ PathIcon#DropDownGlyph"> <Style Selector="^:pointerover /template/ PathIcon#DropDownGlyph">
<Setter Property="IsVisible" Value="{Binding $parent[ComboBox].SelectionBoxItem, Converter={x:Static ObjectConverters.IsNull}}"/> <Setter Property="IsVisible" Value="{Binding $parent[ComboBox].SelectionBoxItem, Converter={x:Static ObjectConverters.IsNull}}" />
</Style> </Style>
</Style> </Style>

View File

@@ -10,9 +10,10 @@
<Setter Property="MaxWidth" Value="{DynamicResource MenuFlyoutMaxWidth}" /> <Setter Property="MaxWidth" Value="{DynamicResource MenuFlyoutMaxWidth}" />
<Setter Property="MinHeight" Value="{DynamicResource MenuFlyoutMinHeight}" /> <Setter Property="MinHeight" Value="{DynamicResource MenuFlyoutMinHeight}" />
<Setter Property="Padding" Value="{DynamicResource MenuFlyoutPadding}" /> <Setter Property="Padding" Value="{DynamicResource MenuFlyoutPadding}" />
<Setter Property="Focusable" Value="True"></Setter> <Setter Property="Focusable" Value="True" />
<Setter Property="HorizontalAlignment" Value="Stretch" /> <Setter Property="HorizontalAlignment" Value="Stretch" />
<Setter Property="FontWeight" Value="Normal" /> <Setter Property="FontSize" Value="{DynamicResource MenuFlyoutFontSize}" />
<Setter Property="FontWeight" Value="{DynamicResource MenuFlyoutFontWeight}" />
<Setter Property="WindowManagerAddShadowHint" Value="False" /> <Setter Property="WindowManagerAddShadowHint" Value="False" />
<Setter Property="Template"> <Setter Property="Template">
<ControlTemplate TargetType="ContextMenu"> <ControlTemplate TargetType="ContextMenu">

View File

@@ -2,15 +2,19 @@
xmlns="https://github.com/avaloniaui" xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:CompileBindings="True"> x:CompileBindings="True">
<Design.PreviewWith>
<Border Padding="20">
<DatePickerPresenter />
</Border>
</Design.PreviewWith>
<ControlTheme x:Key="{x:Type DatePickerPresenter}" TargetType="DatePickerPresenter"> <ControlTheme x:Key="{x:Type DatePickerPresenter}" TargetType="DatePickerPresenter">
<Setter Property="Width" Value="296" /> <Setter Property="Width" Value="296" />
<Setter Property="MinWidth" Value="296" /> <Setter Property="MinWidth" Value="296" />
<Setter Property="MaxHeight" Value="300" /> <Setter Property="MaxHeight" Value="300" />
<Setter Property="FontWeight" Value="Normal" />
<Setter Property="Background" Value="{DynamicResource DateTimePickerPopupBackground}" /> <Setter Property="Background" Value="{DynamicResource DateTimePickerPopupBackground}" />
<Setter Property="BorderBrush" Value="{DynamicResource DateTimePickerPopupBorderBrush}" /> <Setter Property="BorderBrush" Value="{DynamicResource DateTimePickerPopupBorderBrush}" />
<Setter Property="BorderThickness" Value="1" /> <Setter Property="BorderThickness" Value="1" />
<Setter Property="CornerRadius" Value="6" /> <Setter Property="CornerRadius" Value="{DynamicResource DateTimePickerPopupCornerRadius}" />
<Setter Property="Template"> <Setter Property="Template">
<ControlTemplate TargetType="DatePickerPresenter"> <ControlTemplate TargetType="DatePickerPresenter">
<Border <Border
@@ -92,8 +96,7 @@
VerticalAlignment="Stretch" VerticalAlignment="Stretch"
Theme="{StaticResource DateTimePickerButton}"> Theme="{StaticResource DateTimePickerButton}">
<PathIcon <PathIcon
Width="12" Theme="{StaticResource InnerPathIcon}"
Height="12"
Data="{DynamicResource DateTimePickerAcceptGlyph}" /> Data="{DynamicResource DateTimePickerAcceptGlyph}" />
</Button> </Button>
<Rectangle <Rectangle
@@ -107,8 +110,7 @@
VerticalAlignment="Stretch" VerticalAlignment="Stretch"
Theme="{StaticResource DateTimePickerButton}"> Theme="{StaticResource DateTimePickerButton}">
<PathIcon <PathIcon
Width="12" Theme="{StaticResource InnerPathIcon}"
Height="12"
Data="{DynamicResource DateTimePickerDismissGlyph}" /> Data="{DynamicResource DateTimePickerDismissGlyph}" />
</Button> </Button>
<Rectangle <Rectangle
@@ -169,7 +171,6 @@
<Grid <Grid
Name="PART_ButtonContentGrid" Name="PART_ButtonContentGrid"
Grid.Column="0" Grid.Column="0"
VerticalAlignment="Center"
ColumnDefinitions="78*,Auto,132*,Auto,78*"> ColumnDefinitions="78*,Auto,132*,Auto,78*">
<TextBlock <TextBlock
Name="PART_DayTextBlock" Name="PART_DayTextBlock"
@@ -203,16 +204,12 @@
Name="PART_FirstSpacer" Name="PART_FirstSpacer"
Grid.Column="1" Grid.Column="1"
Width="1" Width="1"
Height="{TemplateBinding Height}"
MinHeight="{TemplateBinding MinHeight}"
HorizontalAlignment="Center" HorizontalAlignment="Center"
Fill="{DynamicResource DateTimePickerSeparatorBackground}" /> Fill="{DynamicResource DateTimePickerSeparatorBackground}" />
<Rectangle <Rectangle
Name="PART_SecondSpacer" Name="PART_SecondSpacer"
Grid.Column="3" Grid.Column="3"
Width="1" Width="1"
Height="{TemplateBinding Height}"
MinHeight="{TemplateBinding MinHeight}"
HorizontalAlignment="Center" HorizontalAlignment="Center"
Fill="{DynamicResource DateTimePickerSeparatorBackground}" /> Fill="{DynamicResource DateTimePickerSeparatorBackground}" />
</Grid> </Grid>

View File

@@ -115,8 +115,8 @@
<Setter Property="Content"> <Setter Property="Content">
<Template> <Template>
<PathIcon <PathIcon
Width="8" Theme="{StaticResource InnerPathIcon}"
Height="8" Classes="ExtraSmall"
HorizontalAlignment="Center" HorizontalAlignment="Center"
VerticalAlignment="Center" VerticalAlignment="Center"
Data="{DynamicResource DateTimePickerButtonUpGlyph}" /> Data="{DynamicResource DateTimePickerButtonUpGlyph}" />
@@ -136,8 +136,8 @@
<Setter Property="Content"> <Setter Property="Content">
<Template> <Template>
<PathIcon <PathIcon
Width="8" Theme="{StaticResource InnerPathIcon}"
Height="8" Classes="ExtraSmall"
HorizontalAlignment="Center" HorizontalAlignment="Center"
VerticalAlignment="Center" VerticalAlignment="Center"
Data="{DynamicResource DateTimePickerButtonDownGlyph}" /> Data="{DynamicResource DateTimePickerButtonDownGlyph}" />

View File

@@ -3,6 +3,7 @@
<Setter Property="Background" Value="{DynamicResource WindowDefaultBackground}" /> <Setter Property="Background" Value="{DynamicResource WindowDefaultBackground}" />
<Setter Property="Foreground" Value="{DynamicResource WindowDefaultForeground}" /> <Setter Property="Foreground" Value="{DynamicResource WindowDefaultForeground}" />
<Setter Property="FontSize" Value="{DynamicResource DefaultFontSize}" /> <Setter Property="FontSize" Value="{DynamicResource DefaultFontSize}" />
<Setter Property="FontWeight" Value="{DynamicResource DefaultFontWeight}" />
<Setter Property="FontFamily" Value="{DynamicResource DefaultFontFamily}" /> <Setter Property="FontFamily" Value="{DynamicResource DefaultFontFamily}" />
<Setter Property="Template"> <Setter Property="Template">
<ControlTemplate> <ControlTemplate>

View File

@@ -170,14 +170,13 @@
<Setter Property="HorizontalAlignment" Value="Left" /> <Setter Property="HorizontalAlignment" Value="Left" />
<Setter Property="UseLayoutRounding" Value="False" /> <Setter Property="UseLayoutRounding" Value="False" />
<Setter Property="VerticalAlignment" Value="Center" /> <Setter Property="VerticalAlignment" Value="Center" />
<Setter Property="VerticalContentAlignment" Value="Center" />
<Setter Property="Padding" Value="{DynamicResource LabelTagSmallPadding}" /> <Setter Property="Padding" Value="{DynamicResource LabelTagSmallPadding}" />
<Setter Property="FontSize" Value="{DynamicResource LabelTagFontSize}" /> <Setter Property="FontSize" Value="{DynamicResource LabelTagFontSize}" />
<Setter Property="Template"> <Setter Property="Template">
<ControlTemplate TargetType="Label"> <ControlTemplate TargetType="Label">
<ContentPresenter <ContentPresenter
Name="PART_ContentPresenter" Name="PART_ContentPresenter"
MinWidth="{TemplateBinding MinWidth}"
MinHeight="{TemplateBinding MinHeight}"
Padding="{TemplateBinding Padding}" Padding="{TemplateBinding Padding}"
HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}" VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"

View File

@@ -59,7 +59,6 @@
Content="{TemplateBinding Content}" Content="{TemplateBinding Content}"
ContentTemplate="{TemplateBinding ContentTemplate}" ContentTemplate="{TemplateBinding ContentTemplate}"
CornerRadius="{TemplateBinding CornerRadius}" CornerRadius="{TemplateBinding CornerRadius}"
FontWeight="Normal"
Foreground="{TemplateBinding Foreground}" /> Foreground="{TemplateBinding Foreground}" />
</ControlTemplate> </ControlTemplate>
</Setter> </Setter>

View File

@@ -195,7 +195,7 @@
<ControlTheme x:Key="{x:Type dialogs:ManagedFileChooserOverwritePrompt}" <ControlTheme x:Key="{x:Type dialogs:ManagedFileChooserOverwritePrompt}"
TargetType="dialogs:ManagedFileChooserOverwritePrompt"> TargetType="dialogs:ManagedFileChooserOverwritePrompt">
<Setter Property="MaxWidth" Value="400" /> <Setter Property="MaxWidth" Value="400" />
<Setter Property="Padding" Value="10"/> <Setter Property="Padding" Value="10" />
<Setter Property="Template"> <Setter Property="Template">
<ControlTemplate> <ControlTemplate>
<Border Background="{TemplateBinding Background}" <Border Background="{TemplateBinding Background}"

View File

@@ -23,21 +23,23 @@
BorderThickness="0" BorderThickness="0"
Command="{Binding LineUp, RelativeSource={RelativeSource TemplatedParent}}" Command="{Binding LineUp, RelativeSource={RelativeSource TemplatedParent}}"
CornerRadius="0" CornerRadius="0"
MinHeight="0"
Padding="0 4"
DockPanel.Dock="Top" DockPanel.Dock="Top"
RenderTransform="{x:Null}"> RenderTransform="{x:Null}">
<RepeatButton.IsVisible> <RepeatButton.IsVisible>
<MultiBinding <MultiBinding
Converter="{x:Static converters:MenuScrollingVisibilityConverter.Instance}" Converter="{x:Static converters:MenuScrollingVisibilityConverter.Instance}"
ConverterParameter="0"> ConverterParameter="0">
<Binding Path="VerticalScrollBarVisibility" <Binding Path="VerticalScrollBarVisibility" RelativeSource="{RelativeSource TemplatedParent}" />
RelativeSource="{RelativeSource TemplatedParent}" />
<Binding Path="Offset.Y" RelativeSource="{RelativeSource TemplatedParent}" /> <Binding Path="Offset.Y" RelativeSource="{RelativeSource TemplatedParent}" />
<Binding Path="Extent.Height" RelativeSource="{RelativeSource TemplatedParent}" /> <Binding Path="Extent.Height" RelativeSource="{RelativeSource TemplatedParent}" />
<Binding Path="Viewport.Height" RelativeSource="{RelativeSource TemplatedParent}" /> <Binding Path="Viewport.Height" RelativeSource="{RelativeSource TemplatedParent}" />
</MultiBinding> </MultiBinding>
</RepeatButton.IsVisible> </RepeatButton.IsVisible>
<PathIcon <PathIcon
Theme="{DynamicResource InnerPathIcon}" Theme="{StaticResource InnerPathIcon}"
Classes="ExtraSmall"
Data="{DynamicResource MenuScrollViewerUpButtonGlyph}" Data="{DynamicResource MenuScrollViewerUpButtonGlyph}"
Foreground="{DynamicResource MenuFlyoutScrollViewerIconForeground}" /> Foreground="{DynamicResource MenuFlyoutScrollViewerIconForeground}" />
</RepeatButton> </RepeatButton>
@@ -48,21 +50,23 @@
BorderThickness="0" BorderThickness="0"
Command="{Binding LineDown, RelativeSource={RelativeSource TemplatedParent}}" Command="{Binding LineDown, RelativeSource={RelativeSource TemplatedParent}}"
CornerRadius="0" CornerRadius="0"
MinHeight="0"
Padding="0 4"
DockPanel.Dock="Bottom" DockPanel.Dock="Bottom"
RenderTransform="{x:Null}"> RenderTransform="{x:Null}">
<RepeatButton.IsVisible> <RepeatButton.IsVisible>
<MultiBinding <MultiBinding
Converter="{x:Static converters:MenuScrollingVisibilityConverter.Instance}" Converter="{x:Static converters:MenuScrollingVisibilityConverter.Instance}"
ConverterParameter="100"> ConverterParameter="100">
<Binding Path="VerticalScrollBarVisibility" <Binding Path="VerticalScrollBarVisibility" RelativeSource="{RelativeSource TemplatedParent}" />
RelativeSource="{RelativeSource TemplatedParent}" />
<Binding Path="Offset.Y" RelativeSource="{RelativeSource TemplatedParent}" /> <Binding Path="Offset.Y" RelativeSource="{RelativeSource TemplatedParent}" />
<Binding Path="Extent.Height" RelativeSource="{RelativeSource TemplatedParent}" /> <Binding Path="Extent.Height" RelativeSource="{RelativeSource TemplatedParent}" />
<Binding Path="Viewport.Height" RelativeSource="{RelativeSource TemplatedParent}" /> <Binding Path="Viewport.Height" RelativeSource="{RelativeSource TemplatedParent}" />
</MultiBinding> </MultiBinding>
</RepeatButton.IsVisible> </RepeatButton.IsVisible>
<PathIcon <PathIcon
Theme="{DynamicResource InnerPathIcon}" Theme="{StaticResource InnerPathIcon}"
Classes="ExtraSmall"
Data="{DynamicResource MenuScrollViewerDownButtonGlyph}" Data="{DynamicResource MenuScrollViewerDownButtonGlyph}"
Foreground="{DynamicResource MenuFlyoutScrollViewerIconForeground}" /> Foreground="{DynamicResource MenuFlyoutScrollViewerIconForeground}" />
</RepeatButton> </RepeatButton>
@@ -287,7 +291,7 @@
<Setter Property="Content"> <Setter Property="Content">
<Template> <Template>
<Ellipse Fill="{Binding $parent[MenuItem].Foreground}" <Ellipse Fill="{Binding $parent[MenuItem].Foreground}"
Margin="4" Width="8" Height="8" /> Margin="4" Width="6" Height="6" />
</Template> </Template>
</Setter> </Setter>
</Style> </Style>
@@ -297,9 +301,10 @@
<Setter Property="Background" Value="{DynamicResource MenuItemBackground}" /> <Setter Property="Background" Value="{DynamicResource MenuItemBackground}" />
<Setter Property="Foreground" Value="{DynamicResource MenuItemForeground}" /> <Setter Property="Foreground" Value="{DynamicResource MenuItemForeground}" />
<Setter Property="Cursor" Value="Hand" /> <Setter Property="Cursor" Value="Hand" />
<Setter Property="CornerRadius" Value="{DynamicResource MenuItemCornerRadius}"/> <Setter Property="CornerRadius" Value="{DynamicResource MenuItemCornerRadius}" />
<!-- Narrow padding should be used for mouse input, when non-narrow one should be used for touch input in future. --> <!-- Narrow padding should be used for mouse input, when non-narrow one should be used for touch input in future. -->
<Setter Property="Padding" Value="{DynamicResource MenuItemPadding}" /> <Setter Property="Padding" Value="{DynamicResource TopLevelMenuItemPadding}" />
<Setter Property="MinHeight" Value="{DynamicResource TopLevelMenuItemMinHeight}" />
<Setter Property="Template"> <Setter Property="Template">
<ControlTemplate> <ControlTemplate>
<Border <Border
@@ -322,8 +327,7 @@
MinWidth="{Binding $parent[MenuItem].Bounds.Width}" MinWidth="{Binding $parent[MenuItem].Bounds.Width}"
HorizontalOffset="-8" HorizontalOffset="-8"
IsLightDismissEnabled="True" IsLightDismissEnabled="True"
IsOpen="{TemplateBinding IsSubMenuOpen, IsOpen="{TemplateBinding IsSubMenuOpen,Mode=TwoWay}"
Mode=TwoWay}"
OverlayInputPassThroughElement="{Binding $parent[Menu]}" OverlayInputPassThroughElement="{Binding $parent[Menu]}"
Placement="BottomEdgeAlignedLeft" Placement="BottomEdgeAlignedLeft"
VerticalOffset="-4" VerticalOffset="-4"

View File

@@ -172,7 +172,7 @@
<Setter Property="Background" Value="{DynamicResource NotificationCardLightBackground}" /> <Setter Property="Background" Value="{DynamicResource NotificationCardLightBackground}" />
<Style Selector="^:information /template/ Border#PART_RootBorder"> <Style Selector="^:information /template/ Border#PART_RootBorder">
<Setter Property="BorderBrush" Value="{DynamicResource NotificationCardLightInformationBorderBrush}" /> <Setter Property="BorderBrush" Value="{DynamicResource NotificationCardLightInformationBorderBrush}" />
<Setter Property="Background" Value="{DynamicResource NotificationCardLightInformationBackground}"/> <Setter Property="Background" Value="{DynamicResource NotificationCardLightInformationBackground}" />
</Style> </Style>
<Style Selector="^:success /template/ Border#PART_RootBorder"> <Style Selector="^:success /template/ Border#PART_RootBorder">
<Setter Property="BorderBrush" Value="{DynamicResource NotificationCardLightSuccessBorderBrush}" /> <Setter Property="BorderBrush" Value="{DynamicResource NotificationCardLightSuccessBorderBrush}" />

View File

@@ -25,8 +25,8 @@
</ControlTheme> </ControlTheme>
<ControlTheme x:Key="InnerPathIcon" TargetType="PathIcon"> <ControlTheme x:Key="InnerPathIcon" TargetType="PathIcon">
<Setter Property="Height" Value="16" /> <Setter Property="Width" Value="{StaticResource SemiWidthIconMedium}" />
<Setter Property="Width" Value="16" /> <Setter Property="Height" Value="{StaticResource SemiWidthIconMedium}" />
<Setter Property="Background" Value="Transparent" /> <Setter Property="Background" Value="Transparent" />
<Setter Property="Template"> <Setter Property="Template">
<ControlTemplate TargetType="PathIcon"> <ControlTemplate TargetType="PathIcon">
@@ -48,20 +48,20 @@
<Setter Property="Fill" Value="{TemplateBinding BorderBrush}" /> <Setter Property="Fill" Value="{TemplateBinding BorderBrush}" />
</Style> </Style>
<Style Selector="^.ExtraSmall"> <Style Selector="^.ExtraSmall">
<Setter Property="Height" Value="8" /> <Setter Property="Width" Value="{StaticResource SemiWidthIconExtraSmall}" />
<Setter Property="Width" Value="8" /> <Setter Property="Height" Value="{StaticResource SemiWidthIconExtraSmall}" />
</Style> </Style>
<Style Selector="^.Small"> <Style Selector="^.Small">
<Setter Property="Height" Value="12" /> <Setter Property="Width" Value="{StaticResource SemiWidthIconSmall}" />
<Setter Property="Width" Value="12" /> <Setter Property="Height" Value="{StaticResource SemiWidthIconSmall}" />
</Style> </Style>
<Style Selector="^.Large"> <Style Selector="^.Large">
<Setter Property="Height" Value="20" /> <Setter Property="Width" Value="{StaticResource SemiWidthIconLarge}" />
<Setter Property="Width" Value="20" /> <Setter Property="Height" Value="{StaticResource SemiWidthIconLarge}" />
</Style> </Style>
<Style Selector="^.ExtraLarge"> <Style Selector="^.ExtraLarge">
<Setter Property="Height" Value="24" /> <Setter Property="Width" Value="{StaticResource SemiWidthIconExtraLarge}" />
<Setter Property="Width" Value="24" /> <Setter Property="Height" Value="{StaticResource SemiWidthIconExtraLarge}" />
</Style> </Style>
</ControlTheme> </ControlTheme>
</ResourceDictionary> </ResourceDictionary>

View File

@@ -5,6 +5,9 @@
<ControlTheme x:Key="{x:Type PopupRoot}" TargetType="PopupRoot"> <ControlTheme x:Key="{x:Type PopupRoot}" TargetType="PopupRoot">
<Setter Property="Background" Value="{x:Null}" /> <Setter Property="Background" Value="{x:Null}" />
<Setter Property="TransparencyLevelHint" Value="Transparent" /> <Setter Property="TransparencyLevelHint" Value="Transparent" />
<Setter Property="FontSize" Value="{DynamicResource DefaultFontSize}" />
<Setter Property="FontWeight" Value="{DynamicResource DefaultFontWeight}" />
<Setter Property="FontFamily" Value="{DynamicResource DefaultFontFamily}" />
<Setter Property="Template"> <Setter Property="Template">
<ControlTemplate TargetType="PopupRoot"> <ControlTemplate TargetType="PopupRoot">
<LayoutTransformControl LayoutTransform="{TemplateBinding Transform}"> <LayoutTransformControl LayoutTransform="{TemplateBinding Transform}">

View File

@@ -210,9 +210,7 @@
</Style> </Style>
<Style Selector="^:vertical /template/ LayoutTransformControl#PART_LayoutTransformControl"> <Style Selector="^:vertical /template/ LayoutTransformControl#PART_LayoutTransformControl">
<Setter Property="LayoutTransform"> <Setter Property="LayoutTransform">
<Setter.Value> <RotateTransform Angle="90" />
<RotateTransform Angle="90" />
</Setter.Value>
</Setter> </Setter>
</Style> </Style>
<Style Selector="^:indeterminate /template/ Panel#DeterminateRoot"> <Style Selector="^:indeterminate /template/ Panel#DeterminateRoot">

View File

@@ -2,7 +2,6 @@
xmlns="https://github.com/avaloniaui" xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:converters="using:Avalonia.Controls.Converters" xmlns:converters="using:Avalonia.Controls.Converters"
xmlns:dialog="using:Avalonia.Dialogs"
x:CompileBindings="True"> x:CompileBindings="True">
<Design.PreviewWith> <Design.PreviewWith>
<StackPanel> <StackPanel>
@@ -18,15 +17,16 @@
Height="400" Height="400"
Background="aqua" /> Background="aqua" />
</ScrollViewer> </ScrollViewer>
<dialog:ManagedFileChooser />
</StackPanel> </StackPanel>
</Design.PreviewWith> </Design.PreviewWith>
<ControlTheme x:Key="ScrollBarRepeatButton" TargetType="{x:Type RepeatButton}"> <ControlTheme x:Key="ScrollBarRepeatButton" TargetType="{x:Type RepeatButton}">
<Setter Property="Background" Value="Transparent" /> <Setter Property="Background" Value="Transparent" />
<Setter Property="Foreground" Value="Gray" /> <Setter Property="Foreground" Value="{DynamicResource ScrollBarButtonDefaultForeground}" />
<Setter Property="Template"> <Setter Property="Template">
<ControlTemplate> <ControlTemplate>
<Border Padding="{TemplateBinding Padding}" Background="{TemplateBinding Background}"> <Border
Padding="{TemplateBinding Padding}"
Background="{TemplateBinding Background}">
<ContentPresenter <ContentPresenter
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
@@ -39,35 +39,42 @@
<ControlTheme x:Key="{x:Type ScrollBar}" TargetType="ScrollBar"> <ControlTheme x:Key="{x:Type ScrollBar}" TargetType="ScrollBar">
<Setter Property="Cursor" Value="Arrow" /> <Setter Property="Cursor" Value="Arrow" />
<Setter Property="Transitions">
<Transitions>
<DoubleTransition Property="Width" Duration="0:0:0.1" />
<DoubleTransition Property="Height" Duration="0:0:0.1" />
<!--<TransformOperationsTransition Property="RenderTransform" Duration="0:0:0.1" />-->
</Transitions>
</Setter>
<Style Selector="^:horizontal"> <Style Selector="^:horizontal">
<Setter Property="Height" Value="{DynamicResource ScrollBarThickness}" /> <Setter Property="Height" Value="{StaticResource ScrollBarThickness}" />
<Setter Property="Template"> <Setter Property="Template">
<ControlTemplate TargetType="ScrollBar"> <ControlTemplate TargetType="ScrollBar">
<Border Background="{DynamicResource ScrollBarBackground}" UseLayoutRounding="False"> <Border
Background="{DynamicResource ScrollBarBackground}"
UseLayoutRounding="False">
<Grid Name="PART_RootGrid" ColumnDefinitions="Auto,*,Auto"> <Grid Name="PART_RootGrid" ColumnDefinitions="Auto,*,Auto">
<RepeatButton <RepeatButton
Name="PART_LineUpButton" Name="PART_LineUpButton"
Grid.Row="0" Grid.Row="0"
Grid.Column="0" Grid.Column="0"
MinWidth="{DynamicResource ScrollBarThickness}" MinWidth="{StaticResource ScrollBarThickness}"
Padding="4,0"
VerticalAlignment="Center" VerticalAlignment="Center"
Focusable="False" Focusable="False"
Theme="{DynamicResource ScrollBarRepeatButton}"> Theme="{StaticResource ScrollBarRepeatButton}">
<PathIcon <PathIcon
Width="10" Theme="{StaticResource InnerPathIcon}"
Height="10" Classes="Large"
Data="{DynamicResource ScrollBarLeftGlyph}" /> Data="{StaticResource ScrollBarLeftGlyph}" />
</RepeatButton> </RepeatButton>
<Track <Track
Grid.Column="1" Grid.Column="1"
DeferThumbDrag="{TemplateBinding ScrollViewer.IsDeferredScrollingEnabled}"
Maximum="{TemplateBinding Maximum}" Maximum="{TemplateBinding Maximum}"
Minimum="{TemplateBinding Minimum}" Minimum="{TemplateBinding Minimum}"
Orientation="{TemplateBinding Orientation}" Orientation="{TemplateBinding Orientation}"
ViewportSize="{TemplateBinding ViewportSize}" ViewportSize="{TemplateBinding ViewportSize}"
DeferThumbDrag="{TemplateBinding ScrollViewer.IsDeferredScrollingEnabled}" Value="{TemplateBinding Value, Mode=TwoWay}">
Value="{TemplateBinding Value,
Mode=TwoWay}">
<Track.DecreaseButton> <Track.DecreaseButton>
<RepeatButton <RepeatButton
Name="PART_PageUpButton" Name="PART_PageUpButton"
@@ -76,7 +83,7 @@
VerticalAlignment="Stretch" VerticalAlignment="Stretch"
CornerRadius="0" CornerRadius="0"
Focusable="False" Focusable="False"
Theme="{DynamicResource ScrollBarRepeatButton}" /> Theme="{StaticResource ScrollBarRepeatButton}" />
</Track.DecreaseButton> </Track.DecreaseButton>
<Track.IncreaseButton> <Track.IncreaseButton>
<RepeatButton <RepeatButton
@@ -86,7 +93,7 @@
VerticalAlignment="Stretch" VerticalAlignment="Stretch"
CornerRadius="0" CornerRadius="0"
Focusable="False" Focusable="False"
Theme="{DynamicResource ScrollBarRepeatButton}" /> Theme="{StaticResource ScrollBarRepeatButton}" />
</Track.IncreaseButton> </Track.IncreaseButton>
<Thumb Name="thumb" /> <Thumb Name="thumb" />
</Track> </Track>
@@ -94,14 +101,13 @@
Name="PART_LineDownButton" Name="PART_LineDownButton"
Grid.Column="2" Grid.Column="2"
MinWidth="{DynamicResource ScrollBarThickness}" MinWidth="{DynamicResource ScrollBarThickness}"
Padding="4,0"
VerticalAlignment="Center" VerticalAlignment="Center"
VerticalContentAlignment="Center" VerticalContentAlignment="Center"
Focusable="False" Focusable="False"
Theme="{DynamicResource ScrollBarRepeatButton}"> Theme="{DynamicResource ScrollBarRepeatButton}">
<PathIcon <PathIcon
Width="10" Theme="{DynamicResource InnerPathIcon}"
Height="10" Classes="Large"
Data="{DynamicResource ScrollBarRightGlyph}" /> Data="{DynamicResource ScrollBarRightGlyph}" />
</RepeatButton> </RepeatButton>
</Grid> </Grid>
@@ -110,36 +116,36 @@
</Setter> </Setter>
</Style> </Style>
<Style Selector="^:vertical"> <Style Selector="^:vertical">
<Setter Property="Width" Value="{DynamicResource ScrollBarThickness}" /> <Setter Property="Width" Value="{StaticResource ScrollBarThickness}" />
<Setter Property="Template"> <Setter Property="Template">
<ControlTemplate TargetType="ScrollBar"> <ControlTemplate TargetType="ScrollBar">
<Border Background="{DynamicResource ScrollBarBackground}" UseLayoutRounding="False"> <Border
Background="{DynamicResource ScrollBarBackground}"
UseLayoutRounding="False">
<Grid RowDefinitions="Auto,*,Auto"> <Grid RowDefinitions="Auto,*,Auto">
<RepeatButton <RepeatButton
Name="PART_LineUpButton" Name="PART_LineUpButton"
Grid.Row="0" Grid.Row="0"
MinHeight="{DynamicResource ScrollBarThickness}" MinHeight="{StaticResource ScrollBarThickness}"
Padding="0,4"
VerticalAlignment="Center" VerticalAlignment="Center"
HorizontalContentAlignment="Center" HorizontalContentAlignment="Center"
VerticalContentAlignment="Center" VerticalContentAlignment="Center"
Focusable="False" Focusable="False"
Theme="{DynamicResource ScrollBarRepeatButton}"> Theme="{StaticResource ScrollBarRepeatButton}">
<PathIcon <PathIcon
Width="10" Theme="{StaticResource InnerPathIcon}"
Height="10" Classes="Large"
Data="{DynamicResource ScrollBarUpGlyph}" /> Data="{StaticResource ScrollBarUpGlyph}" />
</RepeatButton> </RepeatButton>
<Track <Track
Grid.Row="1" Grid.Row="1"
DeferThumbDrag="{TemplateBinding ScrollViewer.IsDeferredScrollingEnabled}"
IsDirectionReversed="True" IsDirectionReversed="True"
Maximum="{TemplateBinding Maximum}" Maximum="{TemplateBinding Maximum}"
Minimum="{TemplateBinding Minimum}" Minimum="{TemplateBinding Minimum}"
Orientation="{TemplateBinding Orientation}" Orientation="{TemplateBinding Orientation}"
ViewportSize="{TemplateBinding ViewportSize}" ViewportSize="{TemplateBinding ViewportSize}"
DeferThumbDrag="{TemplateBinding ScrollViewer.IsDeferredScrollingEnabled}" Value="{TemplateBinding Value, Mode=TwoWay}">
Value="{TemplateBinding Value,
Mode=TwoWay}">
<Track.DecreaseButton> <Track.DecreaseButton>
<RepeatButton <RepeatButton
Name="PART_PageUpButton" Name="PART_PageUpButton"
@@ -148,7 +154,7 @@
VerticalAlignment="Stretch" VerticalAlignment="Stretch"
CornerRadius="0" CornerRadius="0"
Focusable="False" Focusable="False"
Theme="{DynamicResource ScrollBarRepeatButton}" /> Theme="{StaticResource ScrollBarRepeatButton}" />
</Track.DecreaseButton> </Track.DecreaseButton>
<Track.IncreaseButton> <Track.IncreaseButton>
<RepeatButton <RepeatButton
@@ -158,23 +164,22 @@
VerticalAlignment="Stretch" VerticalAlignment="Stretch"
CornerRadius="0" CornerRadius="0"
Focusable="False" Focusable="False"
Theme="{DynamicResource ScrollBarRepeatButton}" /> Theme="{StaticResource ScrollBarRepeatButton}" />
</Track.IncreaseButton> </Track.IncreaseButton>
<Thumb Name="thumb" /> <Thumb Name="thumb" />
</Track> </Track>
<RepeatButton <RepeatButton
Name="PART_LineDownButton" Name="PART_LineDownButton"
Grid.Row="2" Grid.Row="2"
MinHeight="{DynamicResource ScrollBarThickness}" MinHeight="{StaticResource ScrollBarThickness}"
Padding="0,4"
HorizontalContentAlignment="Center" HorizontalContentAlignment="Center"
VerticalContentAlignment="Center" VerticalContentAlignment="Center"
Focusable="False" Focusable="False"
Theme="{DynamicResource ScrollBarRepeatButton}"> Theme="{StaticResource ScrollBarRepeatButton}">
<PathIcon <PathIcon
Width="10" Theme="{StaticResource InnerPathIcon}"
Height="10" Classes="Large"
Data="{DynamicResource ScrollBarDownGlyph}" /> Data="{StaticResource ScrollBarDownGlyph}" />
</RepeatButton> </RepeatButton>
</Grid> </Grid>
</Border> </Border>
@@ -184,14 +189,12 @@
<Style Selector="^ /template/ Thumb#thumb"> <Style Selector="^ /template/ Thumb#thumb">
<Setter Property="Foreground" Value="{DynamicResource ScrollBarThumbForeground}" /> <Setter Property="Foreground" Value="{DynamicResource ScrollBarThumbForeground}" />
<Setter Property="Template"> <Setter Property="Template">
<Setter.Value> <ControlTemplate TargetType="Thumb">
<ControlTemplate TargetType="Thumb"> <Border
<Border Background="{TemplateBinding Foreground}"
Background="{TemplateBinding Foreground}" CornerRadius="{DynamicResource ScrollBarThumbCornerRadius}"
CornerRadius="24" UseLayoutRounding="False" />
UseLayoutRounding="False" /> </ControlTemplate>
</ControlTemplate>
</Setter.Value>
</Setter> </Setter>
</Style> </Style>
<Style Selector="^ /template/ Thumb#thumb:pointerover"> <Style Selector="^ /template/ Thumb#thumb:pointerover">
@@ -215,6 +218,17 @@
<Setter Property="RenderTransform" Value="scale(0.92)" /> <Setter Property="RenderTransform" Value="scale(0.92)" />
</Style> </Style>
<Style Selector="^[IsExpanded=False]">
<Style Selector="^ /template/ RepeatButton">
<Setter Property="IsVisible" Value="False" />
</Style>
<Style Selector="^:vertical">
<Setter Property="Width" Value="2" />
</Style>
<Style Selector="^:horizontal">
<Setter Property="Height" Value="2" />
</Style>
</Style>
</ControlTheme> </ControlTheme>
<ControlTheme x:Key="{x:Type ScrollViewer}" TargetType="ScrollViewer"> <ControlTheme x:Key="{x:Type ScrollViewer}" TargetType="ScrollViewer">
<Setter Property="Background" Value="Transparent" /> <Setter Property="Background" Value="Transparent" />
@@ -249,14 +263,11 @@
Grid.Row="0" Grid.Row="0"
Grid.Column="1" Grid.Column="1"
Orientation="Vertical" /> Orientation="Vertical" />
<Panel
Grid.Row="1"
Grid.Column="1" />
</Grid> </Grid>
</ControlTemplate> </ControlTemplate>
</Setter> </Setter>
<Style Selector="^ /template/ ScrollBar"> <Style Selector="^ /template/ ScrollBar">
<Setter Property="Opacity" Value="0"></Setter> <Setter Property="Opacity" Value="0" />
</Style> </Style>
<Style Selector="^:pointerover"> <Style Selector="^:pointerover">
<Style Selector="^ /template/ ScrollBar#PART_HorizontalScrollBar"> <Style Selector="^ /template/ ScrollBar#PART_HorizontalScrollBar">
@@ -266,9 +277,14 @@
<Setter Property="Opacity" Value="1" /> <Setter Property="Opacity" Value="1" />
</Style> </Style>
</Style> </Style>
<Style Selector="^.InsetContent /template/ ScrollContentPresenter#PART_ContentPresenter">
<Setter Property="Grid.RowSpan" Value="1"/>
<Setter Property="Grid.ColumnSpan" Value="1"/>
</Style>
</ControlTheme> </ControlTheme>
<ControlTheme x:Key="StaticScrollViewer" TargetType="ScrollViewer"> <ControlTheme x:Key="StaticScrollViewer" TargetType="ScrollViewer">
<!-- This ControlTheme equivalent to default ScrollViewer with InsetContent style class. It exists for easier setting via style. -->
<Setter Property="Background" Value="Transparent" /> <Setter Property="Background" Value="Transparent" />
<Setter Property="Template"> <Setter Property="Template">
<ControlTemplate TargetType="ScrollViewer"> <ControlTemplate TargetType="ScrollViewer">
@@ -299,9 +315,6 @@
Grid.Row="0" Grid.Row="0"
Grid.Column="1" Grid.Column="1"
Orientation="Vertical" /> Orientation="Vertical" />
<Panel
Grid.Row="1"
Grid.Column="1" />
</Grid> </Grid>
</ControlTemplate> </ControlTemplate>
</Setter> </Setter>

Some files were not shown because too many files have changed in this diff Show More