Compare commits

..

174 Commits

Author SHA1 Message Date
Zhang Dian
08d55c2b7a misc: bump version. 2025-07-11 19:47:43 +08:00
Zhang Dian
297d4ab825 ci: remove tag push trigger from release workflow. 2025-07-11 19:33:00 +08:00
Zhang Dian
469e2080d4 ci: remove useless command. 2025-07-11 14:15:57 +08:00
Zhang Dian
4d93b387a7 ci: using workflow_call to simplify ci. 2025-07-10 21:38:30 +08:00
Dong Bin
69821dc15e Merge pull request #628 from irihitech/advertisement
Add Ads for Packages base Semi.Avalonia
2025-07-10 10:30:56 +08:00
Dong Bin
a9463b8fad Merge pull request #632 from irihitech/issue/631
Turn on CompileBindings in DataValidationErrors and SplitView XAML
2025-07-01 00:54:31 +08:00
Zhang Dian
37598f94e6 fix: turn on CompileBindings in DataValidationErrors and SplitView XAML files. 2025-06-30 19:31:52 +08:00
Dong Bin
1cb3fe956d fix: fix binding in calendar date picker. (#630) 2025-06-29 10:29:42 +08:00
Dong Bin
7b41fd3f33 Merge pull request #629 from irihitech/miniplayer
feat: add new SemiIconMiniPlayer geometry
2025-06-24 22:10:47 +08:00
Zhang Dian
8e675538ba feat: add new SemiIconMiniPlayer geometry. 2025-06-24 17:19:56 +08:00
Zhang Dian
b61d939fce fix: add the missing installation tutorial. 2025-06-21 15:41:50 +08:00
Zhang Dian
d206876c03 feat: add support for Dock, Tabalonia, and AvaloniaEdit in Overview with installation instructions. 2025-06-21 15:35:52 +08:00
King
4522b48f22 Add French local to the set of languages (#626)
* Create fr-fr.axaml

Creating the locale resource for French language

* Update _index.cs

Include french in the index file

* Update fr-fr.axaml

Fix namespace

* Update MainView.axaml.cs

Adding French as a demo language

* Update demo/Semi.Avalonia.Demo/Views/MainView.axaml.cs

Language specific header name

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

* Update src/Semi.Avalonia/Locale/fr-fr.axaml

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

* Update src/Semi.Avalonia/Locale/fr-fr.axaml

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

* Add French to the local collection

---------

Co-authored-by: Zhang Dian <54255897+zdpcdt@users.noreply.github.com>
2025-06-14 13:08:24 +08:00
Zhang Dian
ffa2f04842 fix: update zip commands in release-tag.yml to use -j option for better artifact handling. 2025-06-11 18:09:49 +08:00
Zhang Dian
d400a53784 feat: update publish.yml and release-tag.yml for improved artifact handling and new platform support. 2025-06-11 14:46:41 +08:00
Dong Bin
a31b52cc29 Merge pull request #623 from irihitech/dropdownbutton
fix BorderBrush in OutlineDropDownButton
2025-06-09 14:04:28 +08:00
Zhang Dian
5ffcb32b18 fix: fix BorderBrush in OutlineDropDownButton. 2025-06-05 20:51:24 +08:00
Zhang Dian
d9be5bef21 misc: bump versions to 11.2.1.8 and 11.0.10.4. 2025-05-30 18:20:14 +08:00
Zhang Dian
39e12eb6f8 fix: fix description for Linux x64 in publish.yml. 2025-05-30 18:02:23 +08:00
Dong Bin
7bc96775f7 Merge pull request #618 from irihitech/various
Simplify Packages and CI files
2025-05-30 18:00:00 +08:00
Dong Bin
f3a19f7383 Merge pull request #619 from irihitech/demo
Simplify Demo
2025-05-30 01:08:19 +08:00
Zhang Dian
57235c447d misc: extract VMs. 2025-05-29 19:04:25 +08:00
Zhang Dian
d03fe72fc2 misc: format code for consistency and readability. 2025-05-29 18:40:03 +08:00
Zhang Dian
9b70613b6a misc: correct copyright name in LICENSE file. 2025-05-29 17:49:40 +08:00
Zhang Dian
4e897596ac misc: simplify actions. 2025-05-29 17:48:30 +08:00
Zhang Dian
a2a36dbfcf misc: simplify resources include paths and clean up XAML formatting. 2025-05-29 17:08:05 +08:00
Zhang Dian
d5e0675808 misc: update project references. 2025-05-29 16:43:02 +08:00
Zhang Dian
14a3384cd2 Merge pull request #614 from 763305292/main
Add the ability to edit ring progress bar's thickness.
2025-05-27 16:55:38 +08:00
Zhang Dian
a9440fd656 Merge pull request #617 from Soar360/lookless_text_box
Fix #616
2025-05-23 17:14:51 +08:00
Soar360
e119edf8bb Fix #616 2025-05-23 17:09:23 +08:00
Danielli Dazi
648bcc99f3 Update ProgressBarDemo.axaml
using BorderThickness to change ring progress bar's thickness.
2025-05-22 21:28:19 +08:00
Danielli Dazi
24a0d9aace Update ProgressBar.axaml
using progress bar's  BorderThickness property to control Arc's StrokeThickness property.
2025-05-22 21:26:14 +08:00
Zhang Dian
d50af16ee5 Merge pull request #613 from irihitech/scrollbar
Set scrollbar opacity to 1.
2025-05-21 15:42:50 +08:00
Dong Bin
42ceff91bb feat: set scrollbar opacity to 1. 2025-05-21 02:29:46 +08:00
Dong Bin
71984d3e10 Merge pull request #612 from irihitech/button
enhance Button styles
2025-05-20 15:04:22 +08:00
Zhang Dian
1a30867902 fix: using DockPanel. 2025-05-20 14:58:18 +08:00
Zhang Dian
55654c16ae feat: enhance ToggleSwitch styles. 2025-05-18 16:20:57 +08:00
Zhang Dian
2e157b39bb feat: enhance SplitButton styles. 2025-05-18 16:06:30 +08:00
Zhang Dian
37004426fd feat: refactor DropDownButton styles. 2025-05-18 16:06:30 +08:00
Zhang Dian
5148c62d24 feat: refactor ToggleButton styles. 2025-05-18 16:06:30 +08:00
Zhang Dian
926ebc39da misc: enhance Button styles. 2025-05-18 14:56:23 +08:00
Dong Bin
efdc6953e5 Merge pull request #611 from thekrebso/add-pl-pl-locale
Added polish locale
2025-05-17 21:50:46 +08:00
krebso
d3b9d4225e added polish locale 2025-05-16 16:36:33 +02:00
Zhang Dian
ac03334b19 Merge pull request #610 from irihitech/advertisement
Add About Us page
2025-05-06 17:44:21 +08:00
Zhang Dian
4af5fb654f feat: update AboutUs page styles and links. 2025-05-06 17:43:34 +08:00
Dong Bin
08ee7e4dc0 feat: add urls. 2025-05-05 22:08:28 +08:00
Dong Bin
d67c573535 feat: add aboutus page. 2025-05-05 22:07:20 +08:00
Zhang Dian
7056894c03 fix: add opacity to CheckGlyph. 2025-04-27 20:23:02 +08:00
Zhang Dian
62030c581c misc: bump package versions for DataGrid and TreeDataGrid. 2025-04-25 17:35:45 +08:00
Zhang Dian
bc6daf75a0 misc: bump version. 2025-04-25 16:36:20 +08:00
Zhang Dian
213f9ee0d7 Merge pull request #599 from WCKYWCKF/pr_2
feat: add VerticalSplitView control theme with responsive styles
2025-04-25 15:35:40 +08:00
Zhang Dian
cf79993d4a feat: optimize demo. 2025-04-25 15:32:35 +08:00
Dong Bin
0ffc5e697a Merge pull request #602 from irihitech/checkbox
fix Checkbox & RadioButton disabled Background & Simplify Styles
2025-04-24 17:05:42 +08:00
Dong Bin
96cff5df74 Merge pull request #605 from irihitech/pack
optimize Theme style references for Separate Packages
2025-04-23 22:39:27 +08:00
Dong Bin
04c810275a Merge pull request #604 from irihitech/icon
Uncomment icons
2025-04-23 22:36:37 +08:00
Zhang Dian
77ee768962 feat: update README to use SemiTheme components for ColorPicker, DataGrid, and TreeDataGrid. 2025-04-23 21:30:04 +08:00
Zhang Dian
567027e089 feat: add AssemblyInfo for ColorPicker, DataGrid, and TreeDataGrid. 2025-04-23 21:24:30 +08:00
Zhang Dian
0110a53e55 fix: fix SemiIconConfigStroked & delete SemiIconIndenpentCornersStroked. 2025-04-23 11:25:54 +08:00
Zhang Dian
b3842a7866 feat: redesign SemiIconShieldStroked. 2025-04-23 10:49:47 +08:00
Zhang Dian
d085c83d27 feat: uncomment icons. 2025-04-23 01:39:01 +08:00
Zhang Dian
d2af636a1a misc: sync ListBox. 2025-04-21 20:44:30 +08:00
Zhang Dian
7641a94a5a misc: sync RadioButton. 2025-04-21 20:31:41 +08:00
Zhang Dian
391e558721 misc: simplify CheckBox. 2025-04-21 20:19:52 +08:00
Zhang Dian
b20edc3b01 fix: fix CheckBox Disabled Background. 2025-04-21 19:15:06 +08:00
Zhang Dian
82699e7317 misc: simplify SimpleCheckBox layout. 2025-04-21 13:43:16 +08:00
望尘空忧
1ae0585325 feat: enhance SplitViewDemo with dynamic bindings and new layout structure 2025-04-18 19:30:32 +08:00
望尘空忧
f50795cd25 feat: add VerticalSplitView control theme with responsive styles 2025-04-18 19:09:48 +08:00
Dong Bin
31a219f36f Merge pull request #598 from irihitech/treedemo
Transfer TreeDataGrid demo
2025-04-16 22:33:16 +08:00
Zhang Dian
6f98fbb21c Merge pull request #596 from irihitech/treeview
Make TreeViewItem indentation easier
2025-04-16 22:11:26 +08:00
Zhang Dian
cae26f2134 misc: format codes. 2025-04-16 22:09:11 +08:00
Dong Bin
5bd08daaac Merge pull request #597 from irihitech/various
fix disabled fill color in RadioButton & add default FontWeight to TagLabel
2025-04-16 22:00:10 +08:00
Dong Bin
efd94d1d97 feat: finish demo. 2025-04-16 00:53:41 +08:00
Zhang Dian
49a3eada34 misc: add CompileBinding to TabStripDemo. 2025-04-15 22:00:35 +08:00
Zhang Dian
db24d4393b misc: transfer TreeDataGrid demo. 2025-04-15 21:54:18 +08:00
Zhang Dian
90ef903c22 fix: add default FontWeight to TagLabel. 2025-04-14 20:03:58 +08:00
Zhang Dian
cffcaee392 fix: fix disabled fill color in RadioButton. 2025-04-14 15:53:25 +08:00
Dong Bin
3c4da0f82c feat: update per copilot review. 2025-04-14 01:26:10 +08:00
Dong Bin
4120f59c90 feat: use multibinding for TreeViewItem indentation. 2025-04-14 01:21:20 +08:00
Dong Bin
471764f355 Merge pull request #593 from irihitech/token
replace Label color resources & alter some tokens
2025-04-13 09:30:17 +08:00
Zhang Dian
47d7e1d7a8 fix: SemiBlue5 hex in Palette. 2025-04-12 21:55:24 +08:00
Zhang Dian
5843cbf430 feat: remove White color resource in Light & Ghost classes. 2025-04-12 19:07:49 +08:00
Zhang Dian
c9e549c3e8 feat: replace Label color resources. 2025-04-12 19:00:11 +08:00
Zhang Dian
804f95e0e5 feat: SemiBlue5 hex. 2025-04-12 18:06:42 +08:00
Zhang Dian
2569170ce1 feat: add double type tokens for CornerRadius. 2025-04-12 18:05:09 +08:00
Dong Bin
b1e63a857d Merge pull request #591 from irihitech/strip
Redesign TabStrip
2025-04-10 20:49:11 +08:00
Dong Bin
c898e9eb52 Merge pull request #592 from irihitech/button
enhance Buttons
2025-04-10 20:39:36 +08:00
Zhang Dian
c062297031 feat: remove scale transform in Button. 2025-04-09 17:27:55 +08:00
Zhang Dian
2a70cd7ced feat: use Button theme for RepeatButton. 2025-04-09 17:24:22 +08:00
Zhang Dian
8c0160c310 feat: set Margin to 0 for the last TabStripItem. 2025-04-09 17:20:38 +08:00
Zhang Dian
28a1336413 feat: add TabStripDemo. 2025-04-09 17:15:20 +08:00
Zhang Dian
f008333683 feat: sync with TabControl Themes. 2025-04-08 21:13:07 +08:00
Dong Bin
4adfe739e0 Merge pull request #586 from irihitech/scroll2
Improve scrollbar usability when autohide enabled.
2025-04-08 18:39:28 +08:00
Dong Bin
4222e62b76 Merge pull request #587 from irihitech/demo
Rearrange Pages in demo
2025-04-08 18:39:06 +08:00
Dong Bin
b61c9b081f feat: add a padding. 2025-04-08 18:38:09 +08:00
Zhang Dian
c75d413699 misc: add category tabitem. 2025-04-04 13:03:23 +08:00
Dong Bin
39550a6010 Merge pull request #582 from irihitech/Tab
Redesign TabControl
2025-04-04 10:14:11 +08:00
Dong Bin
610d7f4058 misc: minor format issue. 2025-04-03 21:27:59 +08:00
Dong Bin
4a985f42bc feat: update TabControlDemo layout with improved border and alignment settings 2025-04-03 20:26:45 +08:00
Dong Bin
74071f48fe feat: enhance TabItem styles with new padding and alignment properties 2025-04-03 20:20:47 +08:00
Dong Bin
eefc7dc3f2 fix: enhance ScrollViewer scrollbar alignment for better usability 2025-04-03 19:46:27 +08:00
Dong Bin
b90b606b97 fix: update ScrollViewer styles for improved scrollbar behavior 2025-04-03 19:36:01 +08:00
Zhang Dian
09a070e3a9 feat: redesign TabControlDemo. 2025-03-31 10:30:31 +08:00
Zhang Dian
8e7581fbe7 fix: set TabItem HorizontalContentAlignment to Left. 2025-03-30 00:07:16 +08:00
Zhang Dian
051b137121 feat: extract color resources. 2025-03-29 15:04:28 +08:00
Zhang Dian
3f67c32f03 feat: set the last TabItem Margin to 0. 2025-03-29 12:18:09 +08:00
Zhang Dian
7302c59994 misc: TabControlItem -> TabItem. 2025-03-29 12:18:09 +08:00
Zhang Dian
c1d663cefe feat: add ReverseSeparator Classes. 2025-03-29 12:18:08 +08:00
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
3d83cd02e2 feat: inherit BaseTabControl. 2025-03-27 00:41:47 +08:00
Zhang Dian
34d36b19c8 feat: add other scroll TabControl themes. 2025-03-27 00:14:29 +08:00
Zhang Dian
7751f417f0 feat: add BaseTabControl. 2025-03-26 23:57:45 +08:00
Zhang Dian
c5e8bd6662 feat: add CardTabControl & ButtonTabControl. 2025-03-26 17:19:37 +08:00
Zhang Dian
c447fd8d5d feat: add LineTabControl Theme. 2025-03-25 23:50:21 +08:00
Zhang Dian
a7debb7886 fix: fix issues in TabControl. 2025-03-25 11:08:21 +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
269 changed files with 5188 additions and 4990 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

@@ -24,9 +24,6 @@ jobs:
- name: Publish .NET Project
run: dotnet publish $PROJECT_PATH -c Release --nologo
- name: Change base-tag in index.html
run: sed -i 's#<base href="/" />#<base href="/Semi.Avalonia/" />#g' $OUTPUT_PATH/index.html
- name: copy index.html to 404.html
run: cp $OUTPUT_PATH/index.html $OUTPUT_PATH/404.html

View File

@@ -10,23 +10,19 @@ on:
type: string
Semi_Avalonia:
description: 'Pack Semi.Avalonia'
required: true
default: 'true'
default: true
type: boolean
Semi_Avalonia_ColorPicker:
description: 'Pack Semi.Avalonia.ColorPicker'
required: true
default: 'true'
default: true
type: boolean
Semi_Avalonia_DataGrid:
description: 'Pack Semi.Avalonia.DataGrid'
required: true
default: 'true'
default: false
type: boolean
Semi_Avalonia_TreeDataGrid:
description: 'Pack Semi.Avalonia.TreeDataGrid'
required: true
default: 'false'
default: false
type: boolean
jobs:
@@ -35,39 +31,39 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v4.1.1
uses: actions/checkout@v4.2.2
- name: Get Version
run: |
VERSION_TIMESTAMP=$(date +'%Y%m%d%H%M%S')
VERSION="${{ github.event.inputs.Version_Prefix }}-nightly-${VERSION_TIMESTAMP}"
VERSION="${{ inputs.Version_Prefix }}-nightly-${VERSION_TIMESTAMP}"
echo "VERSION=$VERSION" >> $GITHUB_ENV
- name: Pack Semi.Avalonia
if: ${{ github.event.inputs.Semi_Avalonia == 'true' }}
run: dotnet pack ./src/Semi.Avalonia -o ./nugets /p:Version=${{ env.VERSION }}
if: ${{ inputs.Semi_Avalonia }}
run: dotnet pack src/Semi.Avalonia -o nugets /p:Version=${{ env.VERSION }}
- name: Pack Semi.Avalonia.ColorPicker
if: ${{ github.event.inputs.Semi_Avalonia_ColorPicker == 'true' }}
run: dotnet pack ./src/Semi.Avalonia.ColorPicker -o ./nugets /p:Version=${{ env.VERSION }}
if: ${{ inputs.Semi_Avalonia_ColorPicker }}
run: dotnet pack src/Semi.Avalonia.ColorPicker -o nugets /p:Version=${{ env.VERSION }}
- name: Pack Semi.Avalonia.DataGrid
if: ${{ github.event.inputs.Semi_Avalonia_DataGrid == 'true' }}
run: dotnet pack ./src/Semi.Avalonia.DataGrid -o ./nugets /p:Version=${{ env.VERSION }}
if: ${{ inputs.Semi_Avalonia_DataGrid }}
run: dotnet pack src/Semi.Avalonia.DataGrid -o nugets /p:Version=${{ env.VERSION }}
- name: Pack Semi.Avalonia.TreeDataGrid
if: ${{ github.event.inputs.Semi_Avalonia_TreeDataGrid == 'true' }}
run: dotnet pack ./src/Semi.Avalonia.TreeDataGrid -o ./nugets /p:Version=${{ env.VERSION }}
if: ${{ inputs.Semi_Avalonia_TreeDataGrid }}
run: dotnet pack src/Semi.Avalonia.TreeDataGrid -o nugets /p:Version=${{ env.VERSION }}
- name: Add NuGet Source
run: dotnet nuget add source ${{ secrets.IRIHI_NUGET_NIGHTLY_FEED }} -n irihi.tech -u ${{ secrets.IRIHI_NUGET_USERNAME }} -p ${{ secrets.IRIHI_NUGET_PASSWORD }} --store-password-in-clear-text
- name: Publish Nightly Package
run: dotnet nuget push "./nugets/*.nupkg" --api-key ${{ secrets.IRIHI_NUGET_API_KEY }} --source irihi.tech --skip-duplicate
run: dotnet nuget push "nugets/*.nupkg" --api-key ${{ secrets.IRIHI_NUGET_API_KEY }} --source irihi.tech --skip-duplicate
- name: Upload a Build Artifact
uses: actions/upload-artifact@v4.3.1
uses: actions/upload-artifact@v4.6.2
with:
name: nugets
path: ./nugets
path: nugets
if: always()

View File

@@ -3,26 +3,43 @@ name: Pack to NuGet
on:
workflow_dispatch:
inputs:
Upload_to_NuGet:
description: 'Upload to NuGet'
default: true
type: boolean
Semi_Avalonia:
description: 'Pack Semi.Avalonia'
required: true
default: 'true'
default: true
type: boolean
Semi_Avalonia_ColorPicker:
description: 'Pack Semi.Avalonia.ColorPicker'
required: true
default: 'true'
default: true
type: boolean
Semi_Avalonia_DataGrid:
description: 'Pack Semi.Avalonia.DataGrid'
required: true
default: 'true'
default: false
type: boolean
Semi_Avalonia_TreeDataGrid:
description: 'Pack Semi.Avalonia.TreeDataGrid'
required: true
default: 'false'
default: false
type: boolean
workflow_call:
inputs:
Upload_to_NuGet:
type: boolean
default: false
Semi_Avalonia:
type: boolean
default: true
Semi_Avalonia_ColorPicker:
type: boolean
default: true
Semi_Avalonia_DataGrid:
type: boolean
default: true
Semi_Avalonia_TreeDataGrid:
type: boolean
default: true
jobs:
Pack_to_NuGet:
@@ -30,30 +47,31 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v4.1.1
uses: actions/checkout@v4.2.2
- name: Pack Semi.Avalonia
if: ${{ github.event.inputs.Semi_Avalonia == 'true' }}
run: dotnet pack ./src/Semi.Avalonia -o ./nugets
if: ${{ inputs.Semi_Avalonia }}
run: dotnet pack src/Semi.Avalonia -o nugets
- name: Pack Semi.Avalonia.ColorPicker
if: ${{ github.event.inputs.Semi_Avalonia_ColorPicker == 'true' }}
run: dotnet pack ./src/Semi.Avalonia.ColorPicker -o ./nugets
if: ${{ inputs.Semi_Avalonia_ColorPicker }}
run: dotnet pack src/Semi.Avalonia.ColorPicker -o nugets
- name: Pack Semi.Avalonia.DataGrid
if: ${{ github.event.inputs.Semi_Avalonia_DataGrid == 'true' }}
run: dotnet pack ./src/Semi.Avalonia.DataGrid -o ./nugets
if: ${{ inputs.Semi_Avalonia_DataGrid }}
run: dotnet pack src/Semi.Avalonia.DataGrid -o nugets
- name: Pack Semi.Avalonia.TreeDataGrid
if: ${{ github.event.inputs.Semi_Avalonia_TreeDataGrid == 'true' }}
run: dotnet pack ./src/Semi.Avalonia.TreeDataGrid -o ./nugets
if: ${{ inputs.Semi_Avalonia_TreeDataGrid }}
run: dotnet pack src/Semi.Avalonia.TreeDataGrid -o nugets
- name: Publish NuGet package
run: dotnet nuget push "./nugets/*.nupkg" --api-key ${{ secrets.NUGET_ORG_API_KEY }} --source https://api.nuget.org/v3/index.json --skip-duplicate
- name: Upload to NuGet
if: ${{ inputs.Upload_to_NuGet }}
run: dotnet nuget push "nugets/*.nupkg" --api-key ${{ secrets.NUGET_ORG_API_KEY }} --source https://api.nuget.org/v3/index.json --skip-duplicate
- name: Upload a Build Artifact
uses: actions/upload-artifact@v4.3.1
uses: actions/upload-artifact@v4.6.2
with:
name: nugets
path: ./nugets
path: nugets
if: always()

View File

@@ -3,116 +3,223 @@ name: Publish Demo
on:
workflow_dispatch:
inputs:
platform:
description: 'Platform to publish'
required: true
default: 'all'
type: choice
options:
- 'windows'
- 'linux'
- 'android'
- 'all'
include_aot:
description: 'Include Windows AOT packaging'
required: true
default: true
win-x64:
description: 'Windows x64'
default: false
type: boolean
include_drm:
description: 'Include Linux DRM packaging'
required: true
default: true
win-x64-aot:
description: 'Windows x64 AOT'
default: false
type: boolean
linux-x64:
description: 'Linux x64'
default: false
type: boolean
linux-x64-aot:
description: 'Linux x64 AOT'
default: false
type: boolean
drm-linux-x64:
description: 'DRM Linux x64'
default: false
type: boolean
drm-linux-x64-aot:
description: 'DRM Linux x64 AOT'
default: false
type: boolean
osx-arm64:
description: 'macOS arm64'
default: false
type: boolean
osx-arm64-aot:
description: 'macOS arm64 AOT'
default: false
type: boolean
android-arm64:
description: 'Android arm64'
default: false
type: boolean
workflow_call:
inputs:
win-x64:
type: boolean
default: true
win-x64-aot:
type: boolean
default: true
linux-x64:
type: boolean
default: true
linux-x64-aot:
type: boolean
default: true
drm-linux-x64:
type: boolean
default: true
drm-linux-x64-aot:
type: boolean
default: true
osx-arm64:
type: boolean
default: true
osx-arm64-aot:
type: boolean
default: true
android-arm64:
type: boolean
default: true
jobs:
windows:
if: ${{ github.event.inputs.platform == 'windows' || github.event.inputs.platform == 'all' }}
win-x64:
if: ${{inputs.win-x64}}
runs-on: windows-latest
steps:
- name: Checkout
uses: actions/checkout@v4.1.1
- name: Make upload directory
run: mkdir upload
uses: actions/checkout@v4.2.2
- name: Publish win-x64
run: dotnet publish demo/Semi.Avalonia.Demo.Desktop -r win-x64 -c Release --sc /p:PublishSingleFile=true /p:IncludeNativeLibrariesForSelfExtract=true -o ./publish/win64
- name: Zip win-x64
run: |
$files = Get-ChildItem -Path ./publish/win64/* -Recurse -Exclude *.pdb
Compress-Archive -Path $files.FullName -DestinationPath ./upload/Semi.Avalonia.Demo.Desktop.win-x64.zip
- name: Enable Native AOT in .csproj
if: ${{ github.event.inputs.include_aot == 'true' }}
run: |
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
- name: Publish win-x64 AOT
if: ${{ github.event.inputs.include_aot == 'true' }}
run: dotnet publish demo/Semi.Avalonia.Demo.Desktop -r win-x64 -c Release -o ./publish/win64-aot
- name: Zip win-x64 AOT
if: ${{ github.event.inputs.include_aot == 'true' }}
run: |
$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
run: dotnet publish demo/Semi.Avalonia.Demo.Desktop -r win-x64 -c Release -o publish --sc /p:PublishSingleFile=true /p:IncludeNativeLibrariesForSelfExtract=true
- name: Upload a Build Artifact
uses: actions/upload-artifact@v4.3.1
uses: actions/upload-artifact@v4.6.2
with:
name: windows
path: ./upload
name: Semi.Avalonia.Demo.Desktop.win-x64
path: |
publish
!publish/*.pdb
linux:
if: ${{ github.event.inputs.platform == 'linux' || github.event.inputs.platform == 'all' }}
win-x64-aot:
if: ${{inputs.win-x64-aot}}
runs-on: windows-latest
steps:
- name: Checkout
uses: actions/checkout@v4.2.2
- name: Enable Native AOT in .csproj
run: sed -i 's#<!--<PublishAot>true</PublishAot>-->#<PublishAot>true</PublishAot>#' demo/Semi.Avalonia.Demo.Desktop/Semi.Avalonia.Demo.Desktop.csproj
- name: Publish win-x64 AOT
run: dotnet publish demo/Semi.Avalonia.Demo.Desktop -r win-x64 -c Release -o publish
- name: Upload a Build Artifact
uses: actions/upload-artifact@v4.6.2
with:
name: Semi.Avalonia.Demo.Desktop.win-x64.NativeAOT
path: |
publish
!publish/*.pdb
linux-x64:
if: ${{inputs.linux-x64}}
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4.1.1
- name: Make upload directory
run: mkdir upload
uses: actions/checkout@v4.2.2
- name: Publish linux-x64
run: dotnet publish demo/Semi.Avalonia.Demo.Desktop -r linux-x64 -c Release --sc /p:PublishSingleFile=true /p:IncludeNativeLibrariesForSelfExtract=true -o ./publish/linux64
- name: Zip linux-x64
run: zip -j -r ./upload/Semi.Avalonia.Demo.Desktop.linux-x64.zip ./publish/linux64 -x "*.pdb"
- name: Publish linux-x64 DRM
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
- name: Zip linux-x64 DRM
if: ${{ github.event.inputs.include_drm == 'true' }}
run: zip -j -r ./upload/Semi.Avalonia.Demo.Drm.linux-x64.zip ./publish/drm -x "*.pdb"
run: dotnet publish demo/Semi.Avalonia.Demo.Desktop -r linux-x64 -c Release -o publish --sc /p:PublishSingleFile=true /p:IncludeNativeLibrariesForSelfExtract=true
- name: Upload a Build Artifact
uses: actions/upload-artifact@v4.3.1
uses: actions/upload-artifact@v4.6.2
with:
name: linux
path: ./upload
name: Semi.Avalonia.Demo.Desktop.linux-x64
path: |
publish
!publish/*.pdb
android:
if: ${{ github.event.inputs.platform == 'android' || github.event.inputs.platform == 'all' }}
linux-x64-aot:
if: ${{inputs.linux-x64-aot}}
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4.2.2
- name: Enable Native AOT in .csproj
run: sed -i 's#<!--<PublishAot>true</PublishAot>-->#<PublishAot>true</PublishAot>#' demo/Semi.Avalonia.Demo.Desktop/Semi.Avalonia.Demo.Desktop.csproj
- name: Publish linux-x64 AOT
run: dotnet publish demo/Semi.Avalonia.Demo.Desktop -r linux-x64 -c Release -o publish
- name: Upload a Build Artifact
uses: actions/upload-artifact@v4.6.2
with:
name: Semi.Avalonia.Demo.Desktop.linux-x64.NativeAOT
path: |
publish
!publish/*.pdb
drm-linux-x64:
if: ${{inputs.drm-linux-x64}}
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4.2.2
- name: Publish linux-x64 DRM
run: dotnet publish demo/Semi.Avalonia.Demo.Drm -r linux-x64 -c Release -o publish --sc /p:PublishSingleFile=true /p:IncludeNativeLibrariesForSelfExtract=true
- name: Upload a Build Artifact
uses: actions/upload-artifact@v4.6.2
with:
name: Semi.Avalonia.Demo.Drm.linux-x64
path: |
publish
!publish/*.pdb
drm-linux-x64-aot:
if: ${{inputs.drm-linux-x64-aot}}
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4.2.2
- name: Enable Native AOT in .csproj
run: sed -i 's#<!--<PublishAot>true</PublishAot>-->#<PublishAot>true</PublishAot>#' demo/Semi.Avalonia.Demo.Drm/Semi.Avalonia.Demo.Drm.csproj
- name: Publish linux-x64 AOT
run: dotnet publish demo/Semi.Avalonia.Demo.Drm -r linux-x64 -c Release -o publish
- name: Upload a Build Artifact
uses: actions/upload-artifact@v4.6.2
with:
name: Semi.Avalonia.Demo.Drm.linux-x64.NativeAOT
path: |
publish
!publish/*.pdb
osx-arm64:
if: ${{inputs.osx-arm64}}
runs-on: macos-latest
steps:
- name: Checkout
uses: actions/checkout@v4.2.2
- name: Publish osx-arm64
run: dotnet publish demo/Semi.Avalonia.Demo.Desktop -r osx-arm64 -c Release -o publish --sc /p:PublishSingleFile=true /p:IncludeNativeLibrariesForSelfExtract=true
- name: Upload a Build Artifact
uses: actions/upload-artifact@v4.6.2
with:
name: Semi.Avalonia.Demo.Desktop.osx-arm64
path: |
publish
!publish/*.pdb
osx-arm64-aot:
if: ${{inputs.osx-arm64-aot}}
runs-on: macos-latest
steps:
- name: Checkout
uses: actions/checkout@v4.2.2
- name: Enable Native AOT in .csproj
run: sed -i '' 's#<!--<PublishAot>true</PublishAot>-->#<PublishAot>true</PublishAot>#' demo/Semi.Avalonia.Demo.Desktop/Semi.Avalonia.Demo.Desktop.csproj
- name: Publish osx-arm64 AOT
run: dotnet publish demo/Semi.Avalonia.Demo.Desktop -r osx-arm64 -c Release -o publish
- name: Upload a Build Artifact
uses: actions/upload-artifact@v4.6.2
with:
name: Semi.Avalonia.Demo.Desktop.osx-arm64.NativeAOT
path: |
publish
!publish/*.pdb
android-arm64:
if: ${{inputs.android-arm64 }}
runs-on: windows-latest
steps:
- name: Checkout
uses: actions/checkout@v4.1.1
uses: actions/checkout@v4.2.2
- name: CD Android
run: cd ./demo/Semi.Avalonia.Demo.Android
run: cd demo/Semi.Avalonia.Demo.Android
- name: Restore Dependencies
run: dotnet restore
- name: Publish Android
run: dotnet publish demo/Semi.Avalonia.Demo.Android -c Release -f net8.0-android --no-restore -o ./publish -p:RuntimeIdentifier=android-arm64
run: dotnet publish demo/Semi.Avalonia.Demo.Android -c Release -f net8.0-android --no-restore -o publish /p:RuntimeIdentifier=android-arm64
- name: Upload a Build Artifact
uses: actions/upload-artifact@v4.3.1
uses: actions/upload-artifact@v4.6.2
with:
name: android
path: ./publish/*Signed.apk
name: android-arm64
path: publish/*Signed.apk

View File

@@ -1,149 +1,73 @@
name: Release Tag
on:
push:
tags:
- "v[0-9]+.[0-9]+.[0-9]+.[0-9]+"
workflow_dispatch:
inputs:
Upload_to_NuGet:
description: 'Upload to NuGet'
default: false
type: boolean
Semi_Avalonia:
description: 'Pack Semi.Avalonia'
default: true
type: boolean
Semi_Avalonia_ColorPicker:
description: 'Pack Semi.Avalonia.ColorPicker'
default: true
type: boolean
Semi_Avalonia_DataGrid:
description: 'Pack Semi.Avalonia.DataGrid'
default: false
type: boolean
Semi_Avalonia_TreeDataGrid:
description: 'Pack Semi.Avalonia.TreeDataGrid'
default: false
type: boolean
jobs:
pack:
runs-on: ubuntu-latest
nuget:
uses: ./.github/workflows/pack.yml
with:
Upload_to_NuGet: ${{ inputs.Upload_to_NuGet }}
Semi_Avalonia: ${{ inputs.Semi_Avalonia }}
Semi_Avalonia_ColorPicker: ${{ inputs.Semi_Avalonia_ColorPicker }}
Semi_Avalonia_DataGrid: ${{ inputs.Semi_Avalonia_DataGrid }}
Semi_Avalonia_TreeDataGrid: ${{ inputs.Semi_Avalonia_TreeDataGrid }}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Pack Semi.Avalonia
run: dotnet pack ./src/Semi.Avalonia -o ./nugets
- name: Pack Semi.Avalonia.ColorPicker
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
uses: actions/upload-artifact@v4
with:
name: nugets
path: ./nugets
publish-windows:
runs-on: windows-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Make upload directory
run: mkdir upload
- name: Publish win-x64
run: dotnet publish demo/Semi.Avalonia.Demo.Desktop -r win-x64 -c Release --sc /p:PublishSingleFile=true /p:IncludeNativeLibrariesForSelfExtract=true -o ./publish/win64
- name: Zip win-x64
run: |
$files = Get-ChildItem -Path ./publish/win64/* -Recurse -Exclude *.pdb
Compress-Archive -Path $files.FullName -DestinationPath ./upload/Semi.Avalonia.Demo.Desktop.win-x64.zip
- name: Enable Native AOT in .csproj
run: |
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
- name: Publish win-x64 AOT
run: dotnet publish demo/Semi.Avalonia.Demo.Desktop -r win-x64 -c Release -o ./publish/win64-aot
- name: Zip win-x64 AOT
run: |
$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
- name: Upload a Build Artifact
uses: actions/upload-artifact@v4
with:
name: windows
path: ./upload
publish-linux:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Make upload directory
run: mkdir upload
- name: Publish linux-x64
run: dotnet publish demo/Semi.Avalonia.Demo.Desktop -r linux-x64 -c Release --sc /p:PublishSingleFile=true /p:IncludeNativeLibrariesForSelfExtract=true -o ./publish/linux64
- name: Zip linux-x64
run: zip -j -r ./upload/Semi.Avalonia.Demo.Desktop.linux-x64.zip ./publish/linux64 -x "*.pdb"
- name: Publish linux-x64 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
run: zip -j -r ./upload/Semi.Avalonia.Demo.Drm.linux-x64.zip ./publish/drm -x "*.pdb"
- name: Upload a Build Artifact
uses: actions/upload-artifact@v4
with:
name: linux
path: ./upload
publish-android:
runs-on: windows-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: CD Android
run: cd ./demo/Semi.Avalonia.Demo.Android
- name: Restore Dependencies
run: dotnet restore
- name: Publish Android
run: dotnet publish demo/Semi.Avalonia.Demo.Android -c Release -f net8.0-android --no-restore -o ./publish -p:RuntimeIdentifier=android-arm64
- name: Upload a Build Artifact
uses: actions/upload-artifact@v4
with:
name: android
path: ./publish/*Signed.apk
publish:
uses: ./.github/workflows/publish.yml
draft-release:
needs: [ pack, publish-windows, publish-linux, publish-android ]
needs: [ nuget,publish ]
runs-on: ubuntu-latest
steps:
- name: Download nugets Artifacts
uses: actions/download-artifact@v4
with:
name: nugets
- uses: actions/download-artifact@v4.3.0
- name: Download windows Artifacts
uses: actions/download-artifact@v4
with:
name: windows
- name: Display structure of downloaded files
run: ls -R
- name: Download linux Artifacts
uses: actions/download-artifact@v4
with:
name: linux
- name: Zip artifacts
run: |
zip -rj Semi.Avalonia.Demo.Desktop.win-x64.zip Semi.Avalonia.Demo.Desktop.win-x64
zip -rj Semi.Avalonia.Demo.Desktop.win-x64.NativeAOT.zip Semi.Avalonia.Demo.Desktop.win-x64.NativeAOT
zip -rj Semi.Avalonia.Demo.Desktop.linux-x64.zip Semi.Avalonia.Demo.Desktop.linux-x64
zip -rj Semi.Avalonia.Demo.Desktop.linux-x64.NativeAOT.zip Semi.Avalonia.Demo.Desktop.linux-x64.NativeAOT
zip -rj Semi.Avalonia.Demo.Drm.linux-x64.zip Semi.Avalonia.Demo.Drm.linux-x64
zip -rj Semi.Avalonia.Demo.Drm.linux-x64.NativeAOT.zip Semi.Avalonia.Demo.Drm.linux-x64.NativeAOT
zip -rj Semi.Avalonia.Demo.Desktop.osx-arm64.zip Semi.Avalonia.Demo.Desktop.osx-arm64
cd Semi.Avalonia.Demo.Desktop.osx-arm64.NativeAOT
zip -r ../Semi.Avalonia.Demo.Desktop.osx-arm64.NativeAOT.zip .
- name: Download android Artifacts
uses: actions/download-artifact@v4
with:
name: android
- name: Display structure of zipped files
run: ls -R
- name: Release
uses: softprops/action-gh-release@v2
uses: softprops/action-gh-release@v2.3.2
if: startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch'
with:
generate_release_notes: true
draft: true
files: |
*.nupkg
*.zip
*.apk
nugets/*.nupkg
android-arm64/*.apk
*.zip

View File

@@ -1,6 +1,6 @@
MIT License
Copyright (c) 2022 iriHi Technology
Copyright (c) 2022 IRIHI Technology
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

View File

@@ -38,22 +38,30 @@ Include Semi Design Styles in application:
That's all.
ColorPicker, DataGrid and TreeDataGrid are distributed in separated packages. Please install if you need.
ColorPicker, DataGrid, TreeDataGrid, Dock, Tabalonia and AvaloniaEdit are distributed in separated packages. Please install if you need.
```bash
dotnet add package Semi.Avalonia.ColorPicker
dotnet add package Semi.Avalonia.DataGrid
dotnet add package Semi.Avalonia.TreeDataGrid
dotnet add package Semi.Avalonia.Dock
dotnet add package Semi.Avalonia.Tabalonia
dotnet add package Semi.Avalonia.AvaloniaEdit
```
```xaml
<Application.Styles>
<StyleInclude Source="avares://Semi.Avalonia.ColorPicker/Index.axaml" />
<StyleInclude Source="avares://Semi.Avalonia.DataGrid/Index.axaml" />
<StyleInclude Source="avares://Semi.Avalonia.TreeDataGrid/Index.axaml" />
<semi:ColorPickerSemiTheme />
<semi:DataGridSemiTheme />
<semi:TreeDataGridSemiTheme />
<semi:DockSemiTheme />
<semi:TabaloniaSemiTheme />
<semi:AvaloniaEditSemiTheme />
</Application.Styles>
```
Notice: Dock, Tabalonia and AvaloniaEdit are delivered via nuget for free, but not open source. Please read the license and agree to continue use these packages. If you need source code, please contact us via email: [contact@irihi.tech](contact@irihi.tech)
## Demo
You can always download demo executable to play around with Semi Avalonia Themes.
@@ -63,7 +71,7 @@ You can always download demo executable to play around with Semi Avalonia Themes
We offer limited free community support for Semi Avalonia and Ursa. If you have any question or suggestion, feel free to raise issues and discussions via GitHub, and you are welcomed to join our group via FeiShu(Lark)
![FeiShu](./docs/community-support.png)
![FeiShu](./docs/community-support.png)
## Version compatibility

View File

@@ -38,22 +38,30 @@ dotnet add package Semi.Avalonia
这样就可以了。
ColorPicker、DataGridTreeDataGrid 的样式单独分发,如果需要请安装并引用。
ColorPicker、DataGridTreeDataGrid、Dock、Tabalonia 和 AvaloniaEdit 的样式单独分发,如果需要请安装并引用。
```bash
dotnet add package Semi.Avalonia.ColorPicker
dotnet add package Semi.Avalonia.DataGrid
dotnet add package Semi.Avalonia.TreeDataGrid
dotnet add package Semi.Avalonia.Dock
dotnet add package Semi.Avalonia.Tabalonia
dotnet add package Semi.Avalonia.AvaloniaEdit
```
```xaml
<Application.Styles>
<StyleInclude Source="avares://Semi.Avalonia.ColorPicker/Index.axaml" />
<StyleInclude Source="avares://Semi.Avalonia.DataGrid/Index.axaml" />
<StyleInclude Source="avares://Semi.Avalonia.TreeDataGrid/Index.axaml" />
<semi:ColorPickerSemiTheme />
<semi:DataGridSemiTheme />
<semi:TreeDataGridSemiTheme />
<semi:DockSemiTheme />
<semi:TabaloniaSemiTheme />
<semi:AvaloniaEditSemiTheme />
</Application.Styles>
```
注意Dock、Tabalonia 和 AvaloniaEdit 是通过 NuGet 免费分发的,但不是开源的。请阅读许可协议并同意后继续使用这些包。如果您需要源代码,请通过电子邮件联系我们:[contact@irihi.tech](contact@irihi.tech)
## 示例
您可以从 Semi Avalonia 的 release 页下载并试用 Semi Avalonia 的展示应用。

View File

@@ -39,8 +39,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Semi.Avalonia.Demo.Drm", "d
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Semi.Avalonia.TreeDataGrid", "src\Semi.Avalonia.TreeDataGrid\Semi.Avalonia.TreeDataGrid.csproj", "{398D2998-0835-41F5-99A3-608CAB8051E2}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Semi.Avalonia.TreeDataGrid.Demo", "demo\Semi.Avalonia.TreeDataGrid.Demo\Semi.Avalonia.TreeDataGrid.Demo.csproj", "{6178B545-4BB6-458C-A27C-EE11F3885D38}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -84,10 +82,6 @@ Global
{398D2998-0835-41F5-99A3-608CAB8051E2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{398D2998-0835-41F5-99A3-608CAB8051E2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{398D2998-0835-41F5-99A3-608CAB8051E2}.Release|Any CPU.Build.0 = Release|Any CPU
{6178B545-4BB6-458C-A27C-EE11F3885D38}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6178B545-4BB6-458C-A27C-EE11F3885D38}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6178B545-4BB6-458C-A27C-EE11F3885D38}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6178B545-4BB6-458C-A27C-EE11F3885D38}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -98,7 +92,6 @@ Global
{D789AEDB-EBDF-4450-8E8E-B4A03FB257B0} = {43091528-9509-43CB-A003-9C5C11E96DD6}
{0C81FC1C-5D2D-478A-9876-923A0C85EC2F} = {43091528-9509-43CB-A003-9C5C11E96DD6}
{86D93406-412A-4429-93B2-92AAD0407784} = {43091528-9509-43CB-A003-9C5C11E96DD6}
{6178B545-4BB6-458C-A27C-EE11F3885D38} = {43091528-9509-43CB-A003-9C5C11E96DD6}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {7CA41ED3-2CED-40CC-AA21-28C3B42B1E86}

View File

@@ -1,6 +1,7 @@
<Project>
<PropertyGroup>
<AvaloniaVersion>11.2.3</AvaloniaVersion>
<AvaloniaVersion>11.3.0</AvaloniaVersion>
<DataGridVersion>11.3.0</DataGridVersion>
<CommunityToolkitVersion>8.4.0</CommunityToolkitVersion>
</PropertyGroup>
</Project>

View File

@@ -6,7 +6,6 @@
<BuiltInComInteropSupport>true</BuiltInComInteropSupport>
<!-- Uncomment below to enable Native AOT compilation-->
<!--<PublishAot>true</PublishAot>-->
<!--<IncludeNativeLibrariesForSelfExtract>true</IncludeNativeLibrariesForSelfExtract>-->
</PropertyGroup>
<PropertyGroup Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net8.0'))">

View File

@@ -63,7 +63,7 @@ private static void SilenceConsole()
6. Publish the app to Linux
```bash
dotnet publish demo/Semi.Avalonia.Demo.Drm/Semi.Avalonia.Demo.Drm.csproj -c Release -r linux-x64 --sc -p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true
dotnet publish demo/Semi.Avalonia.Demo.Drm/Semi.Avalonia.Demo.Drm.csproj -c Release -r linux-x64 --sc /p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true
```
Add the following code to the csproj file for AOT publishing

View File

@@ -63,7 +63,7 @@ private static void SilenceConsole()
6. 发布程序到Linux
```bash
dotnet publish demo/Semi.Avalonia.Demo.Drm/Semi.Avalonia.Demo.Drm.csproj -c Release -r linux-x64 --sc -p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true
dotnet publish demo/Semi.Avalonia.Demo.Drm/Semi.Avalonia.Demo.Drm.csproj -c Release -r linux-x64 --sc /p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true
```
AOT发布需要在csproj文件中添加以下代码

View File

@@ -6,7 +6,6 @@
<BuiltInComInteropSupport>true</BuiltInComInteropSupport>
<!-- Uncomment below to enable Native AOT compilation-->
<!--<PublishAot>true</PublishAot>-->
<!--<IncludeNativeLibrariesForSelfExtract>true</IncludeNativeLibrariesForSelfExtract>-->
</PropertyGroup>
<PropertyGroup Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net8.0'))">

View File

@@ -7,18 +7,16 @@
xmlns:semi="https://irihi.tech/semi"
xmlns:viewModels="clr-namespace:Semi.Avalonia.Demo.ViewModels">
<Application.Styles>
<!-- You can still reference in old way. -->
<!-- <StyleInclude Source="avares://Semi.Avalonia/Index.axaml" /> -->
<semi:SemiTheme Locale="zh-CN" />
<semi:SemiPopupAnimations />
<StyleInclude Source="avares://Semi.Avalonia.DataGrid/Index.axaml" />
<StyleInclude Source="avares://Semi.Avalonia.ColorPicker/Index.axaml" />
<semi:ColorPickerSemiTheme />
<semi:DataGridSemiTheme />
<semi:TreeDataGridSemiTheme />
</Application.Styles>
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceInclude
Source="Themes/_index.axaml" />
<ResourceInclude Source="Themes/_index.axaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>

View File

@@ -5,8 +5,8 @@ namespace Semi.Avalonia.Demo.Constant;
public static class ColorTokens
{
public static IReadOnlyList<Tuple<string, string>> PrimaryTokens { get; } = new List<Tuple<string, string>>
{
public static IReadOnlyList<Tuple<string, string>> PrimaryTokens { get; } =
[
new("SemiColorPrimary", "Primary"),
new("SemiColorPrimaryPointerover", "Primary Pointerover"),
new("SemiColorPrimaryActive", "Primary Active"),
@@ -14,130 +14,130 @@ public static class ColorTokens
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>>
{
public static IReadOnlyList<Tuple<string, string>> SecondaryTokens { get; } =
[
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"),
};
new("SemiColorSecondaryLightActive", "Secondary Light Active")
];
public static IReadOnlyList<Tuple<string, string>> TertiaryTokens { get; } = new List<Tuple<string, string>>
{
public static IReadOnlyList<Tuple<string, string>> TertiaryTokens { get; } =
[
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"),
};
new("SemiColorTertiaryLightActive", "Tertiary Light Active")
];
public static IReadOnlyList<Tuple<string, string>> InformationTokens { get; } = new List<Tuple<string, string>>
{
public static IReadOnlyList<Tuple<string, string>> InformationTokens { get; } =
[
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"),
};
new("SemiColorInformationLightActive", "Information Light Active")
];
public static IReadOnlyList<Tuple<string, string>> SuccessTokens { get; } = new List<Tuple<string, string>>
{
public static IReadOnlyList<Tuple<string, string>> SuccessTokens { get; } =
[
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"),
};
new("SemiColorSuccessLightActive", "Success Light Active")
];
public static IReadOnlyList<Tuple<string, string>> WarningTokens { get; } = new List<Tuple<string, string>>
{
public static IReadOnlyList<Tuple<string, string>> WarningTokens { get; } =
[
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"),
};
new("SemiColorWarningLightActive", "Warning Light Active")
];
public static IReadOnlyList<Tuple<string, string>> DangerTokens { get; } = new List<Tuple<string, string>>
{
public static IReadOnlyList<Tuple<string, string>> DangerTokens { get; } =
[
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"),
};
new("SemiColorDangerLightActive", "Danger Light Active")
];
public static IReadOnlyList<Tuple<string, string>> TextTokens { get; } = new List<Tuple<string, string>>
{
public static IReadOnlyList<Tuple<string, string>> TextTokens { get; } =
[
new("SemiColorText0", "Text 0"),
new("SemiColorText1", "Text 1"),
new("SemiColorText2", "Text 2"),
new("SemiColorText3", "Text 3"),
};
new("SemiColorText3", "Text 3")
];
public static IReadOnlyList<Tuple<string, string>> LinkTokens { get; } = new List<Tuple<string, string>>
{
public static IReadOnlyList<Tuple<string, string>> LinkTokens { get; } =
[
new("SemiColorLink", "Link"),
new("SemiColorLinkPointerover", "Link Pointerover"),
new("SemiColorLinkActive", "Link Active"),
new("SemiColorLinkVisited", "Link Visited"),
};
new("SemiColorLinkVisited", "Link Visited")
];
public static IReadOnlyList<Tuple<string, string>> BackgroundTokens { get; } = new List<Tuple<string, string>>
{
public static IReadOnlyList<Tuple<string, string>> BackgroundTokens { get; } =
[
new("SemiColorBackground0", "Background 0"),
new("SemiColorBackground1", "Background 1"),
new("SemiColorBackground2", "Background 2"),
new("SemiColorBackground3", "Background 3"),
new("SemiColorBackground4", "Background 4"),
};
new("SemiColorBackground4", "Background 4")
];
public static IReadOnlyList<Tuple<string, string>> FillTokens { get; } = new List<Tuple<string, string>>
{
public static IReadOnlyList<Tuple<string, string>> FillTokens { get; } =
[
new("SemiColorFill0", "Fill 0"),
new("SemiColorFill1", "Fill 1"),
new("SemiColorFill2", "Fill 2"),
};
new("SemiColorFill2", "Fill 2")
];
public static IReadOnlyList<Tuple<string, string>> BorderTokens { get; } = new List<Tuple<string, string>>
{
public static IReadOnlyList<Tuple<string, string>> BorderTokens { get; } =
[
new("SemiColorBorder", "Border"),
new("SemiColorFocusBorder", "Focus Border"),
};
new("SemiColorFocusBorder", "Focus Border")
];
public static IReadOnlyList<Tuple<string, string>> DisabledTokens { get; } = new List<Tuple<string, string>>
{
public static IReadOnlyList<Tuple<string, string>> DisabledTokens { get; } =
[
new("SemiColorDisabledText", "Disabled Text"),
new("SemiColorDisabledBorder", "Disabled Border"),
new("SemiColorDisabledBackground", "Disabled Background"),
new("SemiColorDisabledFill", "Disabled Fill"),
};
new("SemiColorDisabledFill", "Disabled Fill")
];
public static IReadOnlyList<Tuple<string, string>> OtherTokens { get; } = new List<Tuple<string, string>>
{
public static IReadOnlyList<Tuple<string, string>> OtherTokens { get; } =
[
new("SemiColorWhite", "White"),
new("SemiColorBlack", "Black"),
new("SemiColorNavBackground", "Navigation Background"),
new("SemiColorOverlayBackground", "Overlay Background"),
new("SemiColorHighlightBackground", "Highlight Background"),
new("SemiColorHighlight", "Highlight Text"),
};
new("SemiColorHighlight", "Highlight Text")
];
public static IReadOnlyList<Tuple<string, string>> ShadowTokens { get; } = new List<Tuple<string, string>>
{
public static IReadOnlyList<Tuple<string, string>> ShadowTokens { get; } =
[
new("SemiColorShadow", "Shadow"),
new("SemiShadowElevated", "Shadow Elevated"),
};
new("SemiShadowElevated", "Shadow Elevated")
];
}

View File

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

View File

@@ -0,0 +1,237 @@
<UserControl
x:Class="Semi.Avalonia.Demo.Pages.AboutUs"
xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:collections="clr-namespace:Avalonia.Collections;assembly=Avalonia.Base"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:iri="https://irihi.tech/shared"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:vm="clr-namespace:Semi.Avalonia.Demo.ViewModels"
x:DataType="vm:AboutUsViewModel"
x:CompileBindings="True"
d:DesignHeight="450"
d:DesignWidth="800"
mc:Ignorable="d">
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.ThemeDictionaries>
<ResourceDictionary x:Key="Light">
<collections:AvaloniaList x:Key="CanvasPalette" x:TypeArguments="Color">
<Color>#FFFDB7A5</Color>
<Color>#FFF6A0B5</Color>
<Color>#FFDD9BE0</Color>
<Color>#FFC4A7E9</Color>
<Color>#FFA7B3E1</Color>
<Color>#FF98CDFD</Color>
<Color>#FF95D8F8</Color>
</collections:AvaloniaList>
<LinearGradientBrush x:Key="TileTitleForeground" StartPoint="">
<GradientStop Offset="0.0" Color="#FFA20B48" />
<GradientStop Offset="0.3" Color="#FF71168A" />
<GradientStop Offset="0.6" Color="#FF46259E" />
<GradientStop Offset="1.0" Color="#FF28348C" />
</LinearGradientBrush>
</ResourceDictionary>
<ResourceDictionary x:Key="Dark">
<collections:AvaloniaList x:Key="CanvasPalette" x:TypeArguments="Color">
<Color>#FFB42019</Color>
<Color>#FFA41751</Color>
<Color>#FF731F8A</Color>
<Color>#FF582EA0</Color>
<Color>#FF29368E</Color>
<Color>#FF135CB8</Color>
<Color>#FF0366A9</Color>
</collections:AvaloniaList>
<LinearGradientBrush x:Key="TileTitleForeground">
<GradientStop Offset="0.0" Color="#FFF7A8BC" />
<GradientStop Offset="0.3" Color="#FFDDA0E1" />
<GradientStop Offset="0.6" Color="#FFBEADE9" />
<GradientStop Offset="1.0" Color="#FFA7B4E2" />
</LinearGradientBrush>
</ResourceDictionary>
</ResourceDictionary.ThemeDictionaries>
<ControlTheme x:Key="TileButton" TargetType="Button">
<Setter Property="HorizontalContentAlignment" Value="Left" />
<Setter Property="Padding" Value="24" />
<Setter Property="VerticalContentAlignment" Value="Center" />
<Setter Property="Template">
<ControlTemplate>
<Border
Padding="0"
Classes="Hover"
Cursor="Hand"
Theme="{DynamicResource CardBorder}">
<Border.Transitions>
<Transitions>
<BrushTransition Property="BorderBrush" Duration="0.5" />
</Transitions>
</Border.Transitions>
<ContentPresenter
Padding="{TemplateBinding Padding}"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
Content="{TemplateBinding Content}"
ContentTemplate="{TemplateBinding ContentTemplate}" />
</Border>
</ControlTemplate>
</Setter>
<Style Selector="^:pointerover /template/ Border">
<Setter Property="BorderBrush" Value="{DynamicResource TileTitleForeground}" />
</Style>
</ControlTheme>
</ResourceDictionary>
</UserControl.Resources>
<UserControl.Styles>
<Style Selector="TextBlock.TileTitle">
<Setter Property="FontWeight" Value="700" />
<Setter Property="FontSize" Value="24" />
<Setter Property="Margin" Value="0 0 0 8" />
<Setter Property="Foreground" Value="{DynamicResource TileTitleForeground}" />
</Style>
</UserControl.Styles>
<Grid RowDefinitions="*, Auto">
<ScrollViewer>
<StackPanel>
<Grid
Margin="0,96,0,48"
HorizontalAlignment="Center"
ColumnDefinitions="*, *"
RowDefinitions="*, *">
<iri:IrihiLogo
Grid.Row="0"
Grid.RowSpan="2"
Grid.Column="0"
Fill="{DynamicResource TextBlockSecondaryForeground}"
Width="96"
Margin="0,0,24,0"
VerticalAlignment="Center" />
<TextBlock
Grid.Row="0"
Grid.Column="1"
HorizontalAlignment="Left"
VerticalAlignment="Bottom"
Classes="Secondary"
FontSize="48"
FontWeight="700"
Text="铱泓科技" />
<TextBlock
Grid.Row="1"
Grid.Column="1"
Margin="12,0,0,0"
HorizontalAlignment="Left"
VerticalAlignment="Top"
Classes="Secondary"
FontSize="16"
Text="IRIHI Technology" />
</Grid>
<TextBlock
HorizontalAlignment="Center"
Classes="Tertiary"
FontSize="20"
FontWeight="700"
Text="聚焦生产力的美学进化" />
<TextBlock
HorizontalAlignment="Center"
Classes="Tertiary"
FontSize="20"
Text="Aesthetic Evolution of Productivity" />
<UniformGrid
MaxWidth="810"
Margin="24"
HorizontalAlignment="Center"
Columns="2">
<Button
Margin="8"
Command="{Binding NavigateCommand}"
CommandParameter="semi"
Theme="{DynamicResource TileButton}">
<StackPanel HorizontalAlignment="Left">
<TextBlock Classes="TileTitle" Text="Semi" />
<StackPanel Orientation="Horizontal" Margin="0 0 0 8">
<Label Theme="{DynamicResource TagLabel}" Classes="Blue Ghost">Open Source</Label>
</StackPanel>
<TextBlock Text="开箱即用的独立主题库" />
<TextBlock Text="A ready-to-use standalone theme library" />
</StackPanel>
</Button>
<Button
Margin="8"
Command="{Binding NavigateCommand}"
CommandParameter="ursa"
Theme="{DynamicResource TileButton}">
<StackPanel HorizontalAlignment="Left">
<TextBlock Classes="TileTitle" Text="Ursa" />
<StackPanel Orientation="Horizontal" Margin="0 0 0 8">
<Label Theme="{DynamicResource TagLabel}" Classes="Blue Ghost">Open Source</Label>
</StackPanel>
<TextBlock Text="高性能企业级桌面客户端控件库" />
<TextBlock Text="High-performance enterprise level control library for desktop apps" />
</StackPanel>
</Button>
<Button
Margin="8"
Command="{Binding NavigateCommand}"
CommandParameter="mantra"
Theme="{DynamicResource TileButton}">
<StackPanel HorizontalAlignment="Left">
<TextBlock Classes="TileTitle" Text="Mantra" />
<StackPanel Orientation="Horizontal" Margin="0 0 0 8">
<Label Theme="{DynamicResource TagLabel}" Classes="Purple Ghost">Commercial</Label>
</StackPanel>
<TextBlock Text="高性能文字排版渲染控件库" />
<TextBlock Text="High-performance typography control library" />
</StackPanel>
</Button>
<Button
Margin="8"
Command="{Binding NavigateCommand}"
CommandParameter="huska"
Theme="{DynamicResource TileButton}">
<StackPanel HorizontalAlignment="Left">
<TextBlock Classes="TileTitle" Text="Huska" />
<StackPanel Orientation="Horizontal" Margin="0 0 0 8">
<Label Theme="{DynamicResource TagLabel}" Classes="Purple Ghost">Commercial</Label>
</StackPanel>
<TextBlock Text="手绘风格主题库" />
<TextBlock Text="Hand-drawing theme library" />
</StackPanel>
</Button>
</UniformGrid>
</StackPanel>
</ScrollViewer>
<StackPanel
Grid.Row="1"
Margin="0,16"
Spacing="32"
HorizontalAlignment="Center"
Orientation="Horizontal">
<StackPanel Orientation="Horizontal">
<HyperlinkButton
Classes="WithIcon"
VerticalAlignment="Center"
Content="Homepage"
NavigateUri="https://irihi.tech">
<HyperlinkButton.Styles>
<Style Selector=".WithIcon /template/ PathIcon">
<Setter Property="Data" Value="{StaticResource SemiIconHome}" />
</Style>
</HyperlinkButton.Styles>
</HyperlinkButton>
</StackPanel>
<StackPanel Orientation="Horizontal">
<HyperlinkButton
Classes="WithIcon"
Content="GitHub"
NavigateUri="https://github.com/irihitech">
<HyperlinkButton.Styles>
<Style Selector=".WithIcon /template/ PathIcon">
<Setter Property="Data" Value="{StaticResource SemiIconGithubLogo}" />
</Style>
</HyperlinkButton.Styles>
</HyperlinkButton>
</StackPanel>
</StackPanel>
</Grid>
</UserControl>

View File

@@ -0,0 +1,24 @@
using Avalonia.Controls;
using Avalonia.Interactivity;
using Semi.Avalonia.Demo.ViewModels;
namespace Semi.Avalonia.Demo.Pages;
public partial class AboutUs : UserControl
{
public AboutUs()
{
InitializeComponent();
this.DataContext = new AboutUsViewModel();
}
protected override void OnLoaded(RoutedEventArgs e)
{
base.OnLoaded(e);
if (this.DataContext is AboutUsViewModel vm)
{
var launcher = TopLevel.GetTopLevel(this)?.Launcher;
vm.Launcher = launcher;
}
}
}

View File

@@ -3,15 +3,15 @@
xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Semi.Avalonia.Demo.Pages"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:vm="clr-namespace:Semi.Avalonia.Demo.ViewModels"
d:DesignHeight="450"
d:DesignWidth="800"
x:CompileBindings="False"
x:DataType="local:AutoCompleteBoxDemoViewModel"
x:DataType="vm:AutoCompleteBoxDemoViewModel"
mc:Ignorable="d">
<Design.DataContext>
<local:AutoCompleteBoxDemoViewModel />
<vm:AutoCompleteBoxDemoViewModel />
</Design.DataContext>
<StackPanel HorizontalAlignment="Left" Spacing="20">
<StackPanel.Styles>
@@ -21,7 +21,7 @@
<Binding Path="States" />
</Setter>
<Setter Property="ItemTemplate">
<DataTemplate DataType="local:StateData">
<DataTemplate DataType="vm:StateData">
<TextBlock Text="{Binding Name}" />
</DataTemplate>
</Setter>

View File

@@ -1,9 +1,5 @@
using System.Collections.ObjectModel;
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
using System.Collections.Generic;
using CommunityToolkit.Mvvm.ComponentModel;
using Semi.Avalonia.Demo.ViewModels;
namespace Semi.Avalonia.Demo.Pages;
@@ -14,86 +10,4 @@ public partial class AutoCompleteBoxDemo : UserControl
InitializeComponent();
this.DataContext = new AutoCompleteBoxDemoViewModel();
}
}
public class AutoCompleteBoxDemoViewModel: ObservableObject
{
public ObservableCollection<StateData> States { get; set; }
public AutoCompleteBoxDemoViewModel()
{
States = new ObservableCollection<StateData>(GetStates());
}
private static List<StateData> GetStates()
{
return new List<StateData>
{
new StateData("Alabama", "AL", "Montgomery"),
new StateData("Alaska", "AK", "Juneau"),
new StateData("Arizona", "AZ", "Phoenix"),
new StateData("Arkansas", "AR", "Little Rock"),
new StateData("California", "CA", "Sacramento"),
new StateData("Colorado", "CO", "Denver"),
new StateData("Connecticut", "CT", "Hartford"),
new StateData("Delaware", "DE", "Dover"),
new StateData("Florida", "FL", "Tallahassee"),
new StateData("Georgia", "GA", "Atlanta"),
new StateData("Hawaii", "HI", "Honolulu"),
new StateData("Idaho", "ID", "Boise"),
new StateData("Illinois", "IL", "Springfield"),
new StateData("Indiana", "IN", "Indianapolis"),
new StateData("Iowa", "IA", "Des Moines"),
new StateData("Kansas", "KS", "Topeka"),
new StateData("Kentucky", "KY", "Frankfort"),
new StateData("Louisiana", "LA", "Baton Rouge"),
new StateData("Maine", "ME", "Augusta"),
new StateData("Maryland", "MD", "Annapolis"),
new StateData("Massachusetts", "MA", "Boston"),
new StateData("Michigan", "MI", "Lansing"),
new StateData("Minnesota", "MN", "St. Paul"),
new StateData("Mississippi", "MS", "Jackson"),
new StateData("Missouri", "MO", "Jefferson City"),
new StateData("Montana", "MT", "Helena"),
new StateData("Nebraska", "NE", "Lincoln"),
new StateData("Nevada", "NV", "Carson City"),
new StateData("New Hampshire", "NH", "Concord"),
new StateData("New Jersey", "NJ", "Trenton"),
new StateData("New Mexico", "NM", "Santa Fe"),
new StateData("New York", "NY", "Albany"),
new StateData("North Carolina", "NC", "Raleigh"),
new StateData("North Dakota", "ND", "Bismarck"),
new StateData("Ohio", "OH", "Columbus"),
new StateData("Oklahoma", "OK", "Oklahoma City"),
new StateData("Oregon", "OR", "Salem"),
new StateData("Pennsylvania", "PA", "Harrisburg"),
new StateData("Rhode Island", "RI", "Providence"),
new StateData("South Carolina", "SC", "Columbia"),
new StateData("South Dakota", "SD", "Pierre"),
new StateData("Tennessee", "TN", "Nashville"),
new StateData("Texas", "TX", "Austin"),
new StateData("Utah", "UT", "Salt Lake City"),
new StateData("Vermont", "VT", "Montpelier"),
new StateData("Virginia", "VA", "Richmond"),
new StateData("Washington", "WA", "Olympia"),
new StateData("West Virginia", "WV", "Charleston"),
new StateData("Wisconsin", "WI", "Madison"),
new StateData("Wyoming", "WY", "Cheyenne"),
};
}
}
public class StateData
{
public string Name { get; private set; }
public string Abbreviation { get; private set; }
public string Capital { get; private set; }
public StateData(string name, string abbreviation, string capital)
{
Name = name;
Abbreviation = abbreviation;
Capital = capital;
}
}

View File

@@ -18,4 +18,4 @@
<TextBlock>Shadow on Pointerover</TextBlock>
</Border>
</StackPanel>
</UserControl>
</UserControl>

View File

@@ -1,6 +1,4 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
namespace Semi.Avalonia.Demo.Pages;

View File

@@ -112,14 +112,14 @@
IsEnabled="False" />
</StackPanel>
<StackPanel Orientation="Horizontal" Spacing="8">
<DropDownButton Content="Default" Classes="Success"/>
<DropDownButton Content="Solid" Theme="{DynamicResource SolidDropDownButton}" Classes="Success"/>
<DropDownButton Content="Outline" Theme="{DynamicResource OutlineDropDownButton}" Classes="Success"/>
<DropDownButton Content="Borderless" Theme="{DynamicResource BorderlessDropDownButton}" Classes="Success"/>
<DropDownButton Content="Default" Classes="Success" IsEnabled="False"/>
<DropDownButton Content="Solid" Theme="{DynamicResource SolidDropDownButton}" Classes="Success" IsEnabled="False"/>
<DropDownButton Content="Outline" Theme="{DynamicResource OutlineDropDownButton}" Classes="Success" IsEnabled="False"/>
<DropDownButton Content="Borderless" Theme="{DynamicResource BorderlessDropDownButton}" Classes="Success" IsEnabled="False"/>
<DropDownButton Content="Default" Classes="Success" />
<DropDownButton Content="Solid" Theme="{DynamicResource SolidDropDownButton}" Classes="Success" />
<DropDownButton Content="Outline" Theme="{DynamicResource OutlineDropDownButton}" Classes="Success" />
<DropDownButton Content="Borderless" Theme="{DynamicResource BorderlessDropDownButton}" Classes="Success" />
<DropDownButton Content="Default" Classes="Success" IsEnabled="False" />
<DropDownButton Content="Solid" Theme="{DynamicResource SolidDropDownButton}" Classes="Success" IsEnabled="False" />
<DropDownButton Content="Outline" Theme="{DynamicResource OutlineDropDownButton}" Classes="Success" IsEnabled="False" />
<DropDownButton Content="Borderless" Theme="{DynamicResource BorderlessDropDownButton}" Classes="Success" IsEnabled="False" />
</StackPanel>
<StackPanel Orientation="Horizontal" Spacing="8">
<DropDownButton Classes="Small" Content="Small" />
@@ -139,7 +139,7 @@
</StackPanel>
<StackPanel Orientation="Horizontal" Spacing="8">
<SplitButton Content="Default" Classes="Success" />
<SplitButton Content="Solid" Theme="{DynamicResource SolidSplitButton}" Classes="Success" />
<SplitButton Content="Solid" Theme="{DynamicResource SolidSplitButton}" Classes="Success" />
<SplitButton Content="Outline" Theme="{DynamicResource OutlineSplitButton}" Classes="Success" />
<SplitButton Content="Borderless" Theme="{DynamicResource BorderlessSplitButton}" Classes="Success" />
<SplitButton Content="Default" Classes="Success" IsEnabled="False" />
@@ -165,7 +165,7 @@
</StackPanel>
<StackPanel Orientation="Horizontal" Spacing="8">
<ToggleSplitButton Content="Default" Classes="Success" />
<ToggleSplitButton Content="Checked" Classes="Success" IsChecked="True" />
<ToggleSplitButton Content="Checked" Classes="Success" IsChecked="True" />
<ToggleSplitButton Content="Default" Classes="Success" IsEnabled="False" />
<ToggleSplitButton Content="Checked" Classes="Success" IsChecked="True" IsEnabled="False" />
</StackPanel>

View File

@@ -1,6 +1,4 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
namespace Semi.Avalonia.Demo.Pages;

View File

@@ -32,4 +32,4 @@
Text="A.S.I.A" />
</ButtonSpinner>
</StackPanel>
</UserControl>
</UserControl>

View File

@@ -1,7 +1,5 @@
using System;
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
namespace Semi.Avalonia.Demo.Pages;
@@ -31,7 +29,6 @@ public partial class ButtonSpinnerDemo : UserControl
txtBox.Text = _mountains[value];
}
}
private readonly string[] _mountains = new[]

View File

@@ -1,6 +1,4 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
namespace Semi.Avalonia.Demo.Pages;

View File

@@ -11,4 +11,4 @@
<Calendar />
<Calendar SelectionMode="SingleRange" />
</StackPanel>
</UserControl>
</UserControl>

View File

@@ -1,6 +1,4 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
namespace Semi.Avalonia.Demo.Pages;
@@ -10,9 +8,4 @@ public partial class CalendarDemo : UserControl
{
InitializeComponent();
}
private void InitializeComponent()
{
AvaloniaXamlLoader.Load(this);
}
}

View File

@@ -1,7 +1,4 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Interactivity;
using Avalonia.Markup.Xaml;
namespace Semi.Avalonia.Demo.Pages;

View File

@@ -1,6 +1,4 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
namespace Semi.Avalonia.Demo.Pages;

View File

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

View File

@@ -1,6 +1,4 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
namespace Semi.Avalonia.Demo.Pages;

View File

@@ -4,12 +4,12 @@
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:pages="clr-namespace:Semi.Avalonia.Demo.Pages"
xmlns:vm="clr-namespace:Semi.Avalonia.Demo.ViewModels"
d:DesignHeight="800"
d:DesignWidth="800"
mc:Ignorable="d">
<Design.DataContext>
<pages:ComboBoxDemoViewModel />
<vm:ComboBoxDemoViewModel />
</Design.DataContext>
<StackPanel Spacing="20">
<StackPanel.Styles>
@@ -28,13 +28,13 @@
<ComboBox Classes="Bordered" />
<ComboBox Classes="Bordered" IsEnabled="False" />
<ComboBox>
<ComboBox.SelectionBoxItemTemplate>
<DataTemplate DataType="x:String">
<ContentControl BorderThickness="1"
BorderBrush="Gold"
Content="{Binding}" />
</DataTemplate>
</ComboBox.SelectionBoxItemTemplate>
<ComboBox.SelectionBoxItemTemplate>
<DataTemplate DataType="x:String">
<ContentControl BorderThickness="1"
BorderBrush="Gold"
Content="{Binding}" />
</DataTemplate>
</ComboBox.SelectionBoxItemTemplate>
</ComboBox>
<StackPanel Orientation="Horizontal">
@@ -49,4 +49,4 @@
<ComboBox Width="100" Classes="Bordered" IsEnabled="False" />
</StackPanel>
</StackPanel>
</UserControl>
</UserControl>

View File

@@ -1,6 +1,5 @@
using System.Collections.ObjectModel;
using Avalonia.Controls;
using CommunityToolkit.Mvvm.ComponentModel;
using Semi.Avalonia.Demo.ViewModels;
namespace Semi.Avalonia.Demo.Pages;
@@ -11,9 +10,4 @@ public partial class ComboBoxDemo : UserControl
InitializeComponent();
this.DataContext = new ComboBoxDemoViewModel();
}
}
public class ComboBoxDemoViewModel : ObservableObject
{
public ObservableCollection<string> Items { get; set; } = ["Ding", "Otter", "Husky", "Mr.17", "Cass"];
}

View File

@@ -3,7 +3,6 @@
xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
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:vm="clr-namespace:Semi.Avalonia.Demo.ViewModels;assembly=Semi.Avalonia.Demo"
d:DesignHeight="450"
@@ -13,52 +12,54 @@
mc:Ignorable="d">
<TabControl>
<TabItem Header="DataGrid">
<Grid RowDefinitions="Auto, *">
<StackPanel Grid.Row="0" Orientation="Horizontal">
<ToggleSwitch Content="Disable" Name="DisableToggle" />
<ToggleSwitch Content="ScrollViewerHide" Name="ScrollViewerHide" />
</StackPanel>
<DataGrid Grid.Row="1"
Margin="8"
CanUserReorderColumns="True"
CanUserResizeColumns="True"
CanUserSortColumns="True"
HeadersVisibility="All"
IsReadOnly="True"
ScrollViewer.AllowAutoHide="{Binding #ScrollViewerHide.IsChecked}"
IsEnabled="{Binding #DisableToggle.IsChecked}"
ItemsSource="{Binding GridData1}">
<DataGrid.Columns>
<DataGridTextColumn
Width="6*"
x:DataType="vm:Song"
Binding="{Binding Title}"
Header="Title" />
<DataGridTextColumn
Width="6*"
x:DataType="vm:Song"
Binding="{Binding Artist}"
Header="Artist" />
<DataGridTextColumn
Width="6*"
x:DataType="vm:Song"
Binding="{Binding Album}"
Header="Album" />
<DataGridTemplateColumn Header="Duration" SortMemberPath="Duration">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock
Margin="8,0,0,0"
VerticalAlignment="Center"
Text="{Binding Duration}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
<Grid RowDefinitions="Auto, *">
<StackPanel Grid.Row="0" Orientation="Horizontal">
<ToggleSwitch Content="Enable" Name="enable" IsChecked="True" />
<ToggleSwitch Content="Inset Content" Name="inset" />
<ToggleSwitch Content="ScrollBar Auto Hide" Name="autohide" />
</StackPanel>
<DataGrid Grid.Row="1"
Margin="8"
CanUserReorderColumns="True"
CanUserResizeColumns="True"
CanUserSortColumns="True"
HeadersVisibility="All"
IsReadOnly="True"
Classes.InsetContent="{Binding #inset.IsChecked}"
ScrollViewer.AllowAutoHide="{Binding #autohide.IsChecked}"
IsEnabled="{Binding #enable.IsChecked}"
ItemsSource="{Binding GridData1}">
<DataGrid.Columns>
<DataGridTextColumn
Width="6*"
x:DataType="vm:Song"
Binding="{Binding Title}"
Header="Title" />
<DataGridTextColumn
Width="6*"
x:DataType="vm:Song"
Binding="{Binding Artist}"
Header="Artist" />
<DataGridTextColumn
Width="6*"
x:DataType="vm:Song"
Binding="{Binding Album}"
Header="Album" />
<DataGridTemplateColumn Header="Duration" SortMemberPath="Duration">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock
Margin="8,0,0,0"
VerticalAlignment="Center"
Text="{Binding Duration}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
</DataGrid>
</Grid>
</TabItem>
<TabItem Header="Grouping">
<DataGrid
@@ -176,4 +177,4 @@
</Grid>
</TabItem>
</TabControl>
</UserControl>
</UserControl>

View File

@@ -1,18 +1,4 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using Avalonia;
using Avalonia.Collections;
using Avalonia.Controls;
using Avalonia.Controls.Primitives;
using Avalonia.Data;
using Avalonia.Input;
using Avalonia.Input.Raw;
using Avalonia.Markup.Xaml;
using Avalonia.Threading;
using Semi.Avalonia.Demo.ViewModels;
namespace Semi.Avalonia.Demo.Pages;

View File

@@ -80,4 +80,4 @@
</TextBox>
</StackPanel>
</ScrollViewer>
</UserControl>
</UserControl>

View File

@@ -1,6 +1,4 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
namespace Semi.Avalonia.Demo.Pages;
@@ -10,9 +8,4 @@ public partial class DataValidationErrorsDemo : UserControl
{
InitializeComponent();
}
private void InitializeComponent()
{
AvaloniaXamlLoader.Load(this);
}
}

View File

@@ -26,4 +26,4 @@
</StackPanel>
</StackPanel>
</UserControl>
</UserControl>

View File

@@ -1,7 +1,4 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
using Avalonia.Media;
namespace Semi.Avalonia.Demo.Pages;
@@ -11,14 +8,4 @@ public partial class DatePickerDemo : UserControl
{
InitializeComponent();
}
private void InitializeComponent()
{
AvaloniaXamlLoader.Load(this);
}
public override void Render(DrawingContext context)
{
base.Render(context);
}
}

View File

@@ -1,6 +1,4 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
namespace Semi.Avalonia.Demo.Pages;

View File

@@ -1,7 +1,4 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.LogicalTree;
using Avalonia.Markup.Xaml;
namespace Semi.Avalonia.Demo.Pages;

View File

@@ -39,4 +39,4 @@
CornerRadius="10" />
</Grid>
</StackPanel>
</UserControl>
</UserControl>

View File

@@ -1,5 +1,4 @@
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
namespace Semi.Avalonia.Demo.Pages;
@@ -9,9 +8,4 @@ public partial class GridSplitterDemo : UserControl
{
InitializeComponent();
}
private void InitializeComponent()
{
AvaloniaXamlLoader.Load(this);
}
}

View File

@@ -1,7 +1,4 @@
using System;
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
namespace Semi.Avalonia.Demo.Pages;

View File

@@ -31,7 +31,7 @@
VerticalAlignment="Top"
ColumnDefinitions="Auto, *"
RowDefinitions="*,*,*,*,*,*,*,*,*,*,*">
<TextBlock Grid.Row="0" Grid.Column="0">Classes</TextBlock>
<TextBlock Grid.Row="0" Grid.Column="0">Classes</TextBlock>
<TextBlock Grid.Row="1" Grid.Column="0">-</TextBlock>
<TextBlock Grid.Row="2" Grid.Column="0">Secondary</TextBlock>
<TextBlock Grid.Row="3" Grid.Column="0">Tertiary</TextBlock>
@@ -221,4 +221,4 @@
</WrapPanel>
</StackPanel>
</ScrollViewer>
</UserControl>
</UserControl>

View File

@@ -1,6 +1,4 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
namespace Semi.Avalonia.Demo.Pages;

View File

@@ -16,7 +16,7 @@
Header="Default">
<ScrollViewer>
<StackPanel Spacing="20">
<TextBlock Text="Theme: Default"/>
<TextBlock Text="Theme: Default" />
<ListBox ItemsSource="{Binding $parent[local:ListBoxDemo].Items}" />
<ListBox IsEnabled="False">
<ListBoxItem IsSelected="True">Avalonia</ListBoxItem>
@@ -31,7 +31,7 @@
Theme="{DynamicResource GroupBox}"
Header="RadioGroupListBox">
<StackPanel Spacing="20">
<TextBlock Text="Theme: RadioGroupListBox"/>
<TextBlock Text="Theme: RadioGroupListBox" />
<ListBox
Theme="{DynamicResource RadioGroupListBox}"
ItemsSource="{Binding $parent[local:ListBoxDemo].Items}" />
@@ -40,7 +40,7 @@
<ListBoxItem IsSelected="True">WPF</ListBoxItem>
</ListBox>
<TextBlock Text="Theme: ButtonRadioGroupListBox"/>
<TextBlock Text="Theme: ButtonRadioGroupListBox" />
<StackPanel Orientation="Horizontal">
<Border HorizontalAlignment="Left" Theme="{StaticResource RadioButtonGroupBorder}">
<ListBox Theme="{DynamicResource ButtonRadioGroupListBox}">
@@ -93,7 +93,7 @@
</Border>
</StackPanel>
<TextBlock Text="Theme: CardRadioGroupListBox"/>
<TextBlock Text="Theme: CardRadioGroupListBox" />
<ListBox Theme="{DynamicResource CardRadioGroupListBox}"
ItemsSource="{Binding $parent[local:ListBoxDemo].Items}" />
<ListBox Theme="{DynamicResource CardRadioGroupListBox}" IsEnabled="False">
@@ -101,7 +101,7 @@
<ListBoxItem>WPF</ListBoxItem>
</ListBox>
<TextBlock Text="Theme: PureCardRadioGroupListBox"/>
<TextBlock Text="Theme: PureCardRadioGroupListBox" />
<ListBox Theme="{DynamicResource PureCardRadioGroupListBox}"
ItemsSource="{Binding $parent[local:ListBoxDemo].Items}" />
<ListBox Theme="{DynamicResource PureCardRadioGroupListBox}" IsEnabled="False">
@@ -117,7 +117,7 @@
Header="CheckGroupListBox">
<ScrollViewer>
<StackPanel Spacing="20">
<TextBlock Text="Theme: CheckGroupListBox"/>
<TextBlock Text="Theme: CheckGroupListBox" />
<ListBox
SelectionMode="Multiple,Toggle"
Theme="{DynamicResource CheckGroupListBox}"
@@ -129,7 +129,7 @@
<ListBoxItem>WPF</ListBoxItem>
</ListBox>
<TextBlock Text="Theme: CardCheckGroupListBox"/>
<TextBlock Text="Theme: CardCheckGroupListBox" />
<ListBox
SelectionMode="Multiple,Toggle"
Theme="{DynamicResource CardCheckGroupListBox}"

View File

@@ -17,4 +17,4 @@
<Button Name="SelectFolderButton" Content="Select Folder" />
<Button Name="SaveFileButton" Content="Save File" />
</StackPanel>
</UserControl>
</UserControl>

View File

@@ -145,4 +145,4 @@
<TextBlock Text="Right Click to show Context Flyout" />
</Border>
</StackPanel>
</UserControl>
</UserControl>

View File

@@ -1,6 +1,4 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
namespace Semi.Avalonia.Demo.Pages;
@@ -11,8 +9,4 @@ public partial class MenuDemo : UserControl
InitializeComponent();
}
private void InitializeComponent()
{
AvaloniaXamlLoader.Load(this);
}
}

View File

@@ -1,6 +1,4 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
namespace Semi.Avalonia.Demo.Pages;
@@ -11,8 +9,4 @@ public partial class NumericUpDownDemo : UserControl
InitializeComponent();
}
private void InitializeComponent()
{
AvaloniaXamlLoader.Load(this);
}
}

View File

@@ -41,9 +41,9 @@
<Image.Source>
<DrawingImage>
<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="#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="#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="#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="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="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>
</DrawingImage>
</Image.Source>
@@ -234,7 +234,7 @@
VerticalAlignment="Top"
Palette="{DynamicResource SemiColorPalette}"
SelectedIndex="2"
Color="#8B44AC" />
Color="#0D6EFD" />
<StackPanel Width="300" Margin="8">
<StackPanel Orientation="Horizontal">
<Slider
@@ -348,7 +348,7 @@
Classes="H5"
Text="Start to install"
Theme="{DynamicResource TitleTextBlock}" />
<TabControl Padding="8">
<TabControl Theme="{StaticResource LineTabControl}">
<TabItem Header="Main">
<StackPanel>
<TextBlock Text="Install via nuget: " />
@@ -409,6 +409,51 @@
</Border>
</StackPanel>
</TabItem>
<TabItem Header="Dock">
<StackPanel>
<TextBlock Text="Install via nuget: " />
<Border Margin="0,16" Classes="CodeBlock">
<SelectableTextBlock FontFamily="Consolas" Text="{Binding $parent[local:Overview].DockInstall}" />
</Border>
<TextBlock Text="Reference styles: " />
<Border Margin="0,16" Classes="CodeBlock">
<SelectableTextBlock
FontFamily="Consolas"
Text="{Binding $parent[local:Overview].DockStyle}"
TextWrapping="Wrap" />
</Border>
</StackPanel>
</TabItem>
<TabItem Header="Tabalonia">
<StackPanel>
<TextBlock Text="Install via nuget: " />
<Border Margin="0,16" Classes="CodeBlock">
<SelectableTextBlock FontFamily="Consolas" Text="{Binding $parent[local:Overview].TabaloniaInstall}" />
</Border>
<TextBlock Text="Reference styles: " />
<Border Margin="0,16" Classes="CodeBlock">
<SelectableTextBlock
FontFamily="Consolas"
Text="{Binding $parent[local:Overview].TabaloniaStyle}"
TextWrapping="Wrap" />
</Border>
</StackPanel>
</TabItem>
<TabItem Header="AvaloniaEdit">
<StackPanel>
<TextBlock Text="Install via nuget: " />
<Border Margin="0,16" Classes="CodeBlock">
<SelectableTextBlock FontFamily="Consolas" Text="{Binding $parent[local:Overview].AvaloniaEditInstall}" />
</Border>
<TextBlock Text="Reference styles: " />
<Border Margin="0,16" Classes="CodeBlock">
<SelectableTextBlock
FontFamily="Consolas"
Text="{Binding $parent[local:Overview].AvaloniaEditStyle}"
TextWrapping="Wrap" />
</Border>
</StackPanel>
</TabItem>
</TabControl>
</StackPanel>
</StackPanel>

View File

@@ -9,41 +9,66 @@ public partial class Overview : UserControl
InitializeComponent();
}
public string MainInstall { get; set; } = "dotnet add package Semi.Avalonia --version 11.2.1.5";
public string MainInstall { get; set; } = "dotnet add package Semi.Avalonia --version 11.2.1.9";
public string MainStyle { get; set; } =
"""
<Application.Styles>
<!-- You can still reference in old way. -->
<!-- <StyleInclude Source="avares://Semi.Avalonia/Index.axaml" /> -->
<semi:SemiTheme Locale="zh-CN" />
</Application.Styles>
""";
public string ColorPickerInstall { get; set; } = "dotnet add package Semi.Avalonia.ColorPicker --version 11.2.1.5";
public string ColorPickerInstall { get; set; } = "dotnet add package Semi.Avalonia.ColorPicker --version 11.2.1.9";
public string ColorPickerStyle { get; set; } =
"""
<Application.Styles>
<StyleInclude Source="avares://Semi.Avalonia.ColorPicker/Index.axaml" />
<semi:ColorPickerSemiTheme />
</Application.Styles>
""";
public string DataGridInstall { get; set; } = "dotnet add package Semi.Avalonia.DataGrid --version 11.2.1.5";
public string DataGridInstall { get; set; } = "dotnet add package Semi.Avalonia.DataGrid --version 11.2.1.9";
public string DataGridStyle { get; set; } =
"""
<Application.Styles>
<StyleInclude Source="avares://Semi.Avalonia.DataGrid/Index.axaml" />
<semi:DataGridSemiTheme />
</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.4";
public string TreeDataGridStyle { get; set; } =
"""
<Application.Styles>
<StyleInclude Source="avares://Semi.Avalonia.TreeDataGrid/Index.axaml" />
<semi:TreeDataGridSemiTheme />
</Application.Styles>
""";
public string DockInstall { get; set; } = "dotnet add package Semi.Avalonia.Dock --version 11.3.0";
public string DockStyle { get; set; } =
"""
<Application.Styles>
<semi:DockSemiTheme />
</Application.Styles>
""";
public string TabaloniaInstall { get; set; } = "dotnet add package Semi.Avalonia.Tabalonia --version 11.0.0-beta1";
public string TabaloniaStyle { get; set; } =
"""
<Application.Styles>
<semi:TabaloniaSemiTheme />
</Application.Styles>
""";
public string AvaloniaEditInstall { get; set; } = "dotnet add package Semi.Avalonia.AvaloniaEdit --version 11.2.0";
public string AvaloniaEditStyle { get; set; } =
"""
<Application.Styles>
<semi:AvaloniaEditSemiTheme />
</Application.Styles>
""";
}

View File

@@ -1,6 +1,4 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
using Avalonia.Controls;
namespace Semi.Avalonia.Demo.Pages;

View File

@@ -20,15 +20,16 @@
Minimum="{Binding #slider.Minimum}"
Theme="{DynamicResource ProgressRing}"
Value="{Binding #slider.Value}"
ShowProgressText="True"/>
ShowProgressText="True" />
<ProgressBar
Width="100"
Height="100"
IsIndeterminate="True"
BorderThickness="16"
Maximum="{Binding #slider.Maximum}"
Minimum="{Binding #slider.Minimum}"
Theme="{DynamicResource ProgressRing}"
ShowProgressText="True"/>
ShowProgressText="True" />
</StackPanel>
<Slider
Name="slider"

View File

@@ -1,6 +1,4 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
namespace Semi.Avalonia.Demo.Pages;
@@ -10,9 +8,4 @@ public partial class ProgressBarDemo : UserControl
{
InitializeComponent();
}
private void InitializeComponent()
{
AvaloniaXamlLoader.Load(this);
}
}

View File

@@ -1,6 +1,4 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
namespace Semi.Avalonia.Demo.Pages;

View File

@@ -4,10 +4,10 @@
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:pages="clr-namespace:Semi.Avalonia.Demo.Pages"
xmlns:vm="clr-namespace:Semi.Avalonia.Demo.ViewModels"
d:DesignHeight="450"
d:DesignWidth="800"
x:DataType="pages:RefreshContainerDemoViewModel"
x:DataType="vm:RefreshContainerDemoViewModel"
x:CompileBindings="True"
mc:Ignorable="d">
<DockPanel HorizontalAlignment="Stretch" VerticalAlignment="Top">
@@ -24,4 +24,4 @@
ItemsSource="{Binding Items}" />
</RefreshContainer>
</DockPanel>
</UserControl>
</UserControl>

View File

@@ -1,8 +1,5 @@
using System.Collections.ObjectModel;
using System.Linq;
using System.Threading.Tasks;
using Avalonia.Controls;
using CommunityToolkit.Mvvm.ComponentModel;
using Semi.Avalonia.Demo.ViewModels;
namespace Semi.Avalonia.Demo.Pages;
@@ -13,34 +10,14 @@ public partial class RefreshContainerDemo : UserControl
public RefreshContainerDemo()
{
InitializeComponent();
_viewModel = new RefreshContainerDemoViewModel();
DataContext = _viewModel;
}
private async void RefreshContainerPage_RefreshRequested(object? sender, RefreshRequestedEventArgs e)
{
var deferral = e.GetDeferral();
await _viewModel.AddToTop();
deferral.Complete();
}
}
public class RefreshContainerDemoViewModel : ObservableObject
{
public ObservableCollection<string> Items { get; }
public RefreshContainerDemoViewModel()
{
Items = new ObservableCollection<string>(Enumerable.Range(1, 200).Select(i => $"Item {i}"));
}
public async Task AddToTop()
{
await Task.Delay(1000);
Items.Insert(0, $"Item {200 - Items.Count}");
}
}

View File

@@ -1,6 +1,4 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
namespace Semi.Avalonia.Demo.Pages;

View File

@@ -9,66 +9,22 @@
mc:Ignorable="d">
<ScrollViewer>
<StackPanel HorizontalAlignment="Left" Spacing="20">
<ToggleSwitch Name="inset" Content="Inset Content" />
<ToggleSwitch Name="autohide" Content="Allow AutoHide" />
<ScrollViewer
Width="200"
Height="200"
Margin="10"
Width="200" Height="200"
AllowAutoHide="{Binding #autohide.IsChecked}"
Classes.InsetContent="{Binding #inset.IsChecked}"
HorizontalScrollBarVisibility="Auto">
<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
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>
<UniformGrid
Rows="2" Columns="2"
Width="300" Height="300">
<Rectangle Fill="{DynamicResource SemiYellow2}" />
<Rectangle Fill="{DynamicResource SemiBlue2}" />
<Rectangle Fill="{DynamicResource SemiPink2}" />
<Rectangle Fill="{DynamicResource SemiGreen2}" />
</UniformGrid>
</ScrollViewer>
</StackPanel>
</ScrollViewer>

View File

@@ -1,6 +1,4 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
namespace Semi.Avalonia.Demo.Pages;
@@ -10,9 +8,4 @@ public partial class ScrollViewerDemo : UserControl
{
InitializeComponent();
}
private void InitializeComponent()
{
AvaloniaXamlLoader.Load(this);
}
}

View File

@@ -165,4 +165,4 @@
</HeaderedContentControl>
</StackPanel>
</ScrollViewer>
</UserControl>
</UserControl>

View File

@@ -1,6 +1,4 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
namespace Semi.Avalonia.Demo.Pages;
@@ -11,8 +9,4 @@ public partial class SelectableTextBlockDemo : UserControl
InitializeComponent();
}
private void InitializeComponent()
{
AvaloniaXamlLoader.Load(this);
}
}

View File

@@ -98,4 +98,4 @@
Value="30" />
</StackPanel>
</StackPanel>
</UserControl>
</UserControl>

View File

@@ -1,6 +1,4 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
namespace Semi.Avalonia.Demo.Pages;
@@ -11,8 +9,4 @@ public partial class SliderDemo : UserControl
InitializeComponent();
}
private void InitializeComponent()
{
AvaloniaXamlLoader.Load(this);
}
}

View File

@@ -4,12 +4,12 @@
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:pages="clr-namespace:Semi.Avalonia.Demo.Pages"
xmlns:vm="clr-namespace:Semi.Avalonia.Demo.ViewModels"
d:DesignHeight="1000"
d:DesignWidth="800"
mc:Ignorable="d">
<Design.DataContext>
<pages:SplitViewDemoViewModel />
<vm:SplitViewDemoViewModel />
</Design.DataContext>
<Border>
<Grid ColumnDefinitions="*,400">
@@ -21,8 +21,7 @@
Content="IsPaneOpen" />
<ToggleSwitch
Grid.Row="0" Grid.Column="1"
Name="PaneOpenButton"
IsChecked="{Binding #SplitView.IsPaneOpen}" />
Name="PaneOpenButton" />
<Label
Grid.Row="1" Grid.Column="0"
@@ -30,8 +29,7 @@
Content="UseLightDismissOverlayMode" />
<ToggleSwitch
Grid.Row="1" Grid.Column="1"
Name="UseLightDismissOverlayModeButton"
IsChecked="{Binding #SplitView.UseLightDismissOverlayMode}" />
Name="UseLightDismissOverlayModeButton" />
<Label
Grid.Row="2" Grid.Column="0"
@@ -39,9 +37,9 @@
Content="Placement" />
<ToggleSwitch
Grid.Row="2" Grid.Column="1"
Name="PanePlacementButton"
OffContent="Left"
OnContent="Right"
IsChecked="{Binding #SplitView.PanePlacement}" />
OnContent="Right" />
<Label
Grid.Row="3" Grid.Column="0"
@@ -51,8 +49,8 @@
Grid.Row="3" Grid.Column="1"
Name="DisplayModeSelector"
HorizontalAlignment="Stretch"
ItemsSource="{Binding DisplayModes}"
SelectedIndex="{Binding #SplitView.DisplayMode}" />
ItemsSource="{x:Static vm:SplitViewDemoViewModel.DisplayModes}"
SelectedItem="{x:Static SplitViewDisplayMode.CompactInline}" />
<Label
Grid.Row="4" Grid.Column="0"
@@ -65,7 +63,7 @@
Minimum="0"
TickFrequency="1"
IsSnapToTickEnabled="True"
Value="{Binding #SplitView.CompactPaneLength}" />
Value="48" />
<Label
Grid.Row="5" Grid.Column="0"
@@ -78,105 +76,207 @@
Minimum="128"
TickFrequency="1"
IsSnapToTickEnabled="True"
Value="{Binding #SplitView.OpenPaneLength}" />
Value="256" />
</Grid>
</Border>
<Border
Grid.Column="0"
BorderBrush="{DynamicResource SemiGrey1}"
BorderThickness="1">
<SplitView
Name="SplitView"
DisplayMode="CompactOverlay"
CompactPaneLength="48"
OpenPaneLength="256">
<SplitView.Background>
<LinearGradientBrush StartPoint="0%,0%" EndPoint="0%,100%">
<GradientStop Color="#6b4c1b" Offset="0" />
<GradientStop Color="#291e10" Offset="1" />
</LinearGradientBrush>
</SplitView.Background>
<SplitView.Pane>
<Grid RowDefinitions="Auto,*,Auto">
<TextBlock
Grid.Row="0"
Name="PaneHeader"
Margin="8,12"
FontWeight="Bold"
Text="Playlist" />
<ListBox
Grid.Row="1"
ItemsSource="{Binding Songs}" />
<ToggleSwitch
Grid.Row="2"
Theme="{DynamicResource IconBorderlessToggleSwitch}"
Content="{StaticResource SemiIconSidebar}"
HorizontalAlignment="Left"
IsChecked="{Binding #SplitView.IsPaneOpen}">
</ToggleSwitch>
</Grid>
</SplitView.Pane>
<Panel>
<Panel.Styles>
<Style Selector="Image#AlbumCover">
<Style.Animations>
<Animation IterationCount="Infinite" Duration="0:0:40">
<KeyFrame Cue="0%">
<Setter Property="RotateTransform.Angle" Value="0" />
</KeyFrame>
<KeyFrame Cue="100%">
<Setter Property="RotateTransform.Angle" Value="360" />
</KeyFrame>
</Animation>
</Style.Animations>
</Style>
</Panel.Styles>
<Image
Source="/Assets/WORLD.png"
Name="AlbumCover"
Width="200"
Height="200" />
<Arc
Width="290"
Height="290"
StartAngle="0"
SweepAngle="360"
StrokeJoin="Round"
StrokeLineCap="Round"
StrokeThickness="45">
<Arc.Stroke>
<LinearGradientBrush StartPoint="0%,0%" EndPoint="100%,0%">
<GradientStop Color="#010101" Offset="0" />
<GradientStop Color="#363636" Offset="0.5" />
<GradientStop Color="#010101" Offset="1" />
<TabControl Grid.Column="0">
<TabItem Header="Default">
<Border
BorderBrush="{DynamicResource SemiGrey1}"
BorderThickness="1">
<SplitView
Name="SplitView"
IsPaneOpen="{Binding #PaneOpenButton.IsChecked,Mode=TwoWay}"
UseLightDismissOverlayMode="{Binding #UseLightDismissOverlayModeButton.IsChecked}"
PanePlacement="{Binding #PanePlacementButton.IsChecked}"
DisplayMode="{Binding #DisplayModeSelector.SelectedItem}"
CompactPaneLength="{Binding #CompactPaneLengthSlider.Value}"
OpenPaneLength="{Binding #OpenPaneLengthSlider.Value}">
<SplitView.Background>
<LinearGradientBrush StartPoint="0%,0%" EndPoint="0%,100%">
<GradientStop Color="#6b4c1b" Offset="0" />
<GradientStop Color="#291e10" Offset="1" />
</LinearGradientBrush>
</Arc.Stroke>
</Arc>
<Arc
Width="294"
Height="294"
StartAngle="0"
SweepAngle="360"
StrokeJoin="Round"
StrokeLineCap="Round"
StrokeThickness="4"
Stroke="Black" />
<Arc
Width="310"
Height="310"
StartAngle="0"
SweepAngle="360"
StrokeJoin="Round"
StrokeLineCap="Round"
StrokeThickness="10"
Stroke="#C6CACD"
Opacity="0.1" />
</Panel>
</SplitView.Background>
<SplitView.Pane>
<Grid RowDefinitions="Auto,*,Auto">
<TextBlock
Grid.Row="0"
Name="PaneHeader"
Margin="8,12"
FontWeight="Bold"
Text="Playlist" />
<ListBox
Grid.Row="1"
ItemsSource="{Binding Songs}" />
<ToggleSwitch
Grid.Row="2"
Theme="{DynamicResource IconBorderlessToggleSwitch}"
Content="{StaticResource SemiIconSidebar}"
HorizontalAlignment="Left"
IsChecked="{Binding #SplitView.IsPaneOpen}" />
</Grid>
</SplitView.Pane>
</SplitView>
</Border>
<Panel>
<Panel.Styles>
<Style Selector="Image#AlbumCover">
<Style.Animations>
<Animation IterationCount="Infinite" Duration="0:0:40">
<KeyFrame Cue="0%">
<Setter Property="RotateTransform.Angle" Value="0" />
</KeyFrame>
<KeyFrame Cue="100%">
<Setter Property="RotateTransform.Angle" Value="360" />
</KeyFrame>
</Animation>
</Style.Animations>
</Style>
</Panel.Styles>
<Image
Source="/Assets/WORLD.png"
Name="AlbumCover"
Width="200"
Height="200" />
<Arc
Width="290"
Height="290"
StartAngle="0"
SweepAngle="360"
StrokeJoin="Round"
StrokeLineCap="Round"
StrokeThickness="45">
<Arc.Stroke>
<LinearGradientBrush StartPoint="0%,0%" EndPoint="100%,0%">
<GradientStop Color="#010101" Offset="0" />
<GradientStop Color="#363636" Offset="0.5" />
<GradientStop Color="#010101" Offset="1" />
</LinearGradientBrush>
</Arc.Stroke>
</Arc>
<Arc
Width="294"
Height="294"
StartAngle="0"
SweepAngle="360"
StrokeJoin="Round"
StrokeLineCap="Round"
StrokeThickness="4"
Stroke="Black" />
<Arc
Width="310"
Height="310"
StartAngle="0"
SweepAngle="360"
StrokeJoin="Round"
StrokeLineCap="Round"
StrokeThickness="10"
Stroke="#C6CACD"
Opacity="0.1" />
</Panel>
</SplitView>
</Border>
</TabItem>
<TabItem Header="VerticalSplitView">
<Border
BorderBrush="{DynamicResource SemiGrey1}"
BorderThickness="1">
<SplitView
Name="SplitView2"
Theme="{DynamicResource VerticalSplitView}"
IsPaneOpen="{Binding #PaneOpenButton.IsChecked,Mode=TwoWay}"
UseLightDismissOverlayMode="{Binding #UseLightDismissOverlayModeButton.IsChecked}"
PanePlacement="{Binding #PanePlacementButton.IsChecked}"
DisplayMode="{Binding #DisplayModeSelector.SelectedItem}"
CompactPaneLength="{Binding #CompactPaneLengthSlider.Value}"
OpenPaneLength="{Binding #OpenPaneLengthSlider.Value}">
<SplitView.Background>
<LinearGradientBrush StartPoint="0%,0%" EndPoint="0%,100%">
<GradientStop Color="#6b4c1b" Offset="0" />
<GradientStop Color="#291e10" Offset="1" />
</LinearGradientBrush>
</SplitView.Background>
<SplitView.Pane>
<Grid RowDefinitions="Auto,Auto,*">
<ToggleSwitch
Grid.Row="0"
Theme="{DynamicResource IconBorderlessToggleSwitch}"
Content="{StaticResource SemiIconSidebar}"
HorizontalAlignment="Left"
IsChecked="{Binding #SplitView2.IsPaneOpen}" />
<TextBlock
Grid.Row="1"
Margin="8,12"
FontWeight="Bold"
Text="Playlist" />
<ListBox
Grid.Row="2"
ItemsSource="{Binding Songs}" />
</Grid>
</SplitView.Pane>
<Panel>
<Panel.Styles>
<Style Selector="Image#AlbumCover2">
<Style.Animations>
<Animation IterationCount="Infinite" Duration="0:0:40">
<KeyFrame Cue="0%">
<Setter Property="RotateTransform.Angle" Value="0" />
</KeyFrame>
<KeyFrame Cue="100%">
<Setter Property="RotateTransform.Angle" Value="360" />
</KeyFrame>
</Animation>
</Style.Animations>
</Style>
</Panel.Styles>
<Image
Source="/Assets/WORLD.png"
Name="AlbumCover2"
Width="200"
Height="200" />
<Arc
Width="290"
Height="290"
StartAngle="0"
SweepAngle="360"
StrokeJoin="Round"
StrokeLineCap="Round"
StrokeThickness="45">
<Arc.Stroke>
<LinearGradientBrush StartPoint="0%,0%" EndPoint="100%,0%">
<GradientStop Color="#010101" Offset="0" />
<GradientStop Color="#363636" Offset="0.5" />
<GradientStop Color="#010101" Offset="1" />
</LinearGradientBrush>
</Arc.Stroke>
</Arc>
<Arc
Width="294"
Height="294"
StartAngle="0"
SweepAngle="360"
StrokeJoin="Round"
StrokeLineCap="Round"
StrokeThickness="4"
Stroke="Black" />
<Arc
Width="310"
Height="310"
StartAngle="0"
SweepAngle="360"
StrokeJoin="Round"
StrokeLineCap="Round"
StrokeThickness="10"
Stroke="#C6CACD"
Opacity="0.1" />
</Panel>
</SplitView>
</Border>
</TabItem>
</TabControl>
</Grid>
</Border>
</UserControl>

View File

@@ -1,7 +1,5 @@
using System.Collections.ObjectModel;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
using CommunityToolkit.Mvvm.ComponentModel;
using Semi.Avalonia.Demo.ViewModels;
namespace Semi.Avalonia.Demo.Pages;
@@ -12,33 +10,4 @@ public partial class SplitViewDemo : UserControl
InitializeComponent();
this.DataContext = new SplitViewDemoViewModel();
}
private void InitializeComponent()
{
AvaloniaXamlLoader.Load(this);
}
}
public class SplitViewDemoViewModel : ObservableObject
{
public ObservableCollection<string> Songs { get; set; } =
[
"320万年前",
"隐德来希",
"孔明",
"锦鲤卟噜噜",
"指鹿为马",
"热带季风Remix",
"加州梦境",
"渐近自由",
"世界所有的烂漫",
];
public ObservableCollection<SplitViewDisplayMode> DisplayModes { get; set; } =
[
SplitViewDisplayMode.Inline,
SplitViewDisplayMode.CompactInline,
SplitViewDisplayMode.Overlay,
SplitViewDisplayMode.CompactOverlay,
];
}

View File

@@ -11,85 +11,122 @@
x:DataType="vm:TabControlDemoViewModel"
mc:Ignorable="d">
<ScrollViewer>
<StackPanel Spacing="20">
<Border Theme="{StaticResource CardBorder}">
<TabControl TabStripPlacement="Top">
<TabItem Content="Hello 1" Header="Tab 1" />
<TabItem Content="Hello 2" Header="Tab 2" />
<TabItem Content="Hello 3" Header="Tab 3" />
<TabItem Content="中文内容" Header="中文中文" />
<TabItem
Content="Hello 4"
Header="Tab 4"
IsEnabled="False" />
</TabControl>
</Border>
<Border Theme="{StaticResource CardBorder}">
<TabControl TabStripPlacement="Left">
<TabItem Content="Hello 1" Header="Tab 1" />
<TabItem Content="Hello 2" Header="Tab 2" />
<TabItem Content="Hello 3" Header="Tab 3" />
<TabItem Content="中文内容" Header="中文中文" />
<TabItem
Content="Hello 4"
Header="Tab 4"
IsEnabled="False" />
</TabControl>
</Border>
<Border Theme="{StaticResource CardBorder}">
<TabControl TabStripPlacement="Right">
<TabItem Content="Hello 1" Header="Tab 1" />
<TabItem Content="Hello 2" Header="Tab 2" />
<TabItem Content="Hello 3" Header="Tab 3" />
<TabItem Content="中文内容" Header="中文中文" />
<TabItem
Content="Hello 4"
Header="Tab 4"
IsEnabled="False" />
</TabControl>
</Border>
<Border Theme="{StaticResource CardBorder}">
<TabControl TabStripPlacement="Bottom">
<TabItem Content="Hello 1" Header="Tab 1" />
<TabItem Content="Hello 2" Header="Tab 2" />
<TabItem Content="Hello 3" Header="Tab 3" />
<TabItem Content="中文内容" Header="中文中文" />
<TabItem
Content="Hello 4"
Header="Tab 4"
IsEnabled="False" />
</TabControl>
</Border>
<Border Theme="{StaticResource CardBorder}">
<TabStrip>
<TabStripItem>Tab 1</TabStripItem>
<TabStripItem>Tab 2</TabStripItem>
</TabStrip>
</Border>
<Border Height="300" Theme="{DynamicResource CardBorder}">
<TabControl
ItemsSource="{Binding Items}"
TabStripPlacement="Top"
Theme="{DynamicResource ScrollTabControl}" />
</Border>
<Border Height="300" Theme="{DynamicResource CardBorder}">
<TabControl
ItemsSource="{Binding Items}"
TabStripPlacement="Left"
Theme="{DynamicResource ScrollTabControl}" />
</Border>
<Border Height="300" Theme="{DynamicResource CardBorder}">
<TabControl
ItemsSource="{Binding Items}"
TabStripPlacement="Bottom"
Theme="{DynamicResource ScrollTabControl}" />
</Border>
<Border Height="300" Theme="{DynamicResource CardBorder}">
<TabControl
ItemsSource="{Binding Items}"
TabStripPlacement="Right"
Theme="{DynamicResource ScrollTabControl}" />
<StackPanel>
<Border
Margin="8"
HorizontalAlignment="Left"
Theme="{StaticResource RadioButtonGroupBorder}">
<ListBox Name="place" Theme="{StaticResource ButtonRadioGroupListBox}">
<Dock>Left</Dock>
<Dock>Bottom</Dock>
<Dock>Right</Dock>
<Dock>Top</Dock>
</ListBox>
</Border>
<TabControl Theme="{StaticResource LineTabControl}">
<TabItem Header="Default">
<StackPanel>
<StackPanel
Margin="8"
Orientation="Horizontal"
Spacing="8">
<TextBlock VerticalAlignment="Center" Text="ReverseSeparator" />
<ToggleSwitch Name="reverse" Theme="{StaticResource SimpleToggleSwitch}" />
</StackPanel>
<Border MinHeight="150" Theme="{StaticResource CardBorder}">
<TabControl Classes.ReverseSeparator="{Binding #reverse.IsChecked}" TabStripPlacement="{Binding #place.SelectedValue}">
<TabItem Content="Hello 1" Header="Tab 1" />
<TabItem Content="Hello 2" Header="Tab 2" />
<TabItem Content="Hello 3" Header="Tab 3" />
<TabItem Content="中文内容" Header="中文中文" />
<TabItem
Content="Hello 4"
Header="Tab 4"
IsEnabled="False" />
</TabControl>
</Border>
<Border Height="300" Theme="{StaticResource CardBorder}">
<TabControl
Classes.ReverseSeparator="{Binding #reverse.IsChecked}"
ItemsSource="{Binding Items}"
TabStripPlacement="{Binding #place.SelectedValue}"
Theme="{StaticResource ScrollTabControl}" />
</Border>
</StackPanel>
</TabItem>
<TabItem Header="Line">
<StackPanel>
<Border MinHeight="150" Theme="{StaticResource CardBorder}">
<TabControl TabStripPlacement="{Binding #place.SelectedValue}" Theme="{StaticResource LineTabControl}">
<TabItem Content="Hello 1" Header="Tab 1" />
<TabItem Content="Hello 2" Header="Tab 2" />
<TabItem Content="Hello 3" Header="Tab 3" />
<TabItem Content="中文内容" Header="中文中文" />
<TabItem
Content="Hello 4"
Header="Tab 4"
IsEnabled="False" />
</TabControl>
</Border>
<Border Height="300" Theme="{StaticResource CardBorder}">
<TabControl
ItemsSource="{Binding Items}"
TabStripPlacement="{Binding #place.SelectedValue}"
Theme="{StaticResource ScrollLineTabControl}" />
</Border>
</StackPanel>
</TabItem>
<TabItem Header="Card">
<StackPanel>
<Border
MinHeight="150"
Background="Transparent"
Theme="{StaticResource CardBorder}">
<TabControl TabStripPlacement="{Binding #place.SelectedValue}" Theme="{StaticResource CardTabControl}">
<TabItem Content="Hello 1" Header="Tab 1" />
<TabItem Content="Hello 2" Header="Tab 2" />
<TabItem Content="Hello 3" Header="Tab 3" />
<TabItem Content="中文内容" Header="中文中文" />
<TabItem
Content="Hello 4"
Header="Tab 4"
IsEnabled="False" />
</TabControl>
</Border>
<Border
Height="300"
Background="Transparent"
Theme="{StaticResource CardBorder}">
<TabControl
ItemsSource="{Binding Items}"
TabStripPlacement="{Binding #place.SelectedValue}"
Theme="{StaticResource ScrollCardTabControl}" />
</Border>
</StackPanel>
</TabItem>
<TabItem Header="Button">
<StackPanel>
<Border MinHeight="150" Theme="{StaticResource CardBorder}">
<TabControl TabStripPlacement="{Binding #place.SelectedValue}" Theme="{StaticResource ButtonTabControl}">
<TabItem Content="Hello 1" Header="Tab 1" />
<TabItem Content="Hello 2" Header="Tab 2" />
<TabItem Content="Hello 3" Header="Tab 3" />
<TabItem Content="中文内容" Header="中文中文" />
<TabItem
Content="Hello 4"
Header="Tab 4"
IsEnabled="False" />
</TabControl>
</Border>
<Border Height="300" Theme="{StaticResource CardBorder}">
<TabControl
ItemsSource="{Binding Items}"
TabStripPlacement="{Binding #place.SelectedValue}"
Theme="{StaticResource ScrollButtonTabControl}" />
</Border>
</StackPanel>
</TabItem>
</TabControl>
</StackPanel>
</ScrollViewer>
</UserControl>
</UserControl>

View File

@@ -1,6 +1,4 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
using Semi.Avalonia.Demo.ViewModels;
namespace Semi.Avalonia.Demo.Pages;

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"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:Class="Semi.Avalonia.Demo.Pages.TabStripDemo"
x:CompileBindings="True"
x:DataType="vm:TabStripDemoViewModel">
<Design.DataContext>
<vm:TabStripDemoViewModel />
</Design.DataContext>
<ScrollViewer>
<StackPanel>
<TabControl Theme="{StaticResource LineTabControl}">
<TabItem Header="Default">
<StackPanel>
<Border Theme="{StaticResource CardBorder}">
<TabStrip>
<TabStripItem Content="Tab 1" />
<TabStripItem Content="Tab 2" />
<TabStripItem Content="Tab 3" />
<TabStripItem Content="中文中文" />
<TabStripItem Content="Tab 4" IsEnabled="False" />
</TabStrip>
</Border>
<Border Theme="{StaticResource CardBorder}">
<TabStrip
ItemsSource="{Binding Items}" />
</Border>
</StackPanel>
</TabItem>
<TabItem Header="Line">
<StackPanel>
<Border Theme="{StaticResource CardBorder}">
<TabStrip Theme="{StaticResource LineTabStrip}">
<TabStripItem Content="Tab 1" />
<TabStripItem Content="Tab 2" />
<TabStripItem Content="Tab 3" />
<TabStripItem Content="中文中文" />
<TabStripItem Content="Tab 4" IsEnabled="False" />
</TabStrip>
</Border>
<Border Theme="{StaticResource CardBorder}">
<TabStrip
ItemsSource="{Binding Items}"
Theme="{StaticResource LineTabStrip}" />
</Border>
</StackPanel>
</TabItem>
<TabItem Header="Card">
<StackPanel>
<Border
Background="Transparent"
Theme="{StaticResource CardBorder}">
<TabStrip Theme="{StaticResource CardTabStrip}">
<TabStripItem Content="Tab 1" />
<TabStripItem Content="Tab 2" />
<TabStripItem Content="Tab 3" />
<TabStripItem Content="中文中文" />
<TabStripItem Content="Tab 4" IsEnabled="False" />
</TabStrip>
</Border>
<Border
Background="Transparent"
Theme="{StaticResource CardBorder}">
<TabStrip
ItemsSource="{Binding Items}"
Theme="{StaticResource CardTabStrip}" />
</Border>
</StackPanel>
</TabItem>
<TabItem Header="Button">
<StackPanel>
<Border Theme="{StaticResource CardBorder}">
<TabStrip Theme="{StaticResource ButtonTabStrip}">
<TabStripItem Content="Tab 1" />
<TabStripItem Content="Tab 2" />
<TabStripItem Content="Tab 3" />
<TabStripItem Content="中文中文" />
<TabStripItem Content="Tab 4" IsEnabled="False" />
</TabStrip>
</Border>
<Border Theme="{StaticResource CardBorder}">
<TabStrip
ItemsSource="{Binding Items}"
Theme="{StaticResource ButtonTabStrip}" />
</Border>
</StackPanel>
</TabItem>
</TabControl>
</StackPanel>
</ScrollViewer>
</UserControl>

View File

@@ -0,0 +1,13 @@
using Avalonia.Controls;
using Semi.Avalonia.Demo.ViewModels;
namespace Semi.Avalonia.Demo.Pages;
public partial class TabStripDemo : UserControl
{
public TabStripDemo()
{
InitializeComponent();
this.DataContext = new TabStripDemoViewModel();
}
}

View File

@@ -159,4 +159,4 @@
</HeaderedContentControl>
</StackPanel>
</ScrollViewer>
</UserControl>
</UserControl>

View File

@@ -1,6 +1,4 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
namespace Semi.Avalonia.Demo.Pages;

View File

@@ -1,6 +1,4 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
namespace Semi.Avalonia.Demo.Pages;

View File

@@ -17,9 +17,9 @@
<TimePicker Classes="Large" />
<TimePicker Classes="Small" />
<StackPanel Orientation="Horizontal">
<TimePicker Classes="Large" ClockIdentifier="12HourClock"/>
<TimePicker ClockIdentifier="12HourClock"/>
<TimePicker Classes="Small" ClockIdentifier="12HourClock"/>
<TimePicker Classes="Large" ClockIdentifier="12HourClock" />
<TimePicker ClockIdentifier="12HourClock" />
<TimePicker Classes="Small" ClockIdentifier="12HourClock" />
</StackPanel>
<StackPanel Orientation="Horizontal">
<TimePicker IsEnabled="False" />
@@ -28,4 +28,4 @@
</StackPanel>
</StackPanel>
</UserControl>
</UserControl>

View File

@@ -1,6 +1,4 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
namespace Semi.Avalonia.Demo.Pages;
@@ -10,9 +8,4 @@ public partial class TimePickerDemo : UserControl
{
InitializeComponent();
}
private void InitializeComponent()
{
AvaloniaXamlLoader.Load(this);
}
}

View File

@@ -1,6 +1,4 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
namespace Semi.Avalonia.Demo.Pages;
@@ -10,9 +8,4 @@ public partial class ToggleButtonDemo : UserControl
{
InitializeComponent();
}
private void InitializeComponent()
{
AvaloniaXamlLoader.Load(this);
}
}

View File

@@ -1,6 +1,4 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
namespace Semi.Avalonia.Demo.Pages;
@@ -10,9 +8,4 @@ public partial class ToggleSwitchDemo : UserControl
{
InitializeComponent();
}
private void InitializeComponent()
{
AvaloniaXamlLoader.Load(this);
}
}

View File

@@ -1,6 +1,4 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
namespace Semi.Avalonia.Demo.Pages;
@@ -10,9 +8,4 @@ public partial class ToolTipDemo : UserControl
{
InitializeComponent();
}
private void InitializeComponent()
{
AvaloniaXamlLoader.Load(this);
}
}

View File

@@ -0,0 +1,127 @@
<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:converters="clr-namespace:Semi.Avalonia.Demo.Converters"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:Class="Semi.Avalonia.Demo.Pages.TreeDataGridDemo"
x:CompileBindings="True"
x:DataType="vm:TreeDataGridDemoViewModel">
<UserControl.Resources>
<converters:FileIconConverter x:Key="FileIconConverter">
<StaticResource x:Key="file" ResourceKey="SemiIconFile" />
<StaticResource x:Key="folderOpen" ResourceKey="SemiIconFolderOpen" />
<StaticResource x:Key="folderClosed" ResourceKey="SemiIconFolder" />
</converters:FileIconConverter>
</UserControl.Resources>
<TabControl>
<TabItem Header="Songs">
<TreeDataGrid
AutoDragDropRows="True"
DataContext="{Binding SongsContext}"
Source="{Binding Songs}">
<TreeDataGrid.Resources>
<DataTemplate x:Key="AlbumCell" DataType="vm:SongViewModel">
<TextBlock
HorizontalAlignment="Stretch"
VerticalAlignment="Center"
Background="Transparent"
Text="{Binding Album}" />
</DataTemplate>
<DataTemplate x:Key="AlbumEditCell" DataType="vm:SongViewModel">
<ComboBox
VerticalAlignment="Center"
Classes="Small"
ItemsSource="{x:Static vm:Song.Albums}"
SelectedItem="{Binding Album}" />
</DataTemplate>
<DataTemplate x:Key="CommentsCell" DataType="vm:SongViewModel">
<TextBlock VerticalAlignment="Center" Text="{Binding CountOfComment}" />
</DataTemplate>
<DataTemplate x:Key="CommentsEditCell" DataType="vm:SongViewModel">
<NumericUpDown
Width="100"
HorizontalAlignment="Left"
VerticalAlignment="Center"
Classes="Small"
Value="{Binding CountOfComment}" />
</DataTemplate>
</TreeDataGrid.Resources>
<TreeDataGrid.Styles>
<Style Selector="TreeDataGrid TreeDataGridRow:nth-last-child(2n)">
<Setter Property="Background" Value="{DynamicResource SemiColorFill0}" />
</Style>
</TreeDataGrid.Styles>
</TreeDataGrid>
</TabItem>
<TabItem Header="Files">
<Grid DataContext="{Binding FilesContext}" RowDefinitions="Auto, *">
<DockPanel Margin="0,4" DockPanel.Dock="Top">
<ComboBox
DockPanel.Dock="Left"
ItemsSource="{Binding Drives}"
SelectedItem="{Binding SelectedDrive}" />
<TextBox
Margin="4,0,0,0"
VerticalContentAlignment="Center"
KeyDown="SelectedPath_KeyDown"
Text="{Binding SelectedPath, Mode=OneWay}" />
</DockPanel>
<TreeDataGrid
Name="fileViewer"
Grid.Row="1"
Source="{Binding Source}">
<TreeDataGrid.Resources>
<!-- Template for Name column cells -->
<DataTemplate x:Key="FileNameCell" DataType="vm:FileNodeViewModel">
<StackPanel Orientation="Horizontal">
<PathIcon
Theme="{StaticResource InnerPathIcon}"
Margin="8,0">
<PathIcon.Data>
<MultiBinding Converter="{StaticResource FileIconConverter}">
<Binding Path="IsDirectory" />
<Binding Path="IsExpanded" />
</MultiBinding>
</PathIcon.Data>
</PathIcon>
<TextBlock VerticalAlignment="Center" Text="{Binding Name}" />
</StackPanel>
</DataTemplate>
<!-- Edit template for Name column cells -->
<DataTemplate x:Key="FileNameEditCell" DataType="vm:FileNodeViewModel">
<StackPanel Orientation="Horizontal">
<Image Margin="0,0,4,0" VerticalAlignment="Center">
<Image.Source>
<MultiBinding Converter="{StaticResource FileIconConverter}">
<Binding Path="IsDirectory" />
<Binding Path="IsExpanded" />
</MultiBinding>
</Image.Source>
</Image>
<TextBox
VerticalAlignment="Center"
Classes="Small"
Text="{Binding Name}">
<TextBox.Styles>
<Style Selector="DataValidationErrors">
<Setter Property="Theme" Value="{DynamicResource TooltipDataValidationErrors}" />
</Style>
</TextBox.Styles>
</TextBox>
</StackPanel>
</DataTemplate>
</TreeDataGrid.Resources>
<TreeDataGrid.Styles>
<Style Selector="TreeDataGrid TreeDataGridRow:nth-child(2n)">
<Setter Property="Background" Value="{DynamicResource SemiColorFill0}" />
</Style>
</TreeDataGrid.Styles>
</TreeDataGrid>
</Grid>
</TabItem>
</TabControl>
</UserControl>

View File

@@ -0,0 +1,23 @@
using Avalonia.Controls;
using Avalonia.Input;
using Semi.Avalonia.Demo.ViewModels;
namespace Semi.Avalonia.Demo.Pages;
public partial class TreeDataGridDemo : UserControl
{
public TreeDataGridDemo()
{
InitializeComponent();
this.DataContext = new TreeDataGridDemoViewModel();
}
private void SelectedPath_KeyDown(object? sender, KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
var vm = DataContext as TreeDataGridDemoViewModel;
vm.FilesContext.SelectedPath = (sender as TextBox)!.Text;
}
}
}

View File

@@ -79,4 +79,4 @@
</Grid>
</UserControl>
</UserControl>

View File

@@ -1,7 +1,5 @@
using System.Collections.ObjectModel;
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
using CommunityToolkit.Mvvm.ComponentModel;
namespace Semi.Avalonia.Demo.Pages;
@@ -25,14 +23,16 @@ public class TreeViewVm : ObservableObject
{
Items = new ObservableCollection<TreeViewItemVm>()
{
new TreeViewItemVm() {Name = "Item 1", Id = "1"},
new TreeViewItemVm() {Name = "Item 2", Id = "2"},
new TreeViewItemVm() {Name = "Item 3", Id = "3", Items = new ObservableCollection<TreeViewItemVm>()
new TreeViewItemVm() { Name = "Item 1", Id = "1" },
new TreeViewItemVm() { Name = "Item 2", Id = "2" },
new TreeViewItemVm()
{
new TreeViewItemVm() {Name = "Item 3.1", Id = "3.1"},
new TreeViewItemVm() {Name = "Item 3.2", Id = "3.2"},
new TreeViewItemVm() {Name = "Item 3.3", Id = "3.3"},
},
Name = "Item 3", Id = "3", Items = new ObservableCollection<TreeViewItemVm>()
{
new TreeViewItemVm() { Name = "Item 3.1", Id = "3.1" },
new TreeViewItemVm() { Name = "Item 3.2", Id = "3.2" },
new TreeViewItemVm() { Name = "Item 3.3", Id = "3.3" },
},
},
};
@@ -50,8 +50,10 @@ public class TreeViewVm : ObservableObject
ThirdItem thirdItem = new ThirdItem { Id = k, Name = $"ThirdItem {k}" };
secondItem.ThirdItemItems.Add(thirdItem);
}
firstItem.SecondItems.Add(secondItem);
}
MultipleLevelItems.Add(firstItem);
}
}
@@ -69,18 +71,17 @@ public class ItemBase
public int Id { get; set; }
public string? Name { get; set; }
}
public class FirstItem : ItemBase
{
public ObservableCollection<SecondItem>? SecondItems { get; set; }
}
public class SecondItem : ItemBase
{
public ObservableCollection<ThirdItem>? ThirdItemItems { get; set; }
}
public class ThirdItem : ItemBase
{
}
}

View File

@@ -1,6 +1,6 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
<LangVersion>latest</LangVersion>
</PropertyGroup>
@@ -12,18 +12,20 @@
<ItemGroup>
<PackageReference Include="Avalonia" Version="$(AvaloniaVersion)"/>
<PackageReference Include="Avalonia.Controls.ColorPicker" Version="$(AvaloniaVersion)"/>
<PackageReference Include="Avalonia.Controls.DataGrid" Version="$(AvaloniaVersion)"/>
<PackageReference Include="Avalonia.Controls.DataGrid" Version="$(DataGridVersion)"/>
<!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->
<PackageReference Include="Avalonia.Diagnostics" Version="$(AvaloniaVersion)">
<IncludeAssets Condition="'$(Configuration)' != 'Debug'">None</IncludeAssets>
<PrivateAssets Condition="'$(Configuration)' != 'Debug'">All</PrivateAssets>
</PackageReference>
<PackageReference Include="CommunityToolkit.Mvvm" Version="$(CommunityToolkitVersion)"/>
<PackageReference Include="Irihi.Avalonia.Shared" Version="0.3.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\src\Semi.Avalonia\Semi.Avalonia.csproj"/>
<ProjectReference Include="..\..\src\Semi.Avalonia.ColorPicker\Semi.Avalonia.ColorPicker.csproj"/>
<ProjectReference Include="..\..\src\Semi.Avalonia.DataGrid\Semi.Avalonia.DataGrid.csproj"/>
<ProjectReference Include="..\..\src\Semi.Avalonia\Semi.Avalonia.csproj"/>
<ProjectReference Include="..\..\src\Semi.Avalonia.TreeDataGrid\Semi.Avalonia.TreeDataGrid.csproj"/>
</ItemGroup>
</Project>

View File

@@ -1,49 +0,0 @@
<ResourceDictionary xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ControlTheme x:Key="NavigationTab" TargetType="TabControl">
<Setter Property="Template">
<ControlTemplate TargetType="TabControl">
<Border
HorizontalAlignment="{TemplateBinding HorizontalAlignment}"
VerticalAlignment="{TemplateBinding VerticalAlignment}"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
CornerRadius="{TemplateBinding CornerRadius}">
<DockPanel>
<ScrollViewer
DockPanel.Dock="Left"
Name="PART_ScrollViewer"
VerticalScrollBarVisibility="Auto">
<Panel DockPanel.Dock="{TemplateBinding TabStripPlacement}">
<ItemsPresenter Name="PART_ItemsPresenter">
<ItemsPresenter.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel />
</ItemsPanelTemplate>
</ItemsPresenter.ItemsPanel>
</ItemsPresenter>
<Border Name="PART_BorderSeparator"
Background="{DynamicResource TabItemLinePipePressedBorderBrush}" />
</Panel>
</ScrollViewer>
<ContentPresenter
Name="PART_SelectedContentHost"
Margin="{TemplateBinding Padding}"
HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
Content="{TemplateBinding SelectedContent}"
ContentTemplate="{TemplateBinding SelectedContentTemplate}" />
</DockPanel>
</Border>
</ControlTemplate>
</Setter>
<Style Selector="^[TabStripPlacement=Left] /template/ Border#PART_BorderSeparator">
<Setter Property="Width" Value="1" />
<Setter Property="VerticalAlignment" Value="Stretch" />
<Setter Property="HorizontalAlignment" Value="Left" />
</Style>
<Style Selector="^.Dismiss /template/ ScrollViewer#PART_ScrollViewer">
<Setter Property="IsVisible" Value="False" />
</Style>
</ControlTheme>
</ResourceDictionary>

View File

@@ -4,7 +4,6 @@
<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,37 @@
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Windows.Input;
using Avalonia.Platform.Storage;
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
namespace Semi.Avalonia.Demo.ViewModels;
public partial class AboutUsViewModel : ObservableObject
{
public ICommand NavigateCommand { get; set; }
internal ILauncher? Launcher { get; set; }
public AboutUsViewModel()
{
NavigateCommand = new AsyncRelayCommand<string>(OnNavigateAsync);
}
private static readonly IReadOnlyDictionary<string, string> _keyToUrlMapping = new Dictionary<string, string>()
{
["semi"] = "https://github.com/irihitech/Semi.Avalonia",
["ursa"] = "https://github.com/irihitech/Ursa.Avalonia",
["mantra"] = "https://www.bilibili.com/video/BV15pfKYbEEQ",
["huska"] = "https://www.bilibili.com/video/BV1knj1zWE4A",
};
private async Task OnNavigateAsync(string? arg)
{
if (Launcher is not null && arg is not null && _keyToUrlMapping.TryGetValue(arg.ToLower(), out var uri))
{
await Launcher.LaunchUriAsync(new Uri(uri));
}
}
}

View File

@@ -2,11 +2,10 @@ 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
public partial class ApplicationViewModel : ObservableObject
{
[RelayCommand]
private void Exit()

View File

@@ -0,0 +1,68 @@
using System.Collections.ObjectModel;
using CommunityToolkit.Mvvm.ComponentModel;
namespace Semi.Avalonia.Demo.ViewModels;
public class AutoCompleteBoxDemoViewModel : ObservableObject
{
public ObservableCollection<StateData> States { get; set; } =
[
new("Alabama", "AL", "Montgomery"),
new("Alaska", "AK", "Juneau"),
new("Arizona", "AZ", "Phoenix"),
new("Arkansas", "AR", "Little Rock"),
new("California", "CA", "Sacramento"),
new("Colorado", "CO", "Denver"),
new("Connecticut", "CT", "Hartford"),
new("Delaware", "DE", "Dover"),
new("Florida", "FL", "Tallahassee"),
new("Georgia", "GA", "Atlanta"),
new("Hawaii", "HI", "Honolulu"),
new("Idaho", "ID", "Boise"),
new("Illinois", "IL", "Springfield"),
new("Indiana", "IN", "Indianapolis"),
new("Iowa", "IA", "Des Moines"),
new("Kansas", "KS", "Topeka"),
new("Kentucky", "KY", "Frankfort"),
new("Louisiana", "LA", "Baton Rouge"),
new("Maine", "ME", "Augusta"),
new("Maryland", "MD", "Annapolis"),
new("Massachusetts", "MA", "Boston"),
new("Michigan", "MI", "Lansing"),
new("Minnesota", "MN", "St. Paul"),
new("Mississippi", "MS", "Jackson"),
new("Missouri", "MO", "Jefferson City"),
new("Montana", "MT", "Helena"),
new("Nebraska", "NE", "Lincoln"),
new("Nevada", "NV", "Carson City"),
new("New Hampshire", "NH", "Concord"),
new("New Jersey", "NJ", "Trenton"),
new("New Mexico", "NM", "Santa Fe"),
new("New York", "NY", "Albany"),
new("North Carolina", "NC", "Raleigh"),
new("North Dakota", "ND", "Bismarck"),
new("Ohio", "OH", "Columbus"),
new("Oklahoma", "OK", "Oklahoma City"),
new("Oregon", "OR", "Salem"),
new("Pennsylvania", "PA", "Harrisburg"),
new("Rhode Island", "RI", "Providence"),
new("South Carolina", "SC", "Columbia"),
new("South Dakota", "SD", "Pierre"),
new("Tennessee", "TN", "Nashville"),
new("Texas", "TX", "Austin"),
new("Utah", "UT", "Salt Lake City"),
new("Vermont", "VT", "Montpelier"),
new("Virginia", "VA", "Richmond"),
new("Washington", "WA", "Olympia"),
new("West Virginia", "WV", "Charleston"),
new("Wisconsin", "WI", "Madison"),
new("Wyoming", "WY", "Cheyenne")
];
}
public class StateData(string name, string abbreviation, string capital)
{
public string Name { get; private set; } = name;
public string Abbreviation { get; private set; } = abbreviation;
public string Capital { get; private set; } = capital;
}

View File

@@ -0,0 +1,9 @@
using System.Collections.ObjectModel;
using CommunityToolkit.Mvvm.ComponentModel;
namespace Semi.Avalonia.Demo.ViewModels;
public class ComboBoxDemoViewModel : ObservableObject
{
public ObservableCollection<string> Items { get; set; } = ["Ding", "Otter", "Husky", "Mr.17", "Cass"];
}

View File

@@ -59,6 +59,25 @@ public class Song
Url = $"https://music.163.com/song?id={netEaseId}";
}
public static List<string> Albums =>
[
"A.S.I.A",
"饕餮人间",
"七步咙咚呛",
"大惊小怪",
"The ONE",
"以梦为马 (壮志骄阳版)",
"emo了",
"一眼万年",
"冲刺吧",
"爱的赏味期限",
"COSMIC ANTHEM / 手紙",
"世界晚安",
"明年也要好好长大",
"320万年前",
"W.O.R.L.D."
];
public static List<Song> Songs =>
[
new("好肚有肚(feat.李玲玉)", "熊猫堂ProducePandas", 2, 50, "A.S.I.A", 730, 1487039339),

View File

@@ -0,0 +1,22 @@
using System.Collections.ObjectModel;
using System.Linq;
using System.Threading.Tasks;
using CommunityToolkit.Mvvm.ComponentModel;
namespace Semi.Avalonia.Demo.ViewModels;
public class RefreshContainerDemoViewModel : ObservableObject
{
public ObservableCollection<string> Items { get; }
public RefreshContainerDemoViewModel()
{
Items = new ObservableCollection<string>(Enumerable.Range(1, 200).Select(i => $"Item {i}"));
}
public async Task AddToTop()
{
await Task.Delay(1000);
Items.Insert(0, $"Item {200 - Items.Count}");
}
}

View File

@@ -0,0 +1,29 @@
using System.Collections.ObjectModel;
using Avalonia.Controls;
using CommunityToolkit.Mvvm.ComponentModel;
namespace Semi.Avalonia.Demo.ViewModels;
public class SplitViewDemoViewModel : ObservableObject
{
public ObservableCollection<string> Songs { get; set; } =
[
"320万年前",
"隐德来希",
"孔明",
"锦鲤卟噜噜",
"指鹿为马",
"热带季风Remix",
"加州梦境",
"渐近自由",
"世界所有的烂漫",
];
public static ObservableCollection<SplitViewDisplayMode> DisplayModes { get; set; } =
[
SplitViewDisplayMode.Inline,
SplitViewDisplayMode.CompactInline,
SplitViewDisplayMode.Overlay,
SplitViewDisplayMode.CompactOverlay,
];
}

View File

@@ -4,12 +4,7 @@ using CommunityToolkit.Mvvm.ComponentModel;
namespace Semi.Avalonia.Demo.ViewModels;
public class TabControlDemoViewModel: ObservableObject
public class TabControlDemoViewModel : ObservableObject
{
public ObservableCollection<string> Items { get; set; }
public TabControlDemoViewModel()
{
Items = new ObservableCollection<string>(Enumerable.Range(1, 200).Select(a => "Tab " + a));
}
public ObservableCollection<string> Items => new(Enumerable.Range(1, 200).Select(a => "Tab " + a));
}

View File

@@ -0,0 +1,10 @@
using System.Collections.ObjectModel;
using System.Linq;
using CommunityToolkit.Mvvm.ComponentModel;
namespace Semi.Avalonia.Demo.ViewModels;
public class TabStripDemoViewModel : ObservableObject
{
public ObservableCollection<string> Items => new(Enumerable.Range(1, 10).Select(a => "Tab " + a));
}

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