Compare commits

...

409 Commits

Author SHA1 Message Date
rabbitism e263c917de misc: bump version. 2024-05-18 14:21:09 +08:00
Dong Bin 911a07d6a1 Merge pull request #358 from irihitech/adorner
Add AdornerLayer control
2024-05-17 22:01:07 +08:00
Zhang Dian f65ec4bb05 feat: add AdornerLayer control. 2024-05-17 21:14:22 +08:00
Dong Bin e6e7d6042c Merge pull request #356 from irihitech/issue/354
Use Binding instead of ReflectionBinding
2024-05-17 10:37:46 +08:00
rabbitism e44499db4e feat: replace all reflection bindings. 2024-05-17 10:37:03 +08:00
Dong Bin b45272daa4 Merge pull request #357 from irihitech/issue/352
undefined
2024-05-16 15:34:47 +08:00
Zhang Dian 2d61d93c93 feat: add LooklessTextBox Theme. 2024-05-16 15:22:14 +08:00
Zhang Dian a49111c0c2 fix: use :focus instead of :focus-visible. 2024-05-15 21:40:27 +08:00
Zhang Dian 9a738603d0 feat: add :focus-visible pseudoclass to ComboBox. 2024-05-15 18:44:43 +08:00
Zhang Dian 49c7799431 feat: use Binding instead of ReflectionBinding. 2024-05-15 15:42:13 +08:00
Dong Bin 634e792f61 Merge pull request #351 from irihitech/dict
Fix various issues with Theme related RresourceDictionary
2024-04-22 14:00:57 +08:00
Dong Bin 5212f255e6 Merge pull request #350 from irihitech/menu
Add MenuItem ToggleType support
2024-04-22 13:43:05 +08:00
Zhang Dian e20f0a4161 misc: format resources. 2024-04-22 01:32:59 +08:00
Zhang Dian 20b2cf3aaa fix: Dark BorderBrush. 2024-04-22 01:32:58 +08:00
Zhang Dian cf54ad51f9 fix: various issues.
* CalendarDatePicker Bordered class.
* ComboBox Pressed BorderBrush.
* ToggleSwitch default Background & BorderBrush.
* CheckBox & ListBox Background.
2024-04-22 01:32:58 +08:00
Zhang Dian 3dff0ccad5 feat: add MenuItem ToggleType support. 2024-04-21 17:27:53 +08:00
Dong Bin 5036a53b7c Merge pull request #346 from irihitech/date-shadow
Fix date picker presenter shadow in light mode.
2024-04-13 22:57:14 +08:00
rabbitism 8c1c48bcf5 fix: fix date picker presenter shadow in light mode. 2024-04-13 22:06:13 +08:00
Dong Bin 67752d43d3 Merge pull request #344 from irihitech/validation
Fix DataValidation MinHeight
2024-04-12 21:28:14 +08:00
Zhang Dian 5947fc70eb fix: fix DataValidation MinHeight. 2024-04-12 20:06:55 +08:00
Dong Bin 9e26d5f20b Merge pull request #338 from irihitech/support
Add community support info
2024-04-10 14:34:43 +08:00
rabbitism 3be9b72148 feat: improve wording, add CN documentation. 2024-04-10 14:33:44 +08:00
rabbitism 75ecc525a7 docs: add support info. 2024-04-10 14:27:05 +08:00
Zhang Dian 0c1922a08b Merge pull request #335 from JIIIIL/main
misspelled word invalidates the background(SplitView lightDismiss)
2024-04-01 00:26:47 +08:00
Dong Bin 92e0362eb6 Apply suggestions from code review
Co-authored-by: Zhang Dian <54255897+zdpcdt@users.noreply.github.com>
2024-03-31 23:13:24 +08:00
rabbitism 3716cc3bcc feat: make sure mask is invisible in inline mode. use dynamic brush. 2024-03-31 21:51:01 +08:00
JIIIIL e24e847f4b misspelled word invalidates the background(SplitView lightDismiss) 2024-03-31 20:33:17 +08:00
rabbitism ccc423c44e misc: Update version. 2024-03-29 19:04:26 +08:00
Dong Bin 28b89e2535 Merge pull request #333 from irihitech/issue/326
Add caret blink interval.
2024-03-29 17:11:54 +08:00
rabbitism 52bfeae099 feat: add caret blink interval. 2024-03-29 17:11:27 +08:00
Dong Bin 6215a6a622 Merge pull request #332 from irihitech/locale
Locale update sync for 11.1
2024-03-28 19:32:23 +08:00
Dong Bin c2c41f9275 Merge pull request #331 from irihitech/splitview
Redesign SplitViewDemo
2024-03-28 19:26:35 +08:00
Zhang Dian d7de64a4ef feat: ManagedFileChooser columns. 2024-03-28 15:52:47 +08:00
Zhang Dian 04ffd38e14 feat: add DatePicker & TimePicker support. 2024-03-28 15:39:09 +08:00
Zhang Dian 38958c1326 feat: redesign SplitViewDemo. 2024-03-28 05:17:59 +08:00
Dong Bin 9bb50a7190 Merge pull request #329 from irihitech/293-bs-dian
ComboBox, DatePicker and TimePicker BackgroundSizing
2024-03-28 01:10:05 +08:00
Dong Bin 2e59ed73aa Merge branch 'main' into 293-bs-dian 2024-03-28 01:02:56 +08:00
Dong Bin b3dc2425f8 Merge pull request #328 from Soar360/main
TextBox.TextArea
2024-03-27 22:16:49 +08:00
Zhang Dian 4e7681d4d4 feat: Small Classes and BackgroundSizing of DateTimePicker, ComboBox TextTrimming. 2024-03-27 17:14:31 +08:00
Soar360 48235b63a2 TextBox.TextArea 2024-03-25 17:27:38 +08:00
Zhang Dian 8de7a1ae8c fix: various issues of demos. 2024-03-24 21:57:44 +08:00
Zhang Dian 8142dd48cd feat: ComboBox BackgroundSizing. 2024-03-24 21:00:20 +08:00
Zhang Dian 76c9b57a4b Merge pull request #322 from irihitech/293-bs-bin
BackgroundSizing: Button
2024-03-22 20:39:17 +08:00
Zhang Dian 071a75a740 fix: demos of using Button. 2024-03-22 20:37:01 +08:00
rabbitism 4782dab745 fix: fix disable foreground. 2024-03-22 20:15:32 +08:00
rabbitism 90fbd2a7e5 fix: fix dropdown button solid foreground. 2024-03-22 20:09:05 +08:00
Zhang Dian 1f0d83ded4 feat: add more button demo. 2024-03-22 19:26:02 +08:00
rabbitism 6ff3ebc55b fix: multiple fix related to default button background and borderbrush. 2024-03-22 17:12:13 +08:00
Zhang Dian 3813091668 fix: fix SolidButton colors. 2024-03-22 15:26:02 +08:00
Dong Bin 47e5300a46 Merge pull request #323 from irihitech/pkginfo
Update package info
2024-03-21 21:33:06 +08:00
Zhang Dian 41662706ab feat: update package info. 2024-03-21 16:18:31 +08:00
Dong Bin 91aa717189 Merge pull request #316 from irihitech/rc/271-rd-file
Add rd file explanation for native aot.
2024-03-21 10:54:57 +08:00
Zhang Dian f6b936431a misc: add AOT publish documentation. 2024-03-20 23:24:17 +08:00
Dong Bin 8524e56166 Merge pull request #321 from irihitech/rc/293-backgroundsizing
Fix BackgroundSizing of TextBox, CalendarDatePicker, AutoCompleteBox, NumericUpDown
2024-03-20 21:14:21 +08:00
rabbitism 8328c69c46 feat: Repeat Button: target template element. 2024-03-20 21:08:58 +08:00
rabbitism 2470522209 feat: make button color targets template part. 2024-03-20 21:00:11 +08:00
Zhang Dian f1d87f7c4d feat: unify MinHeight based on TextBox. 2024-03-20 15:20:48 +08:00
Zhang Dian 07278047a4 fix: MinHeight TemplateBinding and names. 2024-03-20 14:11:28 +08:00
rabbitism 6df8ea2101 feat: implement background sizing, change alignments and min height according to the design. 2024-03-19 21:53:22 +08:00
rabbitism 3b3fbd1265 misc: Update package version. 2024-03-16 18:33:09 +08:00
Dong Bin 8b4a670be8 Merge pull request #315 from irihitech/rc/313-content-control-template
Remove default implementation of ContentControl and UserControl
2024-03-15 23:14:09 +08:00
rabbitism dad406e995 feat: remove usercontrol inheritance style. 2024-03-15 23:07:04 +08:00
Dong Bin 13e9364477 Merge pull request #317 from irihitech/rc/299-DataGridRow-background
Fix DataGridRow background opacity in light theme.
2024-03-15 20:55:00 +08:00
Dong Bin 3018f17e6d Merge pull request #318 from irihitech/rc/306-notification-position
Add TopCenter and BottomCenter position
2024-03-15 18:10:39 +08:00
Zhang Dian 627aa65e1f feat: add TopCenter and BottomCenter position. 2024-03-15 16:40:54 +08:00
Zhang Dian b83525092c fix: fix DataGridRow background opacity in light theme. 2024-03-15 16:19:25 +08:00
Zhang Dian dd3c4bdbae feat: remove default implementation of ContentControl and UserControl. 2024-03-15 15:35:39 +08:00
Zhang Dian 17fe50d40b Merge pull request #314 from irihitech/doc
Add Chinese readme.
2024-03-14 16:19:10 +08:00
rabbitism 27c4794c6c fix typo. 2024-03-14 16:06:09 +08:00
rabbitism a678a0f39d doc: add ursa to readme. 2024-03-14 16:03:51 +08:00
rabbitism 33c56f87f8 doc: add Chinese doc. 2024-03-14 15:59:27 +08:00
Dong Bin ffb1b9c0e8 Merge pull request #312 from irihitech/browser
Update the latest template of Browser project
2024-03-13 16:17:36 +08:00
Zhang Dian ef272815ea fix: update the latest template of Browser project. 2024-03-12 17:16:23 +08:00
Dong Bin d967583228 Merge pull request #311 from irihitech/rc/256-colorpicker
Reapply "ColorPicker new theme."
2024-03-12 17:03:52 +08:00
rabbitism ef36239161 feat: make text looks like text. 2024-03-12 17:03:07 +08:00
Zhang Dian bb3966c36c Reapply "ColorPicker new theme."
This reverts commit a521efd39a.
2024-03-12 16:47:35 +08:00
Dong Bin 4b7674d7e2 Merge pull request #310 from irihitech/action/config
Reset github action branches.
2024-03-12 16:21:36 +08:00
Zhang Dian 166490195f misc: reset branches. 2024-03-12 15:34:41 +08:00
Zhang Dian 3d267139fe Merge pull request #309 from irihitech/rc/11.1
Upgrade Avalonia dependency to 11.1.0-beta1
2024-03-12 15:00:28 +08:00
Zhang Dian ede0f9f3db misc: delete useless config. 2024-03-12 14:58:51 +08:00
rabbitism f140a331d7 feat: upgrade dependency to 11.1.0-beta1. 2024-03-12 12:07:07 +08:00
Zhang Dian bf1a2cac39 fix: AutoCompleteBox VerticalAlignment. 2024-03-11 23:31:43 +08:00
Zhang Dian 4d14c846b0 feat: redesign NumericUpDown. 2024-03-11 19:52:11 +08:00
Zhang Dian 46e57925b9 feat: redesign TextBox. 2024-03-11 19:30:22 +08:00
rabbitism ca8f8d6c15 fix: fix watermark in ime mode.
(cherry picked from commit 38cbc6da94)
2024-03-08 10:37:41 +08:00
Dong Bin 7acd741ff0 Merge pull request #308 from irihitech/text
Fix watermark before IME commit
2024-03-08 10:35:55 +08:00
rabbitism 38cbc6da94 fix: fix watermark in ime mode. 2024-03-07 21:19:05 +08:00
Zhang Dian c2d1d0c4eb fix: CalendarDatePicker BackgroundSizing. 2024-03-07 11:55:26 +08:00
Dong Bin 3fce633195 Merge pull request #304 from irihitech/dev/thom/hyperlinkBtn
adding hyperlink button into semi
2024-03-06 19:39:20 +08:00
rabbitism 30a7466fc9 fix: fix color in dark mode. 2024-03-06 19:36:12 +08:00
qile.wang 7fa99ed910 fix 2024-03-06 19:25:59 +08:00
qile.wang 801fea8269 fix template 2024-03-06 19:21:48 +08:00
Zhang Dian 341fa7900a feat: update github page. 2024-03-02 22:25:04 +08:00
Zhang Dian fb0b4a08ac feat: change all PathGeometry to StreamGeometry.
(cherry picked from commit 5f72ed4a49)
2024-03-01 22:10:38 +08:00
Dong Bin a0797721a0 Merge pull request #305 from irihitech/291-geometry
Change all PathGeometry to StreamGeometry.
2024-03-01 22:08:06 +08:00
qile.wang 8dee3ec364 change to StreamGeometry 2024-03-01 21:00:17 +08:00
qile.wang 0ddcb39302 fix var names and comp 2024-03-01 20:53:55 +08:00
Zhang Dian 5f72ed4a49 feat: change all PathGeometry to StreamGeometry. 2024-03-01 13:24:50 +08:00
Zhang Dian 71e276d478 feat: redesign CalendarDatePicker. 2024-02-29 19:59:14 +08:00
Dong Bin 833ccadb58 Merge pull request #303 from irihitech/rc/297-refresh-container
Implement RefreshContainer
2024-02-29 12:52:03 +08:00
Zhang Dian d33f38ea70 misc: delete useless PathGeometry. 2024-02-29 12:16:53 +08:00
qile.wang 386a3d297c roughly comp 2024-02-28 15:51:30 +08:00
qile.wang d19cc9d7b9 push changes 2024-02-28 15:21:48 +08:00
Zhang Dian 30081a1717 fix: icon shaking. 2024-02-28 14:47:56 +08:00
Zhang Dian 0d68df3711 misc: rename resources. 2024-02-24 18:11:28 +08:00
Zhang Dian 157d22a8f9 feat: implement RefreshContainer. 2024-02-24 16:49:31 +08:00
Dong Bin 4efc6bf4ec Merge pull request #302 from irihitech/rc/298-inner-content
Add InnerContent to AutoCompleteBox and NumericUpDown
2024-02-23 20:08:55 +08:00
Dong Bin a920dbc873 Merge pull request #301 from irihitech/296-index
Implement Locale Switch
2024-02-23 19:40:24 +08:00
rabbitism cafd47f334 feat: add backward compatibility. 2024-02-23 19:39:39 +08:00
Zhang Dian 3a83c67c6c feat: add InnerContent to AutoCompleteBox and NumericUpDown. 2024-02-23 17:56:27 +08:00
Zhang Dian a5657a38cd feat: TextBox default ContextMenu. 2024-02-23 16:15:21 +08:00
Zhang Dian 82f284b5fa feat: implement locale switch. 2024-02-21 16:32:48 +08:00
rabbitism 6459a8be1b misc: fix DataGrid version. 2024-01-27 16:56:16 +08:00
rabbitism 06240d4aa8 feat: update demo version. 2024-01-27 16:46:13 +08:00
Dong Bin 5c2a42b69e Merge pull request #288 from irihitech/sync
feat: sync with Avalonia #13644
2024-01-27 16:42:05 +08:00
rabbitism 3c9a2f53ab feat: sync with Avalonia #13644 2024-01-27 16:22:05 +08:00
Dong Bin b565707db9 Merge pull request #287 from irihitech/colorpicker
feat: sync Avalonia #13567
2024-01-27 16:15:46 +08:00
Dong Bin 380d28253a Merge pull request #286 from irihitech/datagrid
feat: sync with upstream
2024-01-27 16:15:14 +08:00
rabbitism 3410b0df10 feat: sync Avalonia #13567 2024-01-27 16:13:46 +08:00
rabbitism a2d6469620 feat: sync with upstream 2024-01-27 16:00:56 +08:00
rabbitism c0c89cbfd7 feat: update doc 2024-01-27 15:58:24 +08:00
Zhang Dian f3e72b6a6d Merge pull request #285 from irihitech/ActiveIcon
feat: add active class to path icon.
2024-01-27 14:28:26 +08:00
rabbitism a9b9737065 misc: rename file. 2024-01-27 03:14:43 +08:00
rabbitism 1a2628eff0 feat: add active class to path icon. 2024-01-27 03:08:20 +08:00
Zhang Dian 53b468db4a Merge pull request #279 from irihitech/slider
Change slider disable color
2024-01-26 21:39:32 +08:00
Dong Bin 73000d30aa Merge pull request #284 from irihitech/revert-261-256-colorpicker
Revert "ColorPicker new theme."
2024-01-26 19:53:55 +08:00
Zhang Dian a521efd39a Revert "ColorPicker new theme." 2024-01-26 19:52:45 +08:00
Dong Bin 3531376eb2 Merge pull request #283 from irihitech/carousel
Implemented some Carousel features
2024-01-26 19:50:09 +08:00
rabbitism 2ec97c023f feat: simplify template 2024-01-26 19:48:46 +08:00
Zhang Dian 2b65a39c7a Merge pull request #261 from irihitech/256-colorpicker
ColorPicker new theme.
2024-01-26 19:35:42 +08:00
Zhang Dian ca4632ef3a Merge branch 'main' into 256-colorpicker 2024-01-26 19:35:35 +08:00
Zhang Dian bc5e65ab6c Merge pull request #260 from irihitech/close
Add Clear button to several controls, and related remakes
2024-01-26 19:25:52 +08:00
Zhang Dian 74140e9db1 Merge pull request #281 from irihitech/tab
feat: add scroll tab control.
2024-01-26 19:23:49 +08:00
Zhang Dian 0bf7168cba feat: Columnar. 2024-01-26 19:08:52 +08:00
Dong Bin 69002c3ff0 Merge branch 'main' into close 2024-01-26 18:23:16 +08:00
Zhang Dian d9c39cdd05 feat: classes Line, Left, Center, Right. 2024-01-26 17:54:40 +08:00
rabbitism 1989736d45 feat: update dependency. 2024-01-25 23:22:47 +08:00
rabbitism ecbe87bf3c feat: add scroll tab control. 2024-01-25 23:19:16 +08:00
Dong Bin c9fd4c9605 Merge pull request #280 from irihitech/275-scroll
Move scrollbar local template value to style setter.
2024-01-19 23:18:18 +08:00
rabbitism 97b316c5f7 fix: change slider disable color 2024-01-19 23:07:02 +08:00
rabbitism 589ec8784b feat: move scrollbar local template value to style setter. 2023-11-21 11:36:30 +08:00
Zhang Dian 547d733f84 Merge pull request #274 from irihitech/273-datagrid
Fix datagrid disable visual.
2023-11-08 15:16:53 +08:00
rabbitism 8ff8057f07 fix: add button, upgrade version individually. 2023-11-08 15:07:08 +08:00
Dong Bin 8059614a2e Merge pull request #272 from irihitech/drm
Running on Raspberry Pi with Drm
2023-11-08 14:35:21 +08:00
rabbitism 98785417b2 fix: fix datagrid disable visual. 2023-11-08 14:25:55 +08:00
Zhang Dian 750f295c0f feat: update usage doc. 2023-11-04 01:16:36 +08:00
Zhang Dian cbea8156ad feat: StartLinuxDrm in Raspberry Pi. 2023-11-04 01:07:43 +08:00
Zhang Dian 1ad9fc2714 fix: the graphics card path in Raspberry Pi. 2023-11-04 01:03:08 +08:00
Zhang Dian a247eadd54 Merge pull request #268 from JIIIIL/main
格式化 DRM 使用方法文档
2023-10-24 15:49:56 +08:00
JIIIIL 6c80c65f62 DRM使用方法进行一些格式化 2023-10-24 14:38:36 +08:00
JIIIIL 6c0623a9e1 DRM使用方法进行一些格式化 2023-10-24 14:36:55 +08:00
JIIIIL 7646a296dc DRM使用方法进行一些格式化 2023-10-24 14:35:33 +08:00
Dong Bin b1c65da22b Merge pull request #265 from irihitech/sweep
Remove redundant property type qualifier
2023-10-11 09:50:05 +08:00
Zhang Dian 1fa66bd469 misc: remove redundant property type qualifier. 2023-10-10 00:35:53 +08:00
Dong Bin 8ca57dc45b Merge pull request #262 from irihitech/sweep
Remove Useless Resources
2023-10-09 22:06:51 +08:00
Zhang Dian f6624aca02 misc: maybe add size variants later. 2023-10-09 18:12:07 +08:00
Dong Bin 1757b4c872 Merge pull request #263 from irihitech/order
Order of Colors
2023-10-09 17:38:13 +08:00
Dong Bin 98e8411fb6 Merge pull request #264 from irihitech/headered
Add HeaderedContentControl default theme
2023-10-09 17:37:46 +08:00
Zhang Dian 72f8d51eb1 feat: add default NotificationCard icon. 2023-10-09 14:56:40 +08:00
Zhang Dian 6d09d9f5ca feat: HeaderedContentControl default style. 2023-10-09 14:34:39 +08:00
Zhang Dian ce2e104286 feat: remove useless resources. 2023-10-09 01:38:03 +08:00
Zhang Dian 49b823f094 feat: remove useless resources. 2023-10-09 00:28:17 +08:00
rabbitism ba2ce1decb feat: add ColorPicker new theme. 2023-10-04 16:12:45 +08:00
rabbitism eb9a5b960b feat: fix calendar related two way template binding. 2023-10-04 15:50:13 +08:00
rabbitism d7a7153069 feat: rename glyph name, update TextBox to use universal icon button theme. 2023-10-04 15:41:52 +08:00
rabbitism 90f982d673 feat: add clear button to CalendarDatePicker. rename many resources. 2023-10-04 15:25:37 +08:00
rabbitism 385e1e2cd5 feat: add clear button to TimePicker 2023-10-04 14:56:04 +08:00
rabbitism d638b0603d feat: uppdate to latest nightly. add clear button to ComboBox and DatePicker 2023-10-04 14:51:05 +08:00
Zhang Dian a451b6b8b6 misc: success, warning, danger order. 2023-09-06 13:47:35 +08:00
Dong Bin e563f860ad Merge pull request #250 from irihitech/upgrade
Upgrade to 11.0.1.
2023-08-30 13:38:44 +08:00
Zhang Dian b8df9c2b96 misc: upgrade to 11.0.1. 2023-08-30 11:35:01 +08:00
Dong Bin 255e21d5ae Merge pull request #249 from irihitech/enhance
Several Enhancements
2023-08-30 00:34:51 +08:00
Zhang Dian d54e4ab2b7 misc:
extract App.axaml;
Android demo display label.
2023-08-30 00:14:40 +08:00
Zhang Dian d01f39e20d misc: label order. 2023-08-29 23:46:57 +08:00
Dong Bin de578d3b99 Merge pull request #246 from irihitech/listbox
Add ListBox Themes
2023-08-17 11:26:37 +08:00
Zhang Dian bb392af76f feat: remove PureCardCheckGroupListBox because of duplication. 2023-08-16 23:28:16 +08:00
Zhang Dian a2927266b4 feat: description. 2023-08-16 21:04:30 +08:00
Zhang Dian 29dce1de51 feat: transform style resources. 2023-08-16 20:51:06 +08:00
Zhang Dian 6a4065f3b7 feat: CheckGroup. 2023-08-16 18:02:27 +08:00
Zhang Dian 430a7e56ca feat: ListBox demo. 2023-08-14 18:49:33 +08:00
Zhang Dian a1e17b0e19 feat: description. 2023-08-14 17:46:05 +08:00
Zhang Dian 8a51f98532 feat: separate resource dictionary. 2023-08-14 17:22:01 +08:00
Zhang Dian eef4e5b62a feat: ButtonRadioGroupListBox, CardRadioGroupListBox, PureCardRadioGroupListBox. 2023-08-14 16:50:50 +08:00
Zhang Dian a6fe50e6bc feat: transform style resources. 2023-08-14 11:17:07 +08:00
Zhang Dian e1588120f2 feat: RadioGroupListBox theme. 2023-08-14 11:00:03 +08:00
Zhang Dian 437e9ea42b Merge pull request #242 from irihitech/tree
Add TreeDataGrid default themes
2023-07-27 10:15:51 +08:00
rabbitism 1c98ce4682 fix: fix identation, fix error theme in demo. 2023-07-27 00:30:32 +08:00
rabbitism 17fa10333a fix: fix number nullability. 2023-07-26 23:52:29 +08:00
rabbitism 3d174bf65f feat: add hierarchical demo. 2023-07-26 16:42:17 +08:00
rabbitism 591c728d69 feat: fix dark color. add theme switch in demo. add checkbox demo. 2023-07-26 03:04:10 +08:00
rabbitism 4b2f390fa3 feat: update 2023-07-26 02:50:01 +08:00
rabbitism 38aa8e6e5b feat: WIP. 2023-07-26 01:23:05 +08:00
rabbitism b665c0c7e3 feat: initialize tree data grid projects. 2023-07-25 23:19:27 +08:00
Zhang Dian 8c42a87e49 Merge pull request #240 from irihitech/data
Replace some demo data.
2023-07-25 15:30:29 +08:00
rabbitism ead6e07b24 feat: update overview page and checkbox/radiobutton samples. 2023-07-25 13:37:40 +08:00
rabbitism 52f2b6503f feat: update overview page. 2023-07-25 13:06:55 +08:00
rabbitism 98fc651c45 feat: update some demo data. 2023-07-25 11:05:16 +08:00
rabbitism 5e94fd7bfa feat: change DataGrid demo data. 2023-07-25 10:46:50 +08:00
Dong Bin 4cf29aeefd Merge pull request #239 from irihitech/deploy
Add github pages
2023-07-25 10:29:07 +08:00
Zhang Dian 9877014512 feat: github pages. 2023-07-24 18:02:22 +08:00
Dong Bin 694a9b4c3f Merge pull request #233 from irihitech/wasm
support WASM
2023-07-21 01:01:04 +08:00
Dong Bin 07074eb5e5 Merge pull request #235 from irihitech/shared
Extract non-theme resources to shared directory
2023-07-21 00:54:14 +08:00
Zhang Dian eaff3ebad0 fix: restore the missing resources. 2023-07-19 11:50:30 +08:00
Zhang Dian 95c7b9a807 feat: extract non-theme resources of ColorPicker and DataGrid. 2023-07-19 11:16:10 +08:00
Zhang Dian 54bdd69b2a fix: restore BoxShadows. 2023-07-19 03:29:23 +08:00
Zhang Dian cb9bf96b73 feat: rename theme index file. 2023-07-19 02:51:19 +08:00
Zhang Dian 3273fb1e91 feat: extract non-theme resources to shared directory. 2023-07-19 02:40:17 +08:00
Zhang Dian a8b141b402 Merge branch 'main' into wasm 2023-07-17 22:56:59 +08:00
Zhang Dian 2132a4322f Merge pull request #232 from JIIIIL/main
TreeView添加多重嵌套绑定示例
2023-07-17 21:29:53 +08:00
ImLuJian c59e47409b Treeview示例用Grid布局 2023-07-17 20:21:38 +08:00
ImLuJian 816af5a7b1 TreeView添加多重嵌套绑定示例 2023-07-15 11:20:42 +08:00
Dong Bin e3bf028b7f Merge pull request #231 from irihitech/label
improve Label Demo
2023-07-12 14:02:17 +08:00
Zhang Dian ad3aac5978 feat: add color block into ScrollViewerDemo. 2023-07-11 17:40:57 +08:00
Zhang Dian b19a576dc9 fix: label color order. 2023-07-11 17:38:31 +08:00
Dong Bin 00130d6cf7 Merge pull request #229 from irihitech/header
fix: delete default height and width, fix RowDefinitions.
2023-07-10 17:44:44 +08:00
Zhang Dian 86b437b3b0 fix: delete default height and width, fix RowDefinitions. 2023-07-10 17:37:19 +08:00
Zhang Dian e640089aab Merge pull request #228 from irihitech/226-typography
feat: improve TextBlock demo.
2023-07-10 17:33:46 +08:00
Zhang Dian 7a483d6de3 fix: delete binding. 2023-07-10 17:33:17 +08:00
rabbitism c713888062 fix: fix textblock alignment. 2023-07-10 17:03:29 +08:00
rabbitism b9a16e89d6 feat: improve TextBlock demo. 2023-07-10 00:22:02 +08:00
Dong Bin 2dc6e31d5a Merge pull request #227 from JIIIIL/main
添加DRM启动方式,在VM虚拟机上测试了一下Ubuntu18.04 Server,可以启动
2023-07-09 23:12:46 +08:00
rabbitism db7f199003 fix: fix version reference. 2023-07-09 23:06:08 +08:00
rabbitism 201610b9ab feat: update references. 2023-07-09 23:03:11 +08:00
ImLuJian 112d1e3dd4 还原desktop项目的文件 2023-07-09 09:52:28 +08:00
ImLuJian 5df492b20e Merge branch 'main' of https://github.com/JIIIIL/Semi.Avalonia 2023-07-09 09:27:21 +08:00
ImLuJian 1b7c30c557 添加DRM启动demo和使用方法 2023-07-09 09:24:41 +08:00
ImLuJian 40d179d4b4 添加DRM启动方式,在VM虚拟机上测试了一下Ubuntu18.04 Server,可以启动 2023-07-08 17:57:44 +08:00
Zhang Dian 367aa0a386 Merge pull request #225 from irihitech/android
feat: fix android demo start activity issue.
2023-07-08 02:44:29 +08:00
rabbitism 37daceca61 feat: fix android start activity issue. 2023-07-08 00:06:11 +08:00
Dong Bin 2f04a72c9f Merge pull request #224 from irihitech/opacity
fix: fix the wrong opacity values.
2023-07-07 18:29:44 +08:00
Zhang Dian 8f5b9f6c47 fix: fix the wrong opacity values. 2023-07-07 17:21:56 +08:00
rabbitism ab8dacec4b feat: update documentation. 2023-07-05 19:01:12 +08:00
Dong Bin 5d6d4de152 Merge pull request #217 from irihitech/11.0
feat: upgrade to v11.
2023-07-05 18:22:56 +08:00
rabbitism 0c21bb264f feat: upgrade to v11. 2023-07-05 18:14:18 +08:00
Zhang Dian 8ae2d10f2e Merge pull request #213 from irihitech/rc2.1
Upgrade to RC 2.1
2023-07-04 00:28:01 +08:00
Zhang Dian 19d48f4a1f Merge pull request #215 from irihitech/scroll
Update ScrollBar visual Style
2023-07-04 00:24:56 +08:00
Zhang Dian 81565cac97 feat: reduce the size of icon on :pressed state. 2023-07-04 00:24:00 +08:00
Zhang Dian b320c88e9e feat: add thumb :pointerover color. 2023-07-03 22:50:01 +08:00
Zhang Dian e76c480f34 Merge pull request #214 from irihitech/progress
Progress
2023-07-03 21:28:08 +08:00
rabbitism 11452fd21f fix: fixes #208 2023-07-03 17:29:41 +08:00
rabbitism 14c2ff6c02 feat: update ScrollBar visual styles. 2023-07-03 17:13:01 +08:00
Zhang Dian 7a701a9c04 feat: add Primary, Secondary, Tertiary color. 2023-07-03 16:28:29 +08:00
Zhang Dian 7e1376f57e fix: fix default ProgressBar background color. 2023-07-03 16:28:00 +08:00
rabbitism ae237f38fb fix: fix text visibility. 2023-07-03 11:59:42 +08:00
rabbitism 93071d3715 feat: add color styles. 2023-07-03 11:50:40 +08:00
rabbitism 27e344950a feat: add progress ring. 2023-07-03 11:49:11 +08:00
rabbitism 8bdfe2b7de fix: remove invalid fontsize resource. 2023-07-01 21:21:54 +08:00
rabbitism e631f3fa2d fix: fix #210 2023-07-01 19:55:40 +08:00
rabbitism 793c2b273f feat: upgrade to rc2.1 2023-07-01 19:51:33 +08:00
Dong Bin c79f696278 Merge pull request #205 from irihitech/CheckBox
CheckBox Border & SimpleCheckBox theme
2023-06-07 22:11:17 +08:00
rabbitism 5df262bc6d misc: remove radio button demo. 2023-06-07 22:10:04 +08:00
rabbitism 7a6ce6f07e misc: remove unnecessary demo. 2023-06-07 22:07:55 +08:00
Dong Bin 7335d51e7a Merge pull request #207 from irihitech/206-sg-error
Remove redundant proj file reference for Loongson-UOS compilation.
2023-06-07 21:52:21 +08:00
rabbitism f949793e10 feat: remove redundant proj file reference. 2023-06-07 21:50:21 +08:00
Zhang Dian 43b0f5b044 feat: add SimpleCheckBox theme. 2023-06-06 16:43:45 +08:00
Zhang Dian 5021ac683b feat: add demo. 2023-06-06 16:33:27 +08:00
Zhang Dian 7a040120b5 feat: adjust CheckBox Border style. 2023-06-05 22:47:00 +08:00
Zhang Dian 232e6e4b41 feat: upgrade to support wasm. 2023-06-04 23:44:23 +08:00
Zhang Dian 6d3514308a Merge pull request #202 from irihitech/199-fix-combobox-selected-item-background-in-dark-mode
Fix: fix combobox selected background.
2023-06-04 23:25:49 +08:00
rabbitism f7bcfb872d fix: fix combobox selected background. 2023-06-04 00:21:10 +08:00
Dong Bin 7c1fd71e43 Merge pull request #196 from irihitech/typo
fix: fix control typo.
2023-06-01 22:08:48 +08:00
Zhang Dian 8c8e13701b fix: fix control typo. 2023-06-01 17:30:22 +08:00
Zhang Dian ff2ff9c462 Merge pull request #195 from irihitech/preview
Upgrade to Avalonia RC1
2023-06-01 11:12:51 +08:00
Zhang Dian 20307f0c1b fix: add missing success button. 2023-06-01 10:41:21 +08:00
rabbitism 21a07b703d misc: update a demo color. 2023-06-01 10:25:18 +08:00
rabbitism e6a3274db9 docs: update docs. 2023-06-01 10:09:41 +08:00
rabbitism f72ec20576 misc: upgrade to 1.1 2023-06-01 09:49:51 +08:00
rabbitism 071976dd05 misc: upgrade to rc1 2023-06-01 09:46:06 +08:00
rabbitism 4842270a96 fix: fix scrollviewer binding according to https://github.com/AvaloniaUI/Avalonia/pull/11456 2023-05-30 12:09:24 +08:00
rabbitism 49c95dcb5e feat: upgrade to latest nightly. 2023-05-30 11:10:24 +08:00
Dong Bin 6c16d43980 Merge pull request #193 from irihitech/taglabel
fix: fix wrong colors.
2023-05-30 10:28:21 +08:00
Zhang Dian 3289295278 fix: fix wrong colors. 2023-05-28 23:30:45 +08:00
Zhang Dian 30d9dcb1e8 Merge pull request #191 from irihitech/190-text-color
fix: fix button and label text color in dark mode.
2023-05-26 20:47:08 +08:00
Zhang Dian c2b5b01f34 fix: togglebutton text color in dark mode. 2023-05-26 20:43:18 +08:00
rabbitism e999aeac23 fix: fix button and label text color in dark mode. 2023-05-26 20:31:57 +08:00
Dong Bin da025e97c5 Merge pull request #188 from irihitech/hoxfix
fix: fix missing template.
2023-05-26 20:19:33 +08:00
rabbitism 9d17cd0087 misc: add binding demo. 2023-05-26 20:18:43 +08:00
Zhang Dian 5d8297a392 fix: fix missing template. 2023-05-26 15:58:37 +08:00
Dong Bin 90a1b90b9a Merge pull request #186 from irihitech/34-HeaderedContentControl
Add a theme named GroupBox for HeaderedContentControl.
2023-05-11 00:11:50 +08:00
Zhang Dian 5475ad8bcf feat: rename theme key. 2023-05-11 00:07:18 +08:00
Zhang Dian f29e60712b feat: specify CornerRadius. 2023-05-10 23:59:47 +08:00
Zhang Dian cefa6bb4df feat: Add a theme for HeaderedContentControl as GroupBox. 2023-05-10 23:50:01 +08:00
Zhang Dian 503af76f0c Merge pull request #184 from irihitech/preview8
Preview 8
2023-05-09 22:53:12 +08:00
rabbitism a4b9d8724e docs: update readme and package release note. 2023-05-09 22:39:38 +08:00
rabbitism b5a9c8f53e fix: add carousel indicator back. 2023-05-09 22:24:51 +08:00
rabbitism b3737bfee6 fix: fix color picker display issue. fix various binding error (although they still compile) 2023-05-09 22:01:43 +08:00
rabbitism f68985eb92 feat: update version, fix progress bar binding. 2023-05-09 21:24:51 +08:00
Dong Bin e556c8ed3f Merge pull request #182 from irihitech/168-margin
fix: MenuFlyoutPresenter margin.
2023-05-09 21:19:05 +08:00
rabbitism 7e0d85f25f fix: align context menu and menu flyout. 2023-05-09 21:17:41 +08:00
rabbitism 983e7461c1 fix: fix border shadow display. 2023-05-09 21:12:24 +08:00
Dong Bin 66e1bf1439 Merge pull request #183 from irihitech/159-lightflyout
feat: add LightFlyout theme.
2023-05-09 20:54:54 +08:00
rabbitism 5d47829b6c feat: remove border and shadow. 2023-05-09 20:53:57 +08:00
Dong Bin df103bc972 Merge pull request #181 from irihitech/91-successbutton
feat: add Success Button style.
2023-05-09 20:44:51 +08:00
Zhang Dian a36a088983 feat: add LightFlyout theme. 2023-05-09 19:13:56 +08:00
Zhang Dian 28ecabdbbc fix: MenuFlyoutPresenter margin. 2023-05-09 17:56:22 +08:00
Zhang Dian e40bc531e4 feat: add Success Button style. 2023-05-09 17:42:08 +08:00
Dong Bin 37746e38f7 Merge pull request #180 from irihitech/178-datavalidationerror
Add DataValidationError to Input Control
2023-05-08 23:26:08 +08:00
rabbitism 97b5eb7a04 feat: add tooltip error theme. 2023-05-08 22:53:51 +08:00
rabbitism 6eb405abe2 feat: add textbox internal style, fix various internal textbox styles. 2023-05-08 22:15:17 +08:00
Zhang Dian 4ba6ea324d fix: fix DatePicker&TimePicker MinHeight property. 2023-05-08 17:57:43 +08:00
Zhang Dian e8ef024d59 feat: DatePicker&TimePicker validations. 2023-05-08 10:19:58 +08:00
Zhang Dian cece722496 feat: add validation errors to CalendarDatePicker. 2023-05-07 00:11:52 +08:00
rabbitism ae0994aa93 feat: add hacks for internal textbox error display. 2023-05-06 23:17:55 +08:00
Zhang Dian d75a4c549e feat: add validation errors to NumericUpDown. 2023-05-06 23:17:53 +08:00
Zhang Dian 45f3470d76 feat: add validation errors to ComboBox. 2023-05-06 17:30:26 +08:00
rabbitism bac20dbdbf feat: simplify slider template, add error. 2023-05-05 10:52:08 +08:00
Zhang Dian 7f89b6104c Merge pull request #177 from irihitech/176-managedfilechooser
Fix ManagedFileChooser crash issue
2023-05-05 09:54:25 +08:00
rabbitism 5f7e1510f1 feat: move validation errors demo to individual page. 2023-05-05 02:31:25 +08:00
rabbitism 127bd1446a feat: add validation errors to textbox. 2023-05-05 02:21:33 +08:00
rabbitism aee8042af8 feat: add resources. 2023-05-05 01:44:38 +08:00
rabbitism 64a9f9e25a feat: change to new converter to avoid resource dictionary key issue. 2023-05-05 01:07:00 +08:00
Dong Bin bbedbdccd3 Merge pull request #175 from irihitech/scroll
ScrollViewer Update
2023-04-27 10:50:54 +08:00
rabbitism 4758fc6547 feat: fix scrollviewer theme, add new theme, add demo. 2023-04-27 10:25:39 +08:00
Dong Bin 17676823ff Merge pull request #169 from irihitech/nightly
Update to Avalonia preview 7
2023-04-25 12:05:31 +08:00
rabbitism bd0d0f261a docs: update docs. 2023-04-25 12:03:35 +08:00
rabbitism 8cb67d94e2 feat: migrate to preview7 2023-04-25 11:04:37 +08:00
rabbitism 29f7af5bd0 feat: move to props file. 2023-04-23 01:41:42 +08:00
rabbitism 39b17f52d1 feat: update to latest nightly. 2023-04-23 01:10:23 +08:00
Dong Bin 95df47eeba Merge pull request #167 from irihitech/165-splitbutton-theme
SplitButton Styles
2023-04-04 23:01:57 +08:00
Zhang Dian 2c41fe862b feat: add SolidSplitButton and BorderlessSplitButton themes. 2023-04-04 15:59:42 +08:00
Zhang Dian 593d0d3fa2 feat: add size classes. 2023-04-04 15:58:47 +08:00
Dong Bin a425bceddb Merge pull request #166 from irihitech/CICD
GitHub Actions
2023-04-04 13:56:42 +08:00
Zhang Dian 80c6380ce9 feat: CI package. 2023-04-04 02:19:13 +08:00
Zhang Dian 0ae04b69f5 fix: fix index typo. 2023-03-30 23:04:16 +08:00
rabbitism d952f901f2 doc: update docs for version preview6.1 2023-03-28 23:55:11 +08:00
Dong Bin 566cec65be Merge pull request #161 from irihitech/160-togglebutton-foreground
Togglebutton disabled Foreground
2023-03-28 23:30:02 +08:00
Zhang Dian 0af182680f Merge pull request #162 from irihitech/150-radiobutton
RadioButton and CheckBox alignment issue
2023-03-28 23:27:35 +08:00
rabbitism efe00ebcf4 fix: fix checkbox card default vertical alignment. 2023-03-28 23:14:27 +08:00
rabbitism 2662059c6d fix: fix template and foreground. 2023-03-28 23:04:44 +08:00
rabbitism 04dbe2d9ce fix: fix checkbox vertical alignment issue. 2023-03-28 22:06:47 +08:00
rabbitism 4db7bbf522 fix: fix radiobutton vertical alignment. 2023-03-28 22:00:32 +08:00
Zhang Dian 97a0f21186 mix: move disabled Foreground resources. 2023-03-28 22:00:15 +08:00
Zhang Dian 698866ab43 feat: ToggleButton Foreground should the same as BorderBrush. 2023-03-28 21:27:14 +08:00
Zhang Dian 6cafdd6e1c Merge pull request #158 from irihitech/numeric
Additional Fix of Numeric Height fix
2023-03-27 23:54:50 +08:00
Dong Bin fd49eef668 Merge pull request #157 from irihitech/144-radiobutton-styles
Synchronize Styles for RadioButton and CheckBox
2023-03-27 23:45:03 +08:00
rabbitism 2cf623ddf9 fix: update colors. 2023-03-27 23:42:02 +08:00
rabbitism 7a89d503d7 fix: add more fix. 2023-03-27 23:35:33 +08:00
rabbitism 31ba4c9fbe fix: fix card disabled style. 2023-03-27 23:32:24 +08:00
rabbitism f30e027a19 fix: fix card disabled foreground 2023-03-27 23:26:44 +08:00
rabbitism ffd1c7d89a fix: fix height issue. 2023-03-27 23:03:27 +08:00
Zhang Dian 2bb175bb16 feat: checked ButtonRadioButton disable style. 2023-03-27 19:55:54 +08:00
Zhang Dian 3124c5e2cc feat: disabled ButtonRadioButton style. 2023-03-27 19:43:11 +08:00
Zhang Dian e79044b040 feat: ButtonRadioButton demo. 2023-03-27 19:20:17 +08:00
Zhang Dian f63abf6901 mix: format Card pseudoclass styles. 2023-03-27 18:54:35 +08:00
Zhang Dian fa9250540b mix: format pseudoclass styles. 2023-03-27 18:44:27 +08:00
Zhang Dian 08c06199ae feat: card RadioButton colors. 2023-03-27 18:25:07 +08:00
Zhang Dian a4713ca21b feat: original RadioButton disabled style. 2023-03-27 17:26:31 +08:00
Zhang Dian cc2ab6ee9a feat: relayout RadioButtonDemo. 2023-03-27 16:08:58 +08:00
Zhang Dian 0cee18f507 feat: relayout CheckBoxDemo. 2023-03-27 16:00:27 +08:00
Zhang Dian a015bbe3e0 fix: split buttons. 2023-03-27 15:35:43 +08:00
Zhang Dian afb0fbcea6 feat: add CheckBox and RadioButton overview. 2023-03-27 15:31:26 +08:00
Zhang Dian 5f7e84bf08 Merge pull request #154 from irihitech/0326
0326 release fixes.
2023-03-27 14:53:42 +08:00
Zhang Dian 2ad76cd737 fix: fix PointOver spell. 2023-03-27 14:49:37 +08:00
Zhang Dian 60a3fb6019 Merge pull request #156 from irihitech/color
Color Palette and ColorPicker update
2023-03-27 14:33:06 +08:00
Zhang Dian 6d338fa31c Merge pull request #155 from irihitech/153-timepicker
Fix TimePicker PeriodPanel crush issue.
2023-03-27 14:03:33 +08:00
rabbitism f026431ca9 feat: update readme. 2023-03-27 11:38:35 +08:00
rabbitism e6531d89eb feat: add color resource copy. 2023-03-27 11:25:47 +08:00
rabbitism fd33972dda feat: grouped as 2d array. 2023-03-26 22:13:31 +08:00
Zhang Dian 0e76c09b8e feat: split colors. 2023-03-26 22:04:23 +08:00
Zhang Dian d1739cc88f feat: copy colors. 2023-03-26 21:46:14 +08:00
Zhang Dian 6f4c0dd5cd feat: color order. 2023-03-26 21:37:32 +08:00
rabbitism 1a512e589d feat: Add Dark/Light color palette. 2023-03-26 20:57:03 +08:00
rabbitism 43305be6bf feat: update dark palette reference. 2023-03-26 20:32:55 +08:00
rabbitism 15ce60bcdb feat: change functional brushes to use color resource. 2023-03-26 20:23:22 +08:00
rabbitism 3639239dfe feat: add color resources, change brush definition to color reference. 2023-03-26 20:04:04 +08:00
rabbitism 9f43baa039 fix: improve nullable annotation. 2023-03-26 19:38:12 +08:00
rabbitism c34d240874 feat: update date/time panel item height to avoid crush. 2023-03-26 18:33:54 +08:00
rabbitism a3571192a9 fix: fix numeric height issue. 2023-03-26 18:27:04 +08:00
rabbitism c1a9a49cd7 feat: fix PointerOver spell. 2023-03-26 18:22:38 +08:00
rabbitism 016160dee8 feat: improve TreeViewItem padding. 2023-03-26 18:15:59 +08:00
rabbitism 6885575c85 misc: add license expression in project props. 2023-03-26 14:19:17 +08:00
rabbitism 2ce3dd7445 fix: fix calendar datepicker border corner issue. 2023-03-26 14:16:27 +08:00
rabbitism 28e70736b2 fix: change IBeam to Ibeam 2023-03-26 14:07:32 +08:00
Dong Bin e193bfc697 Merge pull request #148 from irihitech/146-togglebutton-styles
DropDownButton typo
2023-03-25 23:43:46 +08:00
Zhang Dian 41e57b5034 fix: use DropDownButton instead of DropdownButton. 2023-03-25 21:34:55 +08:00
Zhang Dian 117fce4a61 feat: DropDownButton and hand Cursor. 2023-03-25 21:30:01 +08:00
Dong Bin c852219f39 Merge pull request #147 from irihitech/146-togglebutton-styles
ToggleButton Styles
2023-03-25 20:52:24 +08:00
Zhang Dian f9ae36b7e1 feat: add Hand Cursor. 2023-03-25 19:50:36 +08:00
Zhang Dian 48ea283c65 fix: disabled Styles. 2023-03-25 17:51:10 +08:00
Zhang Dian 318f9fb510 fix: pressed ToggleButton BorderBrush Styles. 2023-03-25 17:50:43 +08:00
Zhang Dian 153109c0ca fix: increase disabled Style priority. 2023-03-25 12:14:50 +08:00
Zhang Dian 3afa528cac fix: add missing Primary Classes. 2023-03-25 11:44:57 +08:00
Zhang Dian 799875e38b fix: use Danger Classes instead of Error. 2023-03-25 11:33:22 +08:00
Dong Bin 49e234bf30 Merge pull request #145 from irihitech/enhancement
Protect Eyesight
2023-03-24 09:26:51 +08:00
Zhang Dian 1ddf35b25b fix: specify Foreground. 2023-03-24 01:06:14 +08:00
Zhang Dian c90f541228 fix: use CardBorder theme instead of yellow Background. 2023-03-24 01:05:26 +08:00
Zhang Dian ed1b417332 Merge pull request #141 from irihitech/140-menu-open
Various fixes after preview 6
2023-03-22 15:50:11 +08:00
rabbitism c28ff754f5 fix: fix expand icon color. 2023-03-22 15:34:02 +08:00
rabbitism 2aea7b3e84 fix: fix various placement issue. 2023-03-22 14:54:48 +08:00
Zhang Dian c7fc804ec1 Merge pull request #137 from irihitech/preview6
Upgrade to Preview6
2023-03-22 14:14:50 +08:00
rabbitism cd533c65bc fix: fix toggle switch font size. 2023-03-22 13:25:07 +08:00
rabbitism b0cba0e5a9 misc: update release info. 2023-03-22 12:58:23 +08:00
rabbitism 5a9596a2be fix: a temporary fix of grid splitter preview. 2023-03-22 12:24:49 +08:00
rabbitism 33db3bf0d4 fix: fix carousel collection conversion. 2023-03-22 12:02:02 +08:00
rabbitism 3473c754a2 fix: fix toggle switch foreground issue. 2023-03-22 11:50:38 +08:00
rabbitism 34f0e53627 fix: fix date/time picker color. 2023-03-22 11:49:28 +08:00
rabbitism 4f28569781 fix: fix menu button foreground issue. 2023-03-22 11:43:31 +08:00
rabbitism 874c4ab260 fix: fix combobox default colors. 2023-03-22 11:01:41 +08:00
rabbitism 3fd209f180 fix: fix dropdownbutton glyph color. 2023-03-22 10:54:01 +08:00
rabbitism 7c93f635e3 fix: fix calendar date picker watermark colors. 2023-03-22 10:48:25 +08:00
rabbitism 0e3170eba2 feat: upgrade to preview6 2023-03-22 09:40:08 +08:00
Dong Bin 6376d11a25 Merge pull request #135 from irihitech/android
Android Start Mode
2023-03-21 19:30:26 +08:00
rabbitism e48e72ec37 feat: remove theme 2023-03-21 19:25:31 +08:00
rabbitism 9f61d67141 feat: remove fluent theme. 2023-03-21 19:21:22 +08:00
rabbitism eca7d32ba9 feat: Add EmbeddableControlRoot 2023-03-21 19:19:51 +08:00
rabbitism 2461c4a5c1 fix: temporarily add fluent back. 2023-03-20 23:52:08 +08:00
rabbitism 0657c99f31 misc: try to fix android app. 2023-03-20 23:14:50 +08:00
Zhang Dian ba2089aed9 feat: Android start mode. 2023-03-20 19:57:51 +08:00
rabbitism 1505eacb78 misc: update docs. 2023-03-19 22:50:22 +08:00
345 changed files with 12979 additions and 6042 deletions
+58
View File
@@ -0,0 +1,58 @@
name: Pack
on:
push:
branches: [ "action/pack" ]
pull_request:
branches: [ "action/pack" ]
jobs:
nuget_desktop:
runs-on: windows-latest
steps:
- name: Checkout
uses: actions/checkout@v4.1.1
- name: Nuget Semi.Avalonia
run: dotnet pack ./src/Semi.Avalonia -o ./nugets
- name: Nuget Semi.Avalonia.ColorPicker
run: dotnet pack ./src/Semi.Avalonia.ColorPicker -o ./nugets
- name: Nuget Semi.Avalonia.DataGrid
run: dotnet pack ./src/Semi.Avalonia.DataGrid -o ./nugets
- name: Nuget Semi.Avalonia.TreeDataGrid
run: dotnet pack ./src/Semi.Avalonia.TreeDataGrid -o ./nugets
- name: Desktop
run: dotnet publish ./demo/Semi.Avalonia.Demo.Desktop -r win-x64 -c Release /p:PublishSingleFile=true /p:IncludeNativeLibrariesForSelfExtract=true --self-contained true
- name: Upload a Build Artifact
uses: actions/upload-artifact@v4.3.1
with:
name: nuget_desktop
path: |
./nugets
./**/publish/*.exe
android:
runs-on: windows-latest
steps:
- name: Checkout
uses: actions/checkout@v4.1.1
- name: CD Android
run: cd ./demo/Semi.Avalonia.Demo.Android
- name: Restore Dependencies
run: dotnet restore
- name: Build
run: dotnet publish ./demo/Semi.Avalonia.Demo.Android -c Release -f net7.0-android --no-restore
- name: Upload a Build Artifact
uses: actions/upload-artifact@v4.3.1
with:
name: android
path: ./**/publish/*Signed.apk
+53
View File
@@ -0,0 +1,53 @@
name: Deploy to GitHub Pages
env:
PROJECT_PATH: demo/Semi.Avalonia.Demo.Web/Semi.Avalonia.Demo.Web.csproj
OUTPUT_PATH: demo/Semi.Avalonia.Demo.Web/bin/Release/net7.0/browser-wasm/AppBundle
on:
push:
branches: [ "action/deploy" ]
pull_request:
branches: [ "action/deploy" ]
jobs:
deploy-to-github-pages:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4.1.1
- name: Setup .NET 7
uses: actions/setup-dotnet@v4
with:
dotnet-version: 7.0.405
- name: Install wasm-tools
run: dotnet workload install wasm-tools wasm-tools-net7
- name: Install DotNetCompress
run: dotnet tool install --global DotNetCompress --version 3.0.0 --no-cache
- name: Publish .NET Project
run: dotnet publish $PROJECT_PATH -c Release -o 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
- name: Compress Output using Brotli
run: DotNetCompress -d $OUTPUT_PATH -p "*.dll" "*.js" "*.wasm" --format br --threads 4
- name: Compress Output using GZip
run: DotNetCompress -d $OUTPUT_PATH -p "*.dll" "*.js" "*.wasm" --format gz --threads 4
- name: Add .nojekyll file
run: touch $OUTPUT_PATH/.nojekyll
- name: Commit wwwroot to GitHub Pages
uses: JamesIves/github-pages-deploy-action@v4.5.0
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
BRANCH: gh-pages
FOLDER: ${{ env.OUTPUT_PATH }}
+6
View File
@@ -0,0 +1,6 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="SC-Single" type="DotNetFolderPublish" factoryName="Publish to folder">
<riderPublish configuration="Release" include_native_libs_for_self_extract="true" platform="Any CPU" produce_single_file="true" runtime="win-x64" self_contained="true" target_folder="$PROJECT_DIR$/demo/Semi.Avalonia.Demo.Desktop/bin/Release/net7.0/win-x64/publish" target_framework="net7.0" uuid_high="3088527218258560748" uuid_low="-8649338673481336678" />
<method v="2" />
</configuration>
</component>
+62 -23
View File
@@ -1,18 +1,24 @@
# Semi.Avalonia
# Semi Avalonia
[![Semi Avalonia](https://img.shields.io/nuget/v/Semi.Avalonia.svg?color=red&style=flat-square)](https://www.nuget.org/packages/Semi.Avalonia/)
[![Semi Avalonia](https://img.shields.io/nuget/dt/Semi.Avalonia.svg?style=flat-square)](https://www.nuget.org/packages/Semi.Avalonia/)
[中文](./README_CN.md)
Avalonia Theme inspired by Semi Design
> Semi.Avalonia is still in very early stage. Please don't use in production.
If you are looking for more customized controls, Please try [Ursa](https://github.com/irihitech/Ursa.Avalonia)
# How to Use
![Light](./docs/demo.jpg)
## How to Use
### Installation
## Installation
```bash
dotnet add package Semi.Avalonia --version 0.1.0-preview5.3
dotnet add package Semi.Avalonia --version 11.0.7
```
Include Semi Design Styles in application:
```xaml
@@ -21,34 +27,74 @@ Include Semi Design Styles in application:
</Application.Styles>
```
That's all.
That's all.
ColorPicker, DataGrid and TreeDataGrid are distributed in separated packages. Please install if you need.
DataGrid and ColorPicker are distributed in separated packages. Please install if you need.
```bash
dotnet add package Semi.Avalonia.ColorPicker --version 0.1.0-preview5.2
dotnet add package Semi.Avalonia.DataGrid --version 0.1.0-preview5.2
dotnet add package Semi.Avalonia.ColorPicker --version 11.0.7
dotnet add package Semi.Avalonia.DataGrid --version 11.0.7
dotnet add package Semi.Avalonia.TreeDataGrid --version 11.0.7
```
```xaml
<Application.Styles>
<StyleInclude Source="avares://Semi.Avalonia.DataGrid/Index.axaml" />
<StyleInclude Source="avares://Semi.Avalonia.ColorPicker/Index.axaml" />
<StyleInclude Source="avares://Semi.Avalonia.DataGrid/Index.axaml" />
<StyleInclude Source="avares://Semi.Avalonia.TreeDataGrid/Index.axaml" />
</Application.Styles>
```
If AOT publishing is required, you need to include the rd.xml file in your project:
```xml
<ItemGroup>
<RdXmlFile Include="rd.xml"/>
</ItemGroup>
```
The contents of the rd.xml file should be as follows:
```xml
<?xml version="1.0" encoding="utf-8"?>
<Directives>
<!--
This file is part of RdXmlLibrary project.
Visit https://github.com/kant2002/rdxmllibrary for latest version.
If you have modifications specific to this Nuget package,
please contribute back.
-->
<Application>
<Assembly Name="Avalonia.Markup.Xaml" Dynamic="Required All"/>
<Assembly Name="Semi.Avalonia" Dynamic="Required All"/>
<!-- If you don't use these, please don't include them.
<Assembly Name="Semi.Avalonia.DataGrid" Dynamic="Required All"/>
<Assembly Name="Semi.Avalonia.ColorPicker" Dynamic="Required All"/>
-->
</Application>
</Directives>
```
## Demo
You can always download demo executable to play around with Semi Avalonia Themes.
https://github.com/irihitech/Semi.Avalonia/releases
<https://github.com/irihitech/Semi.Avalonia/releases>
## Support
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)
## Version compatibility
| Semi Design Version | Avalonia Version|
|:--------------------|:---|
| 0.1.0-preview3 |11.0-preview4|
| 0.1.0-preview5.x |11.0-preview5|
| Semi Design Version | Avalonia Version |
|:--------------------|:-----------------|
| 11.0.7 | >=11.0.7 |
| 11.0.1 | <=11.0.6 |
## TODO
* DataValidationErrors
* FocusAdorner
## Credits
@@ -63,10 +109,3 @@ https://github.com/irihitech/Semi.Avalonia/releases
[CommunityToolKit](https://github.com/CommunityToolkit/dotnet)
## Screenshot
Light Mode
![Light](./docs/Light.png)
Dark Mode
![Dark](./docs/Dark.png)
+113
View File
@@ -0,0 +1,113 @@
# Semi Avalonia
[![Semi Avalonia](https://img.shields.io/nuget/v/Semi.Avalonia.svg?color=red&style=flat-square)](https://www.nuget.org/packages/Semi.Avalonia/)
[![Semi Avalonia](https://img.shields.io/nuget/dt/Semi.Avalonia.svg?style=flat-square)](https://www.nuget.org/packages/Semi.Avalonia/)
[English](./README.md)
Avalonia UI 控件主题,灵感来自 Semi Design
如果您希望使用更多的拓展控件,欢迎尝试 [Ursa](https://github.com/irihitech/Ursa.Avalonia)
![Light](./docs/demo.jpg)
## 如何使用
### 安装
```bash
dotnet add package Semi.Avalonia --version 11.0.7
```
在样式中引用 Semi 主题:
```xaml
<Application.Styles>
<StyleInclude Source="avares://Semi.Avalonia/Themes/Index.axaml" />
</Application.Styles>
```
这样就可以了。
ColorPicker DataGrid 和 TreeDataGrid 的样式单独分发,如果需要请安装并引用。
```bash
dotnet add package Semi.Avalonia.ColorPicker --version 11.0.7
dotnet add package Semi.Avalonia.DataGrid --version 11.0.7
dotnet add package Semi.Avalonia.TreeDataGrid --version 11.0.7
```
```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" />
</Application.Styles>
```
如果需要进行 AOT 发布,则需要在项目中包含 rd.xml 文件:
```xml
<ItemGroup>
<RdXmlFile Include="rd.xml"/>
</ItemGroup>
```
rd.xml 文件的内容如下:
```xml
<?xml version="1.0" encoding="utf-8"?>
<Directives>
<!--
This file is part of RdXmlLibrary project.
Visit https://github.com/kant2002/rdxmllibrary for latest version.
If you have modifications specific to this Nuget package,
please contribute back.
-->
<Application>
<Assembly Name="Avalonia.Markup.Xaml" Dynamic="Required All"/>
<Assembly Name="Semi.Avalonia" Dynamic="Required All"/>
<!-- If you don't use these, please don't include them.
<Assembly Name="Semi.Avalonia.DataGrid" Dynamic="Required All"/>
<Assembly Name="Semi.Avalonia.ColorPicker" Dynamic="Required All"/>
-->
</Application>
</Directives>
```
## 示例
您可以从 Semi Avalonia 的 release 页下载并试用 Semi Avalonia 的展示应用。
<https://github.com/irihitech/Semi.Avalonia/releases>
## 社区支持
我们提供有限度的免费社区支持,如果您有任何问题或建议,除了在GitHub上提交issue或发起讨论,也欢迎加入我们的飞书交流群:
![FeiShu](./docs/community-support.png)
## 版本兼容性
| Semi Design Version | Avalonia Version |
|:--------------------|:-----------------|
| 11.0.7 | >=11.0.7 |
| 11.0.1 | <=11.0.6 |
## 代办事项
* FocusAdorner
## 致谢
[Semi Design](https://semi.design/)
[Avalonia](https://github.com/AvaloniaUI/Avalonia)
[FluentAvalonia](https://github.com/amwx/FluentAvalonia)
[Material Design Icons](https://pictogrammers.com/library/mdi/)
[CommunityToolKit](https://github.com/CommunityToolkit/dotnet)
+30 -2
View File
@@ -20,9 +20,17 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Semi.Avalonia.Demo.Web", "d
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Semi.Avalonia.Demo", "demo\Semi.Avalonia.Demo\Semi.Avalonia.Demo.csproj", "{D789AEDB-EBDF-4450-8E8E-B4A03FB257B0}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Semi.Avalonia.DataGrid", "src\Semi.Avalonia.DataGrid\Semi.Avalonia.DataGrid.csproj", "{8A90C292-8761-4F70-8E1F-EFC097FEADB3}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Semi.Avalonia.DataGrid", "src\Semi.Avalonia.DataGrid\Semi.Avalonia.DataGrid.csproj", "{8A90C292-8761-4F70-8E1F-EFC097FEADB3}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Semi.Avalonia.ColorPicker", "src\Semi.Avalonia.ColorPicker\Semi.Avalonia.ColorPicker.csproj", "{0B64C2F2-FDCD-48E4-AB9D-7CCC63B006CA}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Semi.Avalonia.ColorPicker", "src\Semi.Avalonia.ColorPicker\Semi.Avalonia.ColorPicker.csproj", "{0B64C2F2-FDCD-48E4-AB9D-7CCC63B006CA}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Semi.Avalonia.Demo.Android", "demo\Semi.Avalonia.Demo.Android\Semi.Avalonia.Demo.Android.csproj", "{0C81FC1C-5D2D-478A-9876-923A0C85EC2F}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Semi.Avalonia.Demo.Drm", "demo\Semi.Avalonia.Demo.Drm\Semi.Avalonia.Demo.Drm.csproj", "{86D93406-412A-4429-93B2-92AAD0407784}"
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
@@ -54,6 +62,23 @@ Global
{0B64C2F2-FDCD-48E4-AB9D-7CCC63B006CA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0B64C2F2-FDCD-48E4-AB9D-7CCC63B006CA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0B64C2F2-FDCD-48E4-AB9D-7CCC63B006CA}.Release|Any CPU.Build.0 = Release|Any CPU
{0C81FC1C-5D2D-478A-9876-923A0C85EC2F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0C81FC1C-5D2D-478A-9876-923A0C85EC2F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0C81FC1C-5D2D-478A-9876-923A0C85EC2F}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
{0C81FC1C-5D2D-478A-9876-923A0C85EC2F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0C81FC1C-5D2D-478A-9876-923A0C85EC2F}.Release|Any CPU.Build.0 = Release|Any CPU
{86D93406-412A-4429-93B2-92AAD0407784}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{86D93406-412A-4429-93B2-92AAD0407784}.Debug|Any CPU.Build.0 = Debug|Any CPU
{86D93406-412A-4429-93B2-92AAD0407784}.Release|Any CPU.ActiveCfg = Release|Any CPU
{86D93406-412A-4429-93B2-92AAD0407784}.Release|Any CPU.Build.0 = Release|Any CPU
{398D2998-0835-41F5-99A3-608CAB8051E2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{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
@@ -62,6 +87,9 @@ Global
{2ADCA724-2B6D-46EC-87F7-604D7918B89A} = {43091528-9509-43CB-A003-9C5C11E96DD6}
{69A2C77D-6DB7-4AE4-B179-D1F5CF5E2DF0} = {43091528-9509-43CB-A003-9C5C11E96DD6}
{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}
+1 -1
View File
@@ -1,6 +1,6 @@
<Project>
<PropertyGroup>
<Nullable>enable</Nullable>
<AvaloniaVersion>11.0.0-preview4</AvaloniaVersion>
<AvaloniaVersion>11.1.0-beta2</AvaloniaVersion>
</PropertyGroup>
</Project>
@@ -0,0 +1,16 @@
using Android.App;
using Android.Content.PM;
using Avalonia.Android;
namespace Semi.Avalonia.Demo.Android;
[Activity(
Label = "Semi.Avalonia",
Theme = "@style/MyTheme.NoActionBar",
Icon = "@drawable/Icon",
MainLauncher = true,
LaunchMode = LaunchMode.SingleTop,
ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.ScreenSize | ConfigChanges.UiMode)]
public class MainActivity : AvaloniaMainActivity<App>
{
}
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="auto">
<uses-permission android:name="android.permission.INTERNET" />
<application android:label="Semi.Avalonia" android:icon="@drawable/Icon" />
</manifest>
Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<color android:color="@color/splash_background"/>
</item>
<item android:drawable="@drawable/Icon"
android:width="120dp"
android:height="120dp"
android:gravity="center" />
</layer-list>
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="splash_background">#FFFFFF</color>
</resources>
@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8" ?>
<resources>
<style name="MyTheme">
</style>
<style name="MyTheme.NoActionBar" parent="@style/Theme.AppCompat.NoActionBar">
<item name="android:windowActionBar">false</item>
<item name="android:windowNoTitle">true</item>
</style>
<style name="MyTheme.Splash" parent ="MyTheme.NoActionBar">
<item name="android:windowBackground">@drawable/splash_screen</item>
<item name="android:windowContentOverlay">@null</item>
</style>
</resources>
@@ -0,0 +1,25 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net7.0-android</TargetFramework>
<SupportedOSPlatformVersion>21</SupportedOSPlatformVersion>
<ApplicationId>com.irihitech.Semi.Avalonia</ApplicationId>
<ApplicationVersion>1</ApplicationVersion>
<ApplicationDisplayVersion>1.0</ApplicationDisplayVersion>
<AndroidPackageFormat>apk</AndroidPackageFormat>
<AndroidEnableProfiledAot>False</AndroidEnableProfiledAot>
<EmbedAssembliesIntoApk>true</EmbedAssembliesIntoApk>
<RootNamespace>Semi.Avalonia.Demo.Android</RootNamespace>
</PropertyGroup>
<Import Project="../Directory.Build.props" />
<ItemGroup>
<PackageReference Include="Avalonia.Android" Version="$(AvaloniaVersion)" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Semi.Avalonia.Demo\Semi.Avalonia.Demo.csproj" />
</ItemGroup>
</Project>
+4 -2
View File
@@ -1,7 +1,9 @@
using System;
using Avalonia;
using Avalonia;
using Avalonia.Dialogs;
using Avalonia.Media;
using System;
using System.Linq;
using System.Threading;
namespace Semi.Avalonia.Demo.Desktop;
@@ -16,13 +16,13 @@
</PropertyGroup>
<ItemGroup>
<RdXmlFile Include="rd.xml"/>
<RdXmlFile Include="rd.xml" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Avalonia.Desktop" Version="11.0.0-preview5" />
<PackageReference Include="Avalonia.Desktop" Version="$(AvaloniaVersion)" />
<!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->
<PackageReference Condition="'$(Configuration)' == 'Debug'" Include="Avalonia.Diagnostics" Version="11.0.0-preview5" />
<PackageReference Condition="'$(Configuration)' == 'Debug'" Include="Avalonia.Diagnostics" Version="$(AvaloniaVersion)" />
</ItemGroup>
<ItemGroup>
+53
View File
@@ -0,0 +1,53 @@
using System;
using System.Globalization;
using System.Linq;
using System.Threading;
using Avalonia;
namespace Semi.Avalonia.Demo.Drm;
class Program
{
// Initialization code. Don't use any Avalonia, third-party APIs or any
// SynchronizationContext-reliant code before AppMain is called: things aren't initialized
// yet and stuff might break.
[STAThread]
public static int Main(string[] args)
{
var builder = BuildAvaloniaApp();
double GetScaling()
{
var idx = Array.IndexOf(args, "--scaling");
if (idx != 0 && args.Length > idx + 1 &&
double.TryParse(args[idx + 1], NumberStyles.Any, CultureInfo.InvariantCulture, out var scaling))
return scaling;
return 1;
}
if (args.Contains("--drm"))
{
SilenceConsole();
return builder.StartLinuxDrm(args: args, card: "/dev/dri/card1", scaling: GetScaling());
}
return builder.StartWithClassicDesktopLifetime(args);
}
// Avalonia configuration, don't remove; also used by visual designer.
public static AppBuilder BuildAvaloniaApp()
=> AppBuilder.Configure<App>()
.UsePlatformDetect()
.LogToTrace();
private static void SilenceConsole()
{
new Thread(() =>
{
Console.CursorVisible = false;
while (true)
Console.ReadKey(true);
})
{ IsBackground = true }.Start();
}
}
@@ -0,0 +1,22 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net7.0</TargetFramework>
<Nullable>enable</Nullable>
<BuiltInComInteropSupport>true</BuiltInComInteropSupport>
<ApplicationManifest>app.manifest</ApplicationManifest>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Avalonia.Desktop" Version="$(AvaloniaVersion)" />
<!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->
<PackageReference Condition="'$(Configuration)' == 'Debug'" Include="Avalonia.Diagnostics" Version="$(AvaloniaVersion)" />
<PackageReference Include="Avalonia.LinuxFramebuffer" Version="$(AvaloniaVersion)" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Semi.Avalonia.Demo\Semi.Avalonia.Demo.csproj" />
</ItemGroup>
</Project>
+18
View File
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
<!-- This manifest is used on Windows only.
Don't remove it as it might cause problems with window transparency and embeded controls.
For more details visit https://learn.microsoft.com/en-us/windows/win32/sbscs/application-manifests -->
<assemblyIdentity version="1.0.0.0" name="Semi.Avalonia.Demo.Drm.Desktop"/>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- A list of the Windows versions that this application has been tested on
and is designed to work with. Uncomment the appropriate elements
and Windows will automatically select the most compatible environment. -->
<!-- Windows 10 -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
</application>
</compatibility>
</assembly>
@@ -0,0 +1,77 @@
# DRM启动步骤
(Ubuntu18.04Server版本 虚拟机测试OK)
(Orange Pi Zero2 Ubuntu20.04-arm64 测试OK)
Avalonia官方参考文档:https://docs.avaloniaui.net/docs/next/guides/platforms/rpi/running-on-raspbian-lite-via-drm
1.Linux端运行命令
```
sudo apt update
sudo apt upgrade
sudo reboot
sudo apt - get install libgbm1 libgl1 - mesa - dri libegl1 - mesa libinput10
```
2.安装测试工具测试(出现一个彩色立方体说明环境安装完成)
```
sudo apt-get install kmscube
sudo kmscube
```
3.安装.net运行时(参考网址:https://learn.microsoft.com/zh-cn/dotnet/core/install/linux?WT.mc_id=dotnet-35129-website)
4.新建一个Avalonia项目,nuget里面添加Avalonia.LinuxFramebuffer包
5.添加StartLinuxDrm代码(不知道怎么添加看Semi.Avalonia.Demo.Drm项目代码)
6.发布程序到Linux(安装.net,怎么运行这些省略)
7.运行 ./Semi.Avalonia.Demo.Drm --drm
## 报错处理:
1. 报错内容
>Unhandled exception. Avalonia.Markup.Xaml.XamlLoadException: No precompiled XAML found for avares://Semi.Avalonia/Themes/Light/Light.axaml (baseUri: avares://Semi.Avalonia/Themes/Index.axaml), make sure to specify x:Class and include your XAML file as AvaloniaResource
解决方法:
>如果使用Semi发布文件不要裁剪,如果裁剪会报错
2. 报错内容
>Unhandled exception. System.TypeInitializationException: The type initializer for 'SkiaSharp.SKImageInfo' threw an exception.**
**--->System.DllNotFoundException: Unable to load shared library 'libSkiaSharp' or one of its dependencies.In order to help diagnose loading problems, consider setting the LD_DEBUG environment variable: liblibSkiaSharp: cannot open shared object file: No such file or directory
at SkiaSharp.SkiaApi.sk_colortype_get_default_8888()
at SkiaSharp.SKImageInfo..cctor()
解决方法:
>Linux命令行安装一下 apt-get install -y libfontconfig1
参考网址:https://github.com/mono/SkiaSharp/issues/509
3. 报错内容
>Permission denied
解决方法:
>sudo chmod +x ./Semi.Avalonia.Demo.Drm
4. 报错内容
>Unhandled exception. System.ComponentModel.Win32Exception (95): drmModeGetResources failed
at Avalonia.LinuxFramebuffer.Output.DrmResources..ctor(Int32 fd, Boolean connectorsForceProbe) in /_/src/Linux/Avalonia.LinuxFramebuffer/Output/DrmBindings.cs:line 91
at Avalonia.LinuxFramebuffer.Output.DrmCard.GetResources(Boolean connectorsForceProbe) in /_/src/Linux/Avalonia.LinuxFramebuffer/Output/DrmBindings.cs:line 171
at Avalonia.LinuxFramebuffer.Output.DrmOutput..ctor(String path, Boolean connectorsForceProbe, DrmOutputOptions options) in /_/src/Linux/Avalonia.LinuxFramebuffer/Output/DrmOutput.cs:line 60
at LinuxFramebufferPlatformExtensions.StartLinuxDrm(AppBuilder builder, String[] args, String card, Double scaling, IInputBackend inputBackend) in /_/src/Linux/Avalonia.LinuxFramebuffer/LinuxFramebufferPlatform.cs:line 166
at Semi.Avalonia.Demo.Drm.Program.Main(String[] args)
解决方法:
>`program.cs`的显卡路径错误,可能不是`dev/dri/card1`,看在`dev/dri`目录下有无其他的显卡如`card0`
5. 报错内容
>Unhandled exception. System.ComponentModel.Win32Exception (2): Couldn't open /dev/dri/card1
at Avalonia.LinuxFramebuffer.Output.DrmCard..ctor(String ) in /_/src/Linux/Avalonia.LinuxFramebuffer/Output/DrmBindings.cs:line 167
at Avalonia.LinuxFramebuffer.Output.DrmOutput..ctor(String , Boolean , DrmOutputOptions ) in /_/src/Linux/Avalonia.LinuxFramebuffer/Output/DrmOutput.cs:line 58
at LinuxFramebufferPlatformExtensions.StartLinuxDrm(AppBuilder, String[], String , Double , IInputBackend ) in /_/src/Linux/Avalonia.LinuxFramebuffer/LinuxFramebufferPlatform.cs:line 166
at Semi.Avalonia.Demo.Drm.Program.Main(String[])
解决办法:
>找不到显卡路径`dev/dri/card1`,可能是显卡挂载到别的文件夹下了,待解决。
-10
View File
@@ -1,10 +0,0 @@
<Application
x:Class="Semi.Avalonia.Demo.Web.App"
xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Semi.Avalonia.Demo.Web">
<Application.Styles>
<FluentTheme />
<StyleInclude Source="avares://Semi.Avalonia/Themes/LightTheme.axaml" />
</Application.Styles>
</Application>
+6 -7
View File
@@ -1,17 +1,16 @@
using System.Runtime.Versioning;
using System.Threading.Tasks;
using Avalonia;
using Avalonia.Media;
using Semi.Avalonia.Demo.Web;
using Avalonia.Browser;
[assembly: SupportedOSPlatform("browser")]
internal partial class Program
namespace Semi.Avalonia.Demo.Web;
internal sealed partial class Program
{
private static void Main(string[] args)
{
BuildAvaloniaApp().SetupBrowserApp("out");
}
private static Task Main(string[] args) => BuildAvaloniaApp()
.StartBrowserAppAsync("out");
public static AppBuilder BuildAvaloniaApp()
=> AppBuilder.Configure<App>();
@@ -1,29 +1,21 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<RuntimeIdentifier>browser-wasm</RuntimeIdentifier>
<WasmMainJSPath>AppBundle\main.js</WasmMainJSPath>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0-browser</TargetFramework>
<RuntimeIdentifier>browser-wasm</RuntimeIdentifier>
<WasmMainJSPath>wwwroot\main.js</WasmMainJSPath>
<WasmRuntimeAssetsLocation>./_framework</WasmRuntimeAssetsLocation>
</PropertyGroup>
<ItemGroup>
<WasmExtraFilesToDeploy Include="AppBundle\**" />
<WasmExtraFilesToDeploy Include="wwwroot\**"/>
</ItemGroup>
<ItemGroup>
<None Remove="Assets\SourceHanSansCN-Regular.otf" />
<PackageReference Include="Avalonia.Browser" Version="$(AvaloniaVersion)" />
</ItemGroup>
<ItemGroup>
<AvaloniaResource Include="Assets\SourceHanSansCN-Regular.otf" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Avalonia.Browser" Version="11.0.0-preview5" />
<PackageReference Include="Avalonia.Themes.Fluent" Version="11.0.0-preview5" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Semi.Avalonia.Demo\Semi.Avalonia.Demo.csproj" />
<ProjectReference Include="..\Semi.Avalonia.Demo\Semi.Avalonia.Demo.csproj" />
</ItemGroup>
</Project>

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

@@ -1,4 +1,11 @@
/* HTML styles for the splash screen */
:root {
--sat: env(safe-area-inset-top);
--sar: env(safe-area-inset-right);
--sab: env(safe-area-inset-bottom);
--sal: env(safe-area-inset-left);
}
/* HTML styles for the splash screen */
.highlight {
color: white;

Before

Width:  |  Height:  |  Size: 172 KiB

After

Width:  |  Height:  |  Size: 172 KiB

@@ -7,10 +7,9 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<base href="/" />
<link rel="modulepreload" href="./main.js" />
<link rel="modulepreload" href="./dotnet.js" />
<link rel="modulepreload" href="./avalonia.js" />
<link rel="modulepreload" href="./_framework/dotnet.js" />
<link rel="modulepreload" href="./_framework/avalonia.js" />
<link rel="stylesheet" href="./app.css" />
<link rel="preconnect" href="https://fonts.googleapis.com">
</head>
<body style="margin: 0px; overflow: hidden">
@@ -1,5 +1,4 @@
import { dotnet } from './dotnet.js'
import { registerAvaloniaModule } from './avalonia.js';
import { dotnet } from './_framework/dotnet.js'
const is_browser = typeof window != "undefined";
if (!is_browser) throw new Error(`Expected to be running in a browser`);
@@ -9,8 +8,6 @@ const dotnetRuntime = await dotnet
.withApplicationArgumentsFromQuery()
.create();
await registerAvaloniaModule(dotnetRuntime);
const config = dotnetRuntime.getConfig();
await dotnetRuntime.runMainAndExit(config.mainAssemblyName, [window.location.search]);
await dotnetRuntime.runMain(config.mainAssemblyName, [window.location.search]);
@@ -1,12 +1,13 @@
<Application
x:Class="Semi.Avalonia.Demo.Desktop.App"
x:Class="Semi.Avalonia.Demo.App"
xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Semi.Avalonia.Demo.Desktop"
RequestedThemeVariant="Light">
xmlns:semi="https://irihi.tech/semi">
<Application.Styles>
<!--<StyleInclude Source="avares://Semi.Avalonia/Themes/Index.axaml" />-->
<!-- You can still reference in old way.
<StyleInclude Source="avares://Semi.Avalonia/Themes/Index.axaml" />
-->
<semi:SemiTheme Locale="zh-CN"/>
<StyleInclude Source="avares://Semi.Avalonia.DataGrid/Index.axaml" />
<StyleInclude Source="avares://Semi.Avalonia.ColorPicker/Index.axaml" />
</Application.Styles>
@@ -3,7 +3,7 @@ using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Markup.Xaml;
using Semi.Avalonia.Demo.Views;
namespace Semi.Avalonia.Demo.Web;
namespace Semi.Avalonia.Demo;
public partial class App : Application
{
@@ -14,10 +14,16 @@ public partial class App : Application
public override void OnFrameworkInitializationCompleted()
{
if (ApplicationLifetime is ISingleViewApplicationLifetime singleViewPlatform)
switch (ApplicationLifetime)
{
singleViewPlatform.MainView = new MainView();
case IClassicDesktopStyleApplicationLifetime desktop:
desktop.MainWindow = new MainWindow();
break;
case ISingleViewApplicationLifetime singleView:
singleView.MainView = new MainView();
break;
}
base.OnFrameworkInitializationCompleted();
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 MiB

@@ -5,7 +5,7 @@
xmlns:viewModels="clr-namespace:Semi.Avalonia.Demo.ViewModels"
x:CompileBindings="True"
x:DataType="viewModels:ColorItemViewModel">
<PathGeometry x:Key="CopyIcon">M5 7C3.89543 7 3 7.89543 3 9V19C3 20.1046 3.89543 21 5 21H15C16.1046 21 17 20.1046 17 19V9C17 7.89543 16.1046 7 15 7H5Z,M7 4C7 2.89543 7.89543 2 9 2H20C21.1046 2 22 2.89543 22 4V15C22 16.1046 21.1046 17 20 17H19V8C19 6 18 5 16 5H7V4Z</PathGeometry>
<StreamGeometry x:Key="CopyIcon">M5 7C3.89543 7 3 7.89543 3 9V19C3 20.1046 3.89543 21 5 21H15C16.1046 21 17 20.1046 17 19V9C17 7.89543 16.1046 7 15 7H5Z,M7 4C7 2.89543 7.89543 2 9 2H20C21.1046 2 22 2.89543 22 4V15C22 16.1046 21.1046 17 20 17H19V8C19 6 18 5 16 5H7V4Z</StreamGeometry>
<ControlTheme x:Key="{x:Type controls:ColorDetailControl}" TargetType="controls:ColorDetailControl">
<!-- Add Resources Here -->
<Setter Property="controls:ColorDetailControl.Template">
@@ -21,8 +21,8 @@
HorizontalAlignment="Stretch"
Background="{TemplateBinding Background}"
CornerRadius="6" />
<Grid ColumnDefinitions="*, Auto" RowDefinitions="*, *, *, *, *, *">
<!-- Row 0-1 ResourceKey -->
<Grid ColumnDefinitions="*, Auto" RowDefinitions="*, *, *, *, *, *, *">
<!-- Row 0-1-2 ResourceKey -->
<TextBlock
Grid.Column="0"
Grid.ColumnSpan="2"
@@ -48,23 +48,43 @@
Data="{StaticResource CopyIcon}"
Foreground="{Binding $parent[Button].Foreground}" />
</Button>
<!-- Row 2-3 HEX -->
<TextBlock
<SelectableTextBlock
Grid.Row="2"
Grid.Column="0"
VerticalAlignment="Center"
IsVisible="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=ColorResourceKey, Converter={x:Static ObjectConverters.IsNotNull}}"
Text="{TemplateBinding ColorResourceKey}" />
<Button
Grid.Row="2"
Grid.Column="1"
Classes="Tertiary"
Command="{Binding $parent[controls:ColorDetailControl].Copy}"
CommandParameter="{x:Static controls:ColorDetailControl.KEY_ColorResourceKey}"
IsVisible="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=ColorResourceKey, Converter={x:Static ObjectConverters.IsNotNull}}"
Theme="{DynamicResource BorderlessButton}">
<PathIcon
Width="12"
Height="12"
Data="{StaticResource CopyIcon}"
Foreground="{Binding $parent[Button].Foreground}" />
</Button>
<!-- Row 3-4 HEX -->
<TextBlock
Grid.Row="3"
Grid.Column="0"
Grid.ColumnSpan="2"
Margin="4,8,0,0"
VerticalAlignment="Center"
Classes="Tertiary"
Text="ARGB" />
<SelectableTextBlock
Grid.Row="3"
Grid.Row="4"
Grid.Column="0"
VerticalAlignment="Center"
Text="{TemplateBinding Hex}" />
<Button
Grid.Row="3"
Grid.Row="4"
Grid.Column="1"
Classes="Tertiary"
Command="{Binding $parent[controls:ColorDetailControl].Copy}"
@@ -77,9 +97,9 @@
Foreground="{Binding $parent[Button].Foreground}" />
</Button>
<!-- Row 4-5 Opacity -->
<!-- Row 5-6 Opacity -->
<TextBlock
Grid.Row="4"
Grid.Row="5"
Grid.Column="0"
Grid.ColumnSpan="2"
Margin="4,8,0,0"
@@ -87,12 +107,12 @@
Classes="Tertiary"
Text="Opacity" />
<SelectableTextBlock
Grid.Row="5"
Grid.Row="6"
Grid.Column="0"
VerticalAlignment="Center"
Text="{TemplateBinding OpacityNumber}" />
<Button
Grid.Row="5"
Grid.Row="6"
Grid.Column="1"
Classes="Tertiary"
Command="{Binding $parent[controls:ColorDetailControl].Copy}"
@@ -1,5 +1,6 @@
using System.Globalization;
using Avalonia;
using Avalonia.Controls;
using Avalonia.Controls.Primitives;
using Avalonia.Input.Platform;
using Avalonia.Media;
@@ -12,6 +13,7 @@ public class ColorDetailControl: TemplatedControl
public const string KEY_ResourceKey = "ResourceKey";
public const string KEY_Hex = "Hex";
public const string KEY_Opacity = "Opacity";
public const string KEY_ColorResourceKey = "ColorResourceKey";
public static readonly StyledProperty<string?> ResourceKeyProperty = AvaloniaProperty.Register<ColorDetailControl, string?>(
nameof(ResourceKey));
@@ -30,6 +32,15 @@ public class ColorDetailControl: TemplatedControl
set => SetValue(ResourceNameProperty, value);
}
public static readonly StyledProperty<string?> ColorResourceKeyProperty = AvaloniaProperty.Register<ColorDetailControl, string?>(
nameof(ColorResourceKey));
public string? ColorResourceKey
{
get => GetValue(ColorResourceKeyProperty);
set => SetValue(ColorResourceKeyProperty, value);
}
public static readonly DirectProperty<ColorDetailControl, string?> HexProperty = AvaloniaProperty.RegisterDirect<ColorDetailControl, string?>(
nameof(Hex), o => o.Hex);
private string? _hex;
@@ -49,6 +60,8 @@ public class ColorDetailControl: TemplatedControl
}
static ColorDetailControl()
{
BackgroundProperty.Changed.AddClassHandler<ColorDetailControl>((o, e) => o.OnBackgroundChanged(e));
@@ -77,15 +90,18 @@ public class ColorDetailControl: TemplatedControl
break;
case KEY_Opacity: text = OpacityNumber;
break;
case KEY_ColorResourceKey: text = ColorResourceKey;
break;
default: text = string.Empty; break;
}
}
if (Application.Current is { Clipboard: { } c })
var toplevel = TopLevel.GetTopLevel(this);
if (toplevel?.Clipboard is { } c)
{
await c.SetTextAsync(text??string.Empty);
}
}
}
@@ -19,15 +19,14 @@
Theme="{DynamicResource TitleTextBlock}" />
<TabControl Grid.Row="1">
<TabItem Header="Light">
<DataGrid IsReadOnly="True" Items="{TemplateBinding LightColors}">
<DataGrid IsReadOnly="True" ItemsSource="{TemplateBinding LightColors}">
<DataGrid.Columns>
<DataGridTemplateColumn Width="70" Header="Color">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<DataTemplate DataType="viewModels:ColorItemViewModel">
<controls:ColorItemControl
Width="40"
Height="20"
x:DataType="viewModels:ColorItemViewModel"
Background="{Binding Brush}"
CornerRadius="3" />
</DataTemplate>
@@ -35,11 +34,10 @@
</DataGridTemplateColumn>
<DataGridTemplateColumn Width="*" Header="ResourceKey">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<DataTemplate DataType="viewModels:ColorItemViewModel">
<SelectableTextBlock
Margin="12,0,12,0"
VerticalAlignment="Center"
x:DataType="viewModels:ColorItemViewModel"
Text="{Binding ResourceKey}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
@@ -52,23 +50,21 @@
Header="Name" />
<DataGridTemplateColumn Width="100" Header="Hex">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<DataTemplate DataType="viewModels:ColorItemViewModel">
<SelectableTextBlock
Margin="12,0,12,0"
VerticalAlignment="Center"
x:DataType="viewModels:ColorItemViewModel"
Text="{Binding Hex}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Width="80" Header="Opacity">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<DataTemplate DataType="viewModels:ColorItemViewModel">
<SelectableTextBlock
Margin="12,0,12,0"
HorizontalAlignment="Right"
VerticalAlignment="Center"
x:DataType="viewModels:ColorItemViewModel"
Text="{Binding Brush.Opacity}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
@@ -77,15 +73,14 @@
</DataGrid>
</TabItem>
<TabItem Header="Dark">
<DataGrid IsReadOnly="True" Items="{TemplateBinding DarkColors}">
<DataGrid IsReadOnly="True" ItemsSource="{TemplateBinding DarkColors}">
<DataGrid.Columns>
<DataGridTemplateColumn Width="70" Header="Color">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<DataTemplate DataType="viewModels:ColorItemViewModel">
<controls:ColorItemControl
Width="40"
Height="20"
x:DataType="viewModels:ColorItemViewModel"
Background="{Binding Brush}"
CornerRadius="3" />
</DataTemplate>
@@ -93,11 +88,10 @@
</DataGridTemplateColumn>
<DataGridTemplateColumn Width="*" Header="ResourceKey">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<DataTemplate DataType="viewModels:ColorItemViewModel">
<SelectableTextBlock
Margin="12,0,12,0"
VerticalAlignment="Center"
x:DataType="viewModels:ColorItemViewModel"
Text="{Binding ResourceKey}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
@@ -110,23 +104,21 @@
Header="Name" />
<DataGridTemplateColumn Width="100" Header="Hex">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<DataTemplate DataType="viewModels:ColorItemViewModel">
<SelectableTextBlock
Margin="12,0,12,0"
VerticalAlignment="Center"
x:DataType="viewModels:ColorItemViewModel"
Text="{Binding Hex}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Width="80" Header="Opacity">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<DataTemplate DataType="viewModels:ColorItemViewModel">
<SelectableTextBlock
Margin="12,0,12,0"
HorizontalAlignment="Right"
VerticalAlignment="Center"
x:DataType="viewModels:ColorItemViewModel"
Text="{Binding Brush.Opacity}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
@@ -14,19 +14,19 @@ public class FunctionalColorGroupControl: TemplatedControl
set => SetValue(TitleProperty, value);
}
public static readonly DirectProperty<FunctionalColorGroupControl, IEnumerable> LightColorsProperty = AvaloniaProperty.RegisterDirect<FunctionalColorGroupControl, IEnumerable>(
public static readonly DirectProperty<FunctionalColorGroupControl, IEnumerable?> LightColorsProperty = AvaloniaProperty.RegisterDirect<FunctionalColorGroupControl, IEnumerable?>(
nameof(LightColors), o => o.LightColors, (o, v) => o.LightColors = v);
private IEnumerable _lightColors;
public IEnumerable LightColors
private IEnumerable? _lightColors;
public IEnumerable? LightColors
{
get => _lightColors;
set => SetAndRaise(LightColorsProperty, ref _lightColors, value);
}
public static readonly DirectProperty<FunctionalColorGroupControl, IEnumerable> DarkColorsProperty = AvaloniaProperty.RegisterDirect<FunctionalColorGroupControl, IEnumerable>(
public static readonly DirectProperty<FunctionalColorGroupControl, IEnumerable?> DarkColorsProperty = AvaloniaProperty.RegisterDirect<FunctionalColorGroupControl, IEnumerable?>(
nameof(DarkColors), o => o.DarkColors, (o, v) => o.DarkColors = v);
private IEnumerable _darkColors;
public IEnumerable DarkColors
private IEnumerable? _darkColors;
public IEnumerable? DarkColors
{
get => _darkColors;
set => SetAndRaise(DarkColorsProperty, ref _darkColors, value);
@@ -17,58 +17,72 @@
<StackPanel.Styles>
<Style Selector="AutoCompleteBox">
<Setter Property="Width" Value="300" />
<Setter Property="ItemsSource">
<Binding Path="States" />
</Setter>
<Setter Property="ItemTemplate">
<DataTemplate DataType="local:StateData">
<TextBlock Text="{Binding Name}" />
</DataTemplate>
</Setter>
</Style>
</StackPanel.Styles>
<AutoCompleteBox
Items="{Binding States}"
ValueMemberBinding="{Binding Name}"
Watermark="Please select a State">
<AutoCompleteBox.ItemTemplate>
<DataTemplate DataType="local:StateData">
<TextBlock Text="{Binding Name}" />
</DataTemplate>
</AutoCompleteBox.ItemTemplate>
</AutoCompleteBox>
Watermark="Please select a State"
ValueMemberBinding="{Binding Name}" />
<AutoCompleteBox
Classes="Large"
Items="{Binding States}"
ValueMemberBinding="{ReflectionBinding Name}">
<AutoCompleteBox.ItemTemplate>
<DataTemplate DataType="local:StateData">
<TextBlock Text="{Binding Name}" />
</DataTemplate>
</AutoCompleteBox.ItemTemplate>
</AutoCompleteBox>
ValueMemberBinding="{ReflectionBinding Name}" />
<AutoCompleteBox
Classes="Small"
Items="{Binding States}"
ValueMemberBinding="{ReflectionBinding Name}">
<AutoCompleteBox.ItemTemplate>
<DataTemplate DataType="local:StateData">
<TextBlock Text="{Binding Name}" />
</DataTemplate>
</AutoCompleteBox.ItemTemplate>
</AutoCompleteBox>
ValueMemberBinding="{ReflectionBinding Name}" />
<AutoCompleteBox
Classes="Bordered"
Items="{Binding States}"
ValueMemberBinding="{ReflectionBinding Name}">
<AutoCompleteBox.ItemTemplate>
<DataTemplate DataType="local:StateData">
<TextBlock Text="{Binding Name}" />
</DataTemplate>
</AutoCompleteBox.ItemTemplate>
</AutoCompleteBox>
ValueMemberBinding="{ReflectionBinding Name}" />
<AutoCompleteBox
IsEnabled="False"
Items="{Binding States}"
ValueMemberBinding="{ReflectionBinding Name}"
Watermark="Disabled">
<AutoCompleteBox.ItemTemplate>
<DataTemplate DataType="local:StateData">
<TextBlock Text="{Binding Name}" />
</DataTemplate>
</AutoCompleteBox.ItemTemplate>
</AutoCompleteBox>
Watermark="Disabled"
ValueMemberBinding="{ReflectionBinding Name}" />
<AutoCompleteBox
InnerLeftContent="https://"
InnerRightContent=".com"
ValueMemberBinding="{ReflectionBinding Name}" />
<StackPanel Orientation="Horizontal">
<AutoCompleteBox
Width="100"
Classes="Large"
Watermark="Large"
ValueMemberBinding="{ReflectionBinding Name}" />
<AutoCompleteBox
Width="100"
Watermark="Default"
ValueMemberBinding="{ReflectionBinding Name}" />
<AutoCompleteBox
Width="100"
Classes="Small"
Watermark="Small"
ValueMemberBinding="{ReflectionBinding Name}" />
</StackPanel>
<StackPanel Orientation="Horizontal">
<AutoCompleteBox
Width="100"
IsEnabled="False"
Watermark="Disabled"
ValueMemberBinding="{ReflectionBinding Name}" />
<AutoCompleteBox
Width="100"
Classes="Bordered"
Watermark="Bordered"
ValueMemberBinding="{ReflectionBinding Name}" />
<AutoCompleteBox
Width="100"
Classes="Bordered"
IsEnabled="False"
ValueMemberBinding="{ReflectionBinding Name}" />
</StackPanel>
</StackPanel>
</UserControl>
</UserControl>
+143 -104
View File
@@ -4,109 +4,148 @@
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"
d:DesignHeight="450"
d:DesignWidth="800"
mc:Ignorable="d">
<StackPanel HorizontalAlignment="Left" Spacing="20">
<TextBlock>Light (Default)</TextBlock>
<StackPanel Orientation="Horizontal" Spacing="20">
<Button Classes="Primary">Primary</Button>
<Button Classes="Secondary">Secondary</Button>
<Button Classes="Tertiary">Tertiary</Button>
<Button Classes="Warning">Warning</Button>
<Button Classes="Danger">Danger</Button>
<Button Classes="Primary" IsEnabled="False">Danger</Button>
<ScrollViewer>
<StackPanel HorizontalAlignment="Left" Spacing="20">
<StackPanel.Styles>
<Style Selector="SplitButton">
<Setter Property="Flyout">
<MenuFlyout Placement="BottomEdgeAlignedRight">
<MenuItem Header="Submit All" />
<MenuItem Header="Submit Updated" />
</MenuFlyout>
</Setter>
</Style>
<Style Selector="DropDownButton">
<Setter Property="Flyout">
<MenuFlyout Placement="BottomEdgeAlignedRight">
<MenuItem Header="Submit All" />
<MenuItem Header="Submit Updated" />
</MenuFlyout>
</Setter>
</Style>
<Style Selector="ToggleSplitButton">
<Setter Property="Flyout">
<MenuFlyout Placement="BottomEdgeAlignedRight">
<MenuItem Header="Submit All" />
<MenuItem Header="Submit Updated" />
</MenuFlyout>
</Setter>
</Style>
</StackPanel.Styles>
<TextBlock>Light (Default)</TextBlock>
<StackPanel Orientation="Horizontal" Spacing="20">
<Button Classes="Primary">Primary</Button>
<Button Classes="Secondary">Secondary</Button>
<Button Classes="Tertiary">Tertiary</Button>
<Button Classes="Success">Success</Button>
<Button Classes="Warning">Warning</Button>
<Button Classes="Danger">Danger</Button>
<Button Classes="Danger" IsEnabled="False">Disabled</Button>
</StackPanel>
<StackPanel Orientation="Horizontal" Spacing="20">
<Button Classes="Primary Small">Small</Button>
<Button Classes="Primary">Default</Button>
<Button Classes="Primary Large">Large</Button>
</StackPanel>
<TextBlock>Solid</TextBlock>
<StackPanel Orientation="Horizontal" Spacing="20">
<Button Classes="Primary" Theme="{DynamicResource SolidButton}">Primary</Button>
<Button Classes="Secondary" Theme="{DynamicResource SolidButton}">Secondary</Button>
<Button Classes="Tertiary" Theme="{DynamicResource SolidButton}">Tertiary</Button>
<Button Classes="Success" Theme="{DynamicResource SolidButton}">Success</Button>
<Button Classes="Warning" Theme="{DynamicResource SolidButton}">Warning</Button>
<Button Classes="Danger" Theme="{DynamicResource SolidButton}">Danger</Button>
<Button
Classes="Danger"
IsEnabled="False"
Theme="{DynamicResource SolidButton}">
Disabled
</Button>
</StackPanel>
<TextBlock>Borderless</TextBlock>
<StackPanel Orientation="Horizontal" Spacing="20">
<Button Classes="Primary" Theme="{DynamicResource BorderlessButton}">Primary</Button>
<Button Classes="Secondary" Theme="{DynamicResource BorderlessButton}">Secondary</Button>
<Button Classes="Tertiary" Theme="{DynamicResource BorderlessButton}">Tertiary</Button>
<Button Classes="Success" Theme="{DynamicResource BorderlessButton}">Success</Button>
<Button Classes="Warning" Theme="{DynamicResource BorderlessButton}">Warning</Button>
<Button Classes="Danger" Theme="{DynamicResource BorderlessButton}">Danger</Button>
<Button
Classes="Danger"
IsEnabled="False"
Theme="{DynamicResource BorderlessButton}">
Disabled
</Button>
</StackPanel>
<TextBlock>DropDownButton</TextBlock>
<StackPanel Orientation="Horizontal" Spacing="8">
<DropDownButton Content="Primary" />
<DropDownButton Classes="Secondary" Content="Secondary" />
<DropDownButton Classes="Tertiary" Content="Tertiary" />
<DropDownButton Classes="Success" Content="Success" />
<DropDownButton Classes="Warning" Content="Warning" />
<DropDownButton Classes="Danger" Content="Danger" />
<DropDownButton
Classes="Danger"
Content="Disabled"
IsEnabled="False" />
</StackPanel>
<StackPanel Orientation="Horizontal" Spacing="8">
<DropDownButton Content="Default" Classes="Success"/>
<DropDownButton Content="Solid" Theme="{DynamicResource SolidDropDownButton}" 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="Borderless" Theme="{DynamicResource BorderlessDropDownButton}" Classes="Success" IsEnabled="False"/>
</StackPanel>
<StackPanel Orientation="Horizontal" Spacing="8">
<DropDownButton Classes="Small" Content="Small" />
<DropDownButton Content="Default" />
<DropDownButton Classes="Large" Content="Large" />
</StackPanel>
<TextBlock>SplitButton</TextBlock>
<StackPanel Orientation="Horizontal" Spacing="8">
<SplitButton Content="Primary" />
<SplitButton Classes="Secondary" Content="Secondary" />
<SplitButton Classes="Tertiary" Content="Tertiary" />
<SplitButton Classes="Success" Content="Success" />
<SplitButton Classes="Warning" Content="Warning" />
<SplitButton Classes="Danger" Content="Danger" />
<SplitButton Classes="Danger" Content="Disabled" IsEnabled="False" />
</StackPanel>
<StackPanel Orientation="Horizontal" Spacing="8">
<SplitButton Content="Default" Classes="Success" />
<SplitButton Theme="{DynamicResource SolidSplitButton}" Content="Solid" Classes="Success" />
<SplitButton Theme="{DynamicResource BorderlessSplitButton}" Content="Borderless" Classes="Success" />
<SplitButton Content="Default" Classes="Success" IsEnabled="False" />
<SplitButton Theme="{DynamicResource SolidSplitButton}" Content="Solid" Classes="Success" IsEnabled="False" />
<SplitButton Theme="{DynamicResource BorderlessSplitButton}" Content="Borderless" Classes="Success" IsEnabled="False" />
</StackPanel>
<StackPanel Orientation="Horizontal" Spacing="8">
<SplitButton Classes="Small" Content="Small" />
<SplitButton Content="Default" />
<SplitButton Classes="Large" Content="Large" />
</StackPanel>
<TextBlock>ToggleSplitButton</TextBlock>
<StackPanel Orientation="Horizontal" Spacing="8">
<ToggleSplitButton Content="Primary" />
<ToggleSplitButton Classes="Secondary" Content="Secondary" />
<ToggleSplitButton Classes="Tertiary" Content="Tertiary" />
<ToggleSplitButton Classes="Success" Content="Success" />
<ToggleSplitButton Classes="Warning" Content="Warning" />
<ToggleSplitButton Classes="Danger" Content="Danger" />
<ToggleSplitButton Classes="Danger" Content="Disabled" IsEnabled="False" />
</StackPanel>
<StackPanel Orientation="Horizontal" Spacing="8">
<ToggleSplitButton Classes="Small" Content="Small" />
<ToggleSplitButton Content="Default" />
<ToggleSplitButton Classes="Large" Content="Large" />
</StackPanel>
</StackPanel>
<TextBlock>Solid</TextBlock>
<StackPanel Orientation="Horizontal" Spacing="20">
<Button Classes="Primary" Theme="{DynamicResource SolidButton}">Primary</Button>
<Button Classes="Secondary" Theme="{DynamicResource SolidButton}">Secondary</Button>
<Button Classes="Tertiary" Theme="{DynamicResource SolidButton}">Tertiary</Button>
<Button Classes="Warning" Theme="{DynamicResource SolidButton}">Warning</Button>
<Button Classes="Danger" Theme="{DynamicResource SolidButton}">Danger</Button>
<Button
Classes="Primary"
IsEnabled="False"
Theme="{DynamicResource SolidButton}">
Danger
</Button>
</StackPanel>
<TextBlock>Borderless</TextBlock>
<StackPanel Orientation="Horizontal" Spacing="20">
<Button Classes="Primary" Theme="{DynamicResource BorderlessButton}">Primary</Button>
<Button Classes="Secondary" Theme="{DynamicResource BorderlessButton}">Secondary</Button>
<Button Classes="Tertiary" Theme="{DynamicResource BorderlessButton}">Tertiary</Button>
<Button Classes="Warning" Theme="{DynamicResource BorderlessButton}">Warning</Button>
<Button Classes="Danger" Theme="{DynamicResource BorderlessButton}">Danger</Button>
<Button
Classes="Primary"
IsEnabled="False"
Theme="{DynamicResource BorderlessButton}">
Danger
</Button>
</StackPanel>
<TextBlock>DropdownButton</TextBlock>
<StackPanel Orientation="Horizontal" Spacing="8">
<DropDownButton Content="Submit">
<DropDownButton.Flyout>
<MenuFlyout Placement="BottomEdgeAlignedRight">
<MenuItem Header="Submit All" />
<MenuItem Header="Submit Updated" />
</MenuFlyout>
</DropDownButton.Flyout>
</DropDownButton>
<DropDownButton Content="Submit" Theme="{DynamicResource SolidDropdownButton}">
<DropDownButton.Flyout>
<MenuFlyout Placement="BottomEdgeAlignedRight">
<MenuItem Header="Submit All" />
<MenuItem Header="Submit Updated" />
</MenuFlyout>
</DropDownButton.Flyout>
</DropDownButton>
<DropDownButton Content="Submit" Theme="{DynamicResource BorderlessDropdownButton}">
<DropDownButton.Flyout>
<MenuFlyout Placement="BottomEdgeAlignedRight">
<MenuItem Header="Submit All" />
<MenuItem Header="Submit Updated" />
</MenuFlyout>
</DropDownButton.Flyout>
</DropDownButton>
</StackPanel>
<StackPanel Orientation="Horizontal" Spacing="8">
<SplitButton Content="Submit">
<SplitButton.Flyout>
<MenuFlyout Placement="BottomEdgeAlignedRight">
<MenuItem Header="Submit All" />
<MenuItem Header="Submit Updated" />
</MenuFlyout>
</SplitButton.Flyout>
</SplitButton>
<SplitButton Classes="Secondary" Content="Submit" />
<SplitButton Classes="Tertiary" Content="Submit" />
<SplitButton Classes="Warning" Content="Submit" />
<SplitButton Classes="Danger" Content="Submit" />
<SplitButton
Classes="Danger"
Content="Submit"
IsEnabled="False" />
</StackPanel>
<StackPanel Orientation="Horizontal" Spacing="8">
<ToggleSplitButton Content="Submit">
<ToggleSplitButton.Flyout>
<MenuFlyout Placement="BottomEdgeAlignedRight">
<MenuItem Header="Submit All" />
<MenuItem Header="Submit Updated" />
</MenuFlyout>
</ToggleSplitButton.Flyout>
</ToggleSplitButton>
<ToggleSplitButton Classes="Secondary" Content="Submit" />
<ToggleSplitButton Classes="Tertiary" Content="Submit" />
<ToggleSplitButton Classes="Warning" Content="Submit" />
<ToggleSplitButton Classes="Danger" Content="Submit" />
<ToggleSplitButton
Classes="Danger"
Content="Submit"
IsEnabled="False" />
</StackPanel>
</StackPanel>
</UserControl>
</ScrollViewer>
</UserControl>
@@ -17,8 +17,7 @@
<TextBlock
HorizontalAlignment="Center"
VerticalAlignment="Center"
Background="Gray"
Text="Everest" />
Text="A.S.I.A" />
</ButtonSpinner>
<ButtonSpinner
Height="30"
@@ -30,8 +29,7 @@
<TextBlock
HorizontalAlignment="Center"
VerticalAlignment="Center"
Background="Gray"
Text="Everest" />
Text="A.S.I.A" />
</ButtonSpinner>
</StackPanel>
</UserControl>
@@ -36,15 +36,20 @@ public partial class ButtonSpinnerDemo : UserControl
private readonly string[] _mountains = new[]
{
"Everest",
"K2 (Mount Godwin Austen)",
"Kangchenjunga",
"Lhotse",
"Makalu",
"Cho Oyu",
"Dhaulagiri",
"Manaslu",
"Nanga Parbat",
"Annapurna"
"A.S.I.A",
"饕餮人间",
"七步咙咚呛",
"大惊小怪",
"The ONE",
"以梦为马 (壮志骄阳版)",
"emo了",
"一眼万年",
"冲刺吧",
"爱的赏味期限",
"COSMIC ANTHEM / 手紙",
"世界晚安",
"明年也要好好长大",
"320万年前",
"W.O.R.L.D.",
};
}
@@ -8,10 +8,22 @@
d:DesignWidth="800"
mc:Ignorable="d">
<StackPanel HorizontalAlignment="Left" Spacing="20">
<CalendarDatePicker />
<StackPanel Orientation="Horizontal">
<CalendarDatePicker Classes="Large" />
<CalendarDatePicker />
<CalendarDatePicker Classes="Small" />
</StackPanel>
<StackPanel Orientation="Horizontal">
<CalendarDatePicker IsEnabled="False" />
<CalendarDatePicker Classes="Bordered" />
<CalendarDatePicker Classes="Bordered" IsEnabled="False" />
</StackPanel>
<CalendarDatePicker Width="500" />
<CalendarDatePicker Classes="Large" />
<CalendarDatePicker Classes="Small" />
<CalendarDatePicker Classes="ClearButton" Width="200" />
<CalendarDatePicker
Name="DatePicker2"
Margin="0,0,0,8"
@@ -22,9 +34,5 @@
CustomDateFormatString="ddd, MMM d"
SelectedDateFormat="Custom" />
<CalendarDatePicker Margin="0,0,0,8" Watermark="Watermark" />
<CalendarDatePicker IsEnabled="False" />
<CalendarDatePicker Classes="Bordered" />
<CalendarDatePicker Classes="Bordered" IsEnabled="False" />
</StackPanel>
</UserControl>
</UserControl>
@@ -14,6 +14,7 @@
<Style Selector="TextBlock">
<Setter Property="HorizontalAlignment" Value="Center" />
<Setter Property="VerticalAlignment" Value="Center" />
<Setter Property="Foreground" Value="#1C1F23" />
</Style>
</UserControl.Styles>
<StackPanel Spacing="20">
@@ -51,5 +52,22 @@
<TextBlock Text="Text 4" />
</Border>
</Carousel>
<Carousel Classes="Columnar Left" Theme="{DynamicResource FullCarousel}">
<Carousel.PageTransition>
<PageSlide Orientation="Horizontal" Duration="0.25" />
</Carousel.PageTransition>
<Border Background="#EAF5FF">
<TextBlock Text="Text 1" />
</Border>
<Border Background="#F9F9F9">
<TextBlock Text="Text 2" />
</Border>
<Border Background="#FFF8EA">
<TextBlock Text="Text 3" />
</Border>
<Border Background="#FEF2ED">
<TextBlock Text="Text 4" />
</Border>
</Carousel>
</StackPanel>
</UserControl>
+101 -119
View File
@@ -8,137 +8,119 @@
d:DesignWidth="800"
mc:Ignorable="d">
<ScrollViewer HorizontalScrollBarVisibility="Auto">
<StackPanel HorizontalAlignment="Left">
<CheckBox>Unchecked</CheckBox>
<CheckBox IsEnabled="False">Unchecked</CheckBox>
<CheckBox IsChecked="True">Checked</CheckBox>
<CheckBox IsChecked="True" IsEnabled="False">Checked</CheckBox>
<CheckBox IsChecked="{x:Null}" IsThreeState="True">Indeterminate</CheckBox>
<CheckBox
IsChecked="{x:Null}"
IsEnabled="False"
IsThreeState="True">
Indeterminate
</CheckBox>
<CheckBox Width="120" HorizontalAlignment="Left">Checkbox should wrap its text</CheckBox>
<TextBlock Margin="0,16" Text="CardCheckBox" />
<StackPanel Orientation="Vertical">
<CheckBox Width="300" Theme="{DynamicResource CardCheckBox}">
<StackPanel>
<TextBlock FontWeight="Bold">复选框标题</TextBlock>
<TextBlock TextWrapping="Wrap">Semi Design 是由互娱社区前端团队与 UED 团队共同设计开发并维护的设计系统</TextBlock>
</StackPanel>
</CheckBox>
<StackPanel HorizontalAlignment="Left" Spacing="20">
<TextBlock Text="CheckBox" />
<StackPanel Orientation="Horizontal">
<CheckBox>Unchecked</CheckBox>
<CheckBox IsChecked="True">Checked</CheckBox>
<CheckBox IsChecked="{x:Null}" IsThreeState="True">Indeterminate</CheckBox>
</StackPanel>
<StackPanel Orientation="Horizontal">
<CheckBox IsEnabled="False">Unchecked</CheckBox>
<CheckBox IsChecked="True" IsEnabled="False">Checked</CheckBox>
<CheckBox
Width="300"
IsChecked="True"
Theme="{DynamicResource CardCheckBox}">
<StackPanel>
<TextBlock FontWeight="Bold">复选框标题</TextBlock>
<TextBlock TextWrapping="Wrap">Semi Design 是由互娱社区前端团队与 UED 团队共同设计开发并维护的设计系统</TextBlock>
</StackPanel>
</CheckBox>
<CheckBox
Width="300"
IsEnabled="False"
Theme="{DynamicResource CardCheckBox}">
<StackPanel>
<TextBlock FontWeight="Bold">复选框标题</TextBlock>
<TextBlock TextWrapping="Wrap">Semi Design 是由互娱社区前端团队与 UED 团队共同设计开发并维护的设计系统</TextBlock>
</StackPanel>
</CheckBox>
<CheckBox
Width="300"
IsChecked="True"
IsEnabled="False"
Theme="{DynamicResource CardCheckBox}">
<StackPanel>
<TextBlock FontWeight="Bold">复选框标题</TextBlock>
<TextBlock TextWrapping="Wrap">Semi Design 是由互娱社区前端团队与 UED 团队共同设计开发并维护的设计系统</TextBlock>
</StackPanel>
</CheckBox>
<CheckBox
Width="300"
IsChecked="{x:Null}"
IsEnabled="True"
IsThreeState="True"
Theme="{DynamicResource CardCheckBox}">
<StackPanel>
<TextBlock FontWeight="Bold">复选框标题</TextBlock>
<TextBlock TextWrapping="Wrap">Semi Design 是由互娱社区前端团队与 UED 团队共同设计开发并维护的设计系统</TextBlock>
</StackPanel>
</CheckBox>
<CheckBox
Width="300"
IsChecked="{x:Null}"
IsEnabled="False"
IsThreeState="True"
Theme="{DynamicResource CardCheckBox}">
<StackPanel>
<TextBlock FontWeight="Bold">复选框标题</TextBlock>
<TextBlock TextWrapping="Wrap">Semi Design 是由互娱社区前端团队与 UED 团队共同设计开发并维护的设计系统</TextBlock>
</StackPanel>
IsThreeState="True">
Indeterminate
</CheckBox>
</StackPanel>
<TextBlock Margin="0,16" Text="PureCardCheckBox" />
<StackPanel Orientation="Vertical">
<CheckBox Width="300" Theme="{DynamicResource PureCardCheckBox}">
<StackPanel>
<TextBlock FontWeight="Bold">复选框标题</TextBlock>
<TextBlock TextWrapping="Wrap">Semi Design 是由互娱社区前端团队与 UED 团队共同设计开发并维护的设计系统</TextBlock>
</StackPanel>
</CheckBox>
<CheckBox Width="120" HorizontalAlignment="Left">Checkbox should wrap its text</CheckBox>
<TextBlock Text="SimpleCheckBox" />
<StackPanel Orientation="Horizontal">
<CheckBox Theme="{StaticResource SimpleCheckBox}" />
<CheckBox IsChecked="True" Theme="{StaticResource SimpleCheckBox}" />
<CheckBox
Width="300"
IsChecked="True"
Theme="{DynamicResource PureCardCheckBox}">
<StackPanel>
<TextBlock FontWeight="Bold">复选框标题</TextBlock>
<TextBlock TextWrapping="Wrap">Semi Design 是由互娱社区前端团队与 UED 团队共同设计开发并维护的设计系统</TextBlock>
</StackPanel>
</CheckBox>
<CheckBox
Width="300"
IsEnabled="False"
Theme="{DynamicResource PureCardCheckBox}">
<StackPanel>
<TextBlock FontWeight="Bold">复选框标题</TextBlock>
<TextBlock TextWrapping="Wrap">Semi Design 是由互娱社区前端团队与 UED 团队共同设计开发并维护的设计系统</TextBlock>
</StackPanel>
</CheckBox>
<CheckBox
Width="300"
IsChecked="True"
IsEnabled="False"
Theme="{DynamicResource PureCardCheckBox}">
<StackPanel>
<TextBlock FontWeight="Bold">复选框标题</TextBlock>
<TextBlock TextWrapping="Wrap">Semi Design 是由互娱社区前端团队与 UED 团队共同设计开发并维护的设计系统</TextBlock>
</StackPanel>
</CheckBox>
<CheckBox
Width="300"
IsChecked="{x:Null}"
IsEnabled="True"
IsThreeState="True"
Theme="{DynamicResource PureCardCheckBox}">
<StackPanel>
<TextBlock FontWeight="Bold">复选框标题</TextBlock>
<TextBlock TextWrapping="Wrap">Semi Design 是由互娱社区前端团队与 UED 团队共同设计开发并维护的设计系统</TextBlock>
</StackPanel>
</CheckBox>
Theme="{StaticResource SimpleCheckBox}" />
</StackPanel>
<StackPanel Orientation="Horizontal">
<CheckBox IsEnabled="False" Theme="{StaticResource SimpleCheckBox}" />
<CheckBox
IsChecked="True"
IsEnabled="False"
Theme="{StaticResource SimpleCheckBox}" />
<CheckBox
Width="300"
IsChecked="{x:Null}"
IsEnabled="False"
IsThreeState="True"
Theme="{DynamicResource PureCardCheckBox}">
<StackPanel>
<TextBlock FontWeight="Bold">复选框标题</TextBlock>
<TextBlock TextWrapping="Wrap">Semi Design 是由互娱社区前端团队与 UED 团队共同设计开发并维护的设计系统</TextBlock>
</StackPanel>
</CheckBox>
Theme="{StaticResource SimpleCheckBox}" />
</StackPanel>
<TextBlock Text="CardCheckBox" />
<StackPanel Orientation="Horizontal">
<StackPanel.Styles>
<Style Selector="CheckBox">
<Setter Property="Width" Value="150" />
<Setter Property="Margin" Value="8" />
</Style>
</StackPanel.Styles>
<CheckBox
Content="Windows"
IsChecked="True"
Theme="{DynamicResource CardCheckBox}" />
<CheckBox
Content="macOS"
IsChecked="True"
IsEnabled="False"
Theme="{DynamicResource CardCheckBox}" />
<CheckBox
Content="Linux"
IsChecked="True"
Theme="{DynamicResource CardCheckBox}" />
<CheckBox
Content="iOS"
IsChecked="{x:Null}"
IsThreeState="True"
Theme="{DynamicResource CardCheckBox}" />
<CheckBox
Content="Android"
IsChecked="{x:Null}"
IsThreeState="True"
Theme="{DynamicResource CardCheckBox}" />
<CheckBox
Content="Wasm"
IsChecked="False"
IsThreeState="True"
Theme="{DynamicResource CardCheckBox}" />
</StackPanel>
<TextBlock Text="PureCardCheckBox" />
<StackPanel Orientation="Horizontal">
<StackPanel.Styles>
<Style Selector="CheckBox">
<Setter Property="Width" Value="150" />
<Setter Property="Margin" Value="8" />
</Style>
</StackPanel.Styles>
<CheckBox
Content="Windows"
IsChecked="True"
Theme="{DynamicResource PureCardCheckBox}" />
<CheckBox
Content="macOS"
IsChecked="True"
IsEnabled="False"
Theme="{DynamicResource PureCardCheckBox}" />
<CheckBox
Content="Linux"
IsChecked="True"
Theme="{DynamicResource PureCardCheckBox}" />
<CheckBox
Content="iOS"
IsChecked="{x:Null}"
IsThreeState="True"
Theme="{DynamicResource PureCardCheckBox}" />
<CheckBox
Content="Android"
IsChecked="{x:Null}"
IsThreeState="True"
Theme="{DynamicResource PureCardCheckBox}" />
<CheckBox
Content="Wasm"
IsChecked="False"
IsThreeState="True"
Theme="{DynamicResource PureCardCheckBox}" />
</StackPanel>
</StackPanel>
</ScrollViewer>
</UserControl>
</UserControl>
@@ -2,6 +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:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
@@ -15,11 +16,7 @@
Spacing="20">
<ColorView ColorSpectrumShape="Ring" />
<ColorView ColorSpectrumShape="Box" />
<ColorView>
<ColorView.Palette>
<controls:MaterialColorPalette />
</ColorView.Palette>
</ColorView>
<ColorView Palette="{DynamicResource SemiColorPalette}" />
</StackPanel>
<StackPanel HorizontalAlignment="Left" Orientation="Horizontal">
<ColorPicker ColorSpectrumShape="Ring">
@@ -29,7 +26,13 @@
</ColorPicker>
<ColorPicker ColorSpectrumShape="Box">
<ColorPicker.Palette>
<controls:MaterialColorPalette />
<colorPicker:SemiColorLightPalette />
</ColorPicker.Palette>
</ColorPicker>
<ColorPicker ColorSpectrumShape="Box" Theme="{DynamicResource HexColorPicker}">
<ColorPicker.Palette>
<colorPicker:SemiColorLightPalette />
</ColorPicker.Palette>
</ColorPicker>
</StackPanel>
@@ -4,50 +4,40 @@
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"
d:DesignHeight="450"
xmlns:pages="clr-namespace:Semi.Avalonia.Demo.Pages"
d:DesignHeight="800"
d:DesignWidth="800"
mc:Ignorable="d">
<Design.DataContext>
<pages:ComboBoxDemoViewModel />
</Design.DataContext>
<StackPanel Spacing="20">
<ComboBox Width="150">
<ComboBoxItem>AAA</ComboBoxItem>
<ComboBoxItem>BBB</ComboBoxItem>
<ComboBoxItem>CCC</ComboBoxItem>
</ComboBox>
<ComboBox Width="150" PlaceholderText="Please Select">
<ComboBoxItem>AAA</ComboBoxItem>
<ComboBoxItem>BBB</ComboBoxItem>
<ComboBoxItem>CCC</ComboBoxItem>
</ComboBox>
<ComboBox Width="150" IsEnabled="False">
<ComboBoxItem>AAA</ComboBoxItem>
<ComboBoxItem>BBB</ComboBoxItem>
<ComboBoxItem>CCC</ComboBoxItem>
</ComboBox>
<ComboBox
Width="150"
Classes="Large"
IsEnabled="False">
<ComboBoxItem>AAA</ComboBoxItem>
<ComboBoxItem>BBB</ComboBoxItem>
<ComboBoxItem>CCC</ComboBoxItem>
</ComboBox>
<ComboBox Width="150" Classes="Small">
<ComboBoxItem>AAA</ComboBoxItem>
<ComboBoxItem>BBB</ComboBoxItem>
<ComboBoxItem>CCC</ComboBoxItem>
</ComboBox>
<ComboBox Width="150" Classes="Bordered">
<ComboBoxItem>AAA</ComboBoxItem>
<ComboBoxItem>BBB</ComboBoxItem>
<ComboBoxItem>CCC</ComboBoxItem>
</ComboBox>
<ComboBox
Width="150"
Classes="Bordered"
IsEnabled="False">
<ComboBoxItem>AAA</ComboBoxItem>
<ComboBoxItem>BBB</ComboBoxItem>
<ComboBoxItem>CCC</ComboBoxItem>
</ComboBox>
<StackPanel.Styles>
<Style Selector="ComboBox">
<Setter Property="Width" Value="300" />
<Setter Property="ItemsSource" Value="{Binding Items}" />
</Style>
</StackPanel.Styles>
<ComboBox />
<ComboBox Classes="ClearButton" />
<ComboBox PlaceholderText="Please Select" />
<ComboBox IsEnabled="False" />
<ComboBox Classes="Large" IsEnabled="False" />
<ComboBox Classes="Small" />
<ComboBox Classes="Bordered" />
<ComboBox Classes="Bordered" IsEnabled="False" />
<StackPanel Orientation="Horizontal">
<ComboBox Width="100" Classes="Large" PlaceholderText="Large" />
<ComboBox Width="100" PlaceholderText="Default" />
<ComboBox Width="100" Classes="Small" PlaceholderText="Small" />
</StackPanel>
<StackPanel Orientation="Horizontal">
<ComboBox Width="100" IsEnabled="False" PlaceholderText="Disabled" />
<ComboBox Width="100" Classes="Bordered" PlaceholderText="Bordered" />
<ComboBox Width="100" Classes="Bordered" IsEnabled="False" />
</StackPanel>
</StackPanel>
</UserControl>
@@ -1,6 +1,6 @@
using Avalonia;
using System.Collections.ObjectModel;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
using CommunityToolkit.Mvvm.ComponentModel;
namespace Semi.Avalonia.Demo.Pages;
@@ -9,5 +9,11 @@ public partial class ComboBoxDemo : UserControl
public ComboBoxDemo()
{
InitializeComponent();
this.DataContext = new ComboBoxDemoViewModel();
}
}
public class ComboBoxDemoViewModel : ObservableObject
{
public ObservableCollection<string> Items { get; set; } = ["Ding", "Otter", "Husky", "Mr.17", "Cass"];
}
+103 -123
View File
@@ -5,122 +5,100 @@
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"
d:DesignWidth="800"
x:CompileBindings="True"
x:DataType="vm:DataGridDemoViewModel"
mc:Ignorable="d">
<TabControl>
<TabItem Header="DataGrid">
<DockPanel>
<CheckBox
x:Name="ShowGDP"
Content="Toggle GDP Column Visibility"
DockPanel.Dock="Top"
IsChecked="True" />
<DataGrid
Name="dataGrid1"
Margin="12"
CanUserReorderColumns="True"
CanUserResizeColumns="True"
CanUserSortColumns="True"
HeadersVisibility="All">
<DataGrid.Columns>
<!-- Using HeaderTemplate -->
<DataGridTextColumn
Width="6*"
x:DataType="local:Country"
Binding="{Binding Name}"
Header="Country or Region" />
<DataGridTextColumn
Width="4*"
x:DataType="local:Country"
Binding="{Binding Region}"
Header="Region" />
<DataGridTextColumn
Width="3*"
x:DataType="local:Country"
Binding="{Binding Population}"
Header="Population" />
<DataGridTextColumn
Width="3*"
x:DataType="local:Country"
Binding="{Binding Area}"
Header="Area" />
<DataGridTextColumn
Width="3*"
MinWidth="200"
x:DataType="local:Country"
Binding="{Binding GDP}"
Header="GDP"
IsVisible="{Binding #ShowGDP.IsChecked}" />
</DataGrid.Columns>
<DataGrid.CellTheme>
<ControlTheme BasedOn="{StaticResource {x:Type DataGridCell}}" TargetType="DataGridCell">
<ControlTheme.Children>
<Style Selector="^:nth-child(1)">
<Setter Property="FontWeight" Value="Bold" />
</Style>
</ControlTheme.Children>
</ControlTheme>
</DataGrid.CellTheme>
<DataGrid.ColumnHeaderTheme>
<ControlTheme BasedOn="{StaticResource {x:Type DataGridColumnHeader}}" TargetType="DataGridColumnHeader">
<ControlTheme.Children>
<Style Selector="^:nth-child(1)">
<Setter Property="FontWeight" Value="Bold" />
</Style>
</ControlTheme.Children>
</ControlTheme>
</DataGrid.ColumnHeaderTheme>
</DataGrid>
</DockPanel>
<Grid RowDefinitions="Auto, *">
<ToggleSwitch Grid.Row="0" Content="Disable" Name="DisableToggle"></ToggleSwitch>
<DataGrid Grid.Row="1"
Margin="8"
CanUserReorderColumns="True"
CanUserResizeColumns="True"
CanUserSortColumns="True"
HeadersVisibility="All"
IsReadOnly="True"
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>
</DataGrid>
</Grid>
</TabItem>
<TabItem Header="Grouping">
<DataGrid Name="dataGridGrouping" Margin="12">
<DataGrid
Margin="8"
CanUserReorderColumns="True"
CanUserResizeColumns="True"
CanUserSortColumns="True"
HeadersVisibility="All"
IsReadOnly="True"
ItemsSource="{Binding GridData2}">
<DataGrid.Columns>
<DataGridTextColumn
Width="6*"
x:DataType="local:Country"
Binding="{Binding Name}"
Header="Country or Region" />
x:DataType="vm:Song"
Binding="{Binding Title}"
Header="Title" />
<DataGridTextColumn
Width="4*"
x:DataType="local:Country"
Binding="{Binding Region}"
Header="Region" />
Width="6*"
x:DataType="vm:Song"
Binding="{Binding Artist}"
Header="Artist" />
<DataGridTextColumn
Width="3*"
x:DataType="local:Country"
Binding="{Binding Population}"
DisplayIndex="3"
Header="Population" />
<DataGridTextColumn
Width="3*"
x:DataType="local:Country"
Binding="{Binding Area}"
DisplayIndex="2"
Header="Area" />
<DataGridTextColumn
Width="3*"
x:DataType="local:Country"
Binding="{Binding GDP}"
Header="GDP" />
Width="6*"
x:DataType="vm:Song"
Binding="{Binding Album}"
Header="Album" />
<DataGridTemplateColumn
x:DataType="vm:Song"
Header="Duration"
SortMemberPath="Duration">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate x:DataType="vm:Song">
<TextBlock
Margin="8,0,0,0"
VerticalAlignment="Center"
Text="{Binding Duration}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
<DataGrid.RowTheme>
<ControlTheme BasedOn="{StaticResource {x:Type DataGridRow}}" TargetType="DataGridRow">
<ControlTheme.Children>
<Style Selector="^:nth-child(5n+3)">
<Setter Property="Foreground" Value="Red" />
</Style>
<Style Selector="^:nth-last-child(5n+1)">
<Setter Property="Foreground" Value="Blue" />
</Style>
</ControlTheme.Children>
</ControlTheme>
</DataGrid.RowTheme>
</DataGrid>
</TabItem>
<TabItem x:Name="EditableTab" Header="Editable">
<Grid RowDefinitions="Auto,*,Auto">
<Grid Margin="8" RowDefinitions="Auto,*,Auto">
<StackPanel
Grid.Row="0"
Orientation="Horizontal"
@@ -138,35 +116,39 @@
Content="IsThreeState"
IsChecked="False" />
</StackPanel>
<!-- Example of columns inheriting the data type from the Items source -->
<DataGrid
Name="dataGridEdit"
Grid.Row="1"
Margin="12"
Items="{Binding DataGrid3Source}">
Margin="8"
ItemsSource="{Binding GridData3}">
<DataGrid.Columns>
<DataGridTextColumn
Width="2*"
Binding="{Binding FirstName}"
FontSize="{Binding #FontSizeSlider.Value, Mode=OneWay}"
Header="First Name" />
<DataGridTextColumn
Width="2*"
Binding="{Binding LastName}"
FontSize="{Binding #FontSizeSlider.Value, Mode=OneWay}"
Header="Last" />
<DataGridCheckBoxColumn
Width="*"
Binding="{Binding IsBanned}"
Header="Is Banned"
Width="2*"
Binding="{Binding IsSelected}"
Header="Select"
IsThreeState="{Binding #IsThreeStateCheckBox.IsChecked, Mode=OneWay}" />
<DataGridTemplateColumn Header="Age">
<DataGridTextColumn
Width="6*"
x:DataType="vm:SongViewModel"
Binding="{Binding Title}"
FontSize="{Binding #FontSizeSlider.Value, Mode=OneWay}"
Header="Title" />
<DataGridTextColumn
Width="6*"
x:DataType="vm:SongViewModel"
Binding="{Binding Artist}"
Header="Artist" />
<DataGridTextColumn
Width="6*"
x:DataType="vm:SongViewModel"
Binding="{Binding Album}"
Header="Album" />
<DataGridTemplateColumn Width="2*" Header="Comments">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock
HorizontalAlignment="Center"
VerticalAlignment="Center"
Text="{Binding Age, StringFormat='{}{0} years'}" />
Text="{Binding CountOfComment}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
@@ -174,20 +156,18 @@
<NumericUpDown
HorizontalAlignment="Stretch"
FormatString="N0"
Maximum="120"
Minimum="0"
TemplateApplied="NumericUpDown_OnTemplateApplied"
Value="{Binding Age}" />
Value="{Binding CountOfComment}" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
<Button
Name="btnAdd"
Grid.Row="2"
Margin="12,0,12,12"
HorizontalAlignment="Right"
Command="{Binding AddCommand}"
Content="Add" />
</Grid>
</TabItem>
@@ -13,6 +13,7 @@ using Avalonia.Input;
using Avalonia.Input.Raw;
using Avalonia.Markup.Xaml;
using Avalonia.Threading;
using Semi.Avalonia.Demo.ViewModels;
namespace Semi.Avalonia.Demo.Pages;
@@ -21,488 +22,6 @@ public partial class DataGridDemo : UserControl
public DataGridDemo()
{
InitializeComponent();
var dataGridSortDescription = DataGridSortDescription.FromPath(nameof(Country.Region), ListSortDirection.Ascending, new ReversedStringComparer());
var collectionView1 = new DataGridCollectionView(Countries.All);
collectionView1.SortDescriptions.Add(dataGridSortDescription);
var dg1 = this.Get<DataGrid>("dataGrid1");
dg1.IsReadOnly = true;
dg1.LoadingRow += Dg1_LoadingRow;
dg1.Sorting += (s, a) =>
{
var binding = (a.Column as DataGridBoundColumn)?.Binding as Binding;
if (binding?.Path is string property
&& property == dataGridSortDescription.PropertyPath
&& !collectionView1.SortDescriptions.Contains(dataGridSortDescription))
{
collectionView1.SortDescriptions.Add(dataGridSortDescription);
}
};
dg1.Items = collectionView1;
var dg2 = this.Get<DataGrid>("dataGridGrouping");
dg2.IsReadOnly = true;
var collectionView2 = new DataGridCollectionView(Countries.All);
collectionView2.GroupDescriptions.Add(new DataGridPathGroupDescription("Region"));
dg2.Items = collectionView2;
var dg3 = this.Get<DataGrid>("dataGridEdit");
dg3.IsReadOnly = false;
var list = new ObservableCollection<Person>
{
new Person { FirstName = "John", LastName = "Doe" , Age = 30},
new Person { FirstName = "Elizabeth", LastName = "Thomas", IsBanned = true , Age = 40 },
new Person { FirstName = "Zack", LastName = "Ward" , Age = 50 }
};
DataGrid3Source = list;
var addButton = this.Get<Button>("btnAdd");
addButton.Click += (a, b) => list.Add(new Person());
DataContext = this;
}
public IEnumerable<Person> DataGrid3Source { get; }
private void Dg1_LoadingRow(object? sender, DataGridRowEventArgs e)
{
e.Row.Header = e.Row.GetIndex() + 1;
}
private void InitializeComponent()
{
AvaloniaXamlLoader.Load(this);
}
private class ReversedStringComparer : IComparer<object>, IComparer
{
public int Compare(object? x, object? y)
{
if (x is string left && y is string right)
{
var reversedLeft = new string(left.Reverse().ToArray());
var reversedRight = new string(right.Reverse().ToArray());
return reversedLeft.CompareTo(reversedRight);
}
return Comparer.Default.Compare(x, y);
}
}
private void NumericUpDown_OnTemplateApplied(object sender, TemplateAppliedEventArgs e)
{
// We want to focus the TextBox of the NumericUpDown. To do so we search for this control when the template
// is applied, but we postpone the action until the control is actually loaded.
if (e.NameScope.Find<TextBox>("PART_TextBox") is {} textBox)
{
Dispatcher.UIThread.InvokeAsync(() =>
{
textBox.Focus();
textBox.SelectAll();
}, DispatcherPriority.Loaded);
}
}
}
public class Person : INotifyDataErrorInfo, INotifyPropertyChanged
{
string _firstName = string.Empty;
string _lastName = string.Empty;
bool _isBanned;
private int _age;
public string FirstName
{
get => _firstName;
set
{
_firstName = value;
if (string.IsNullOrWhiteSpace(value))
SetError(nameof(FirstName), "First Name Required");
else
SetError(nameof(FirstName), null);
OnPropertyChanged(nameof(FirstName));
}
}
public string LastName
{
get => _lastName;
set
{
_lastName = value;
if (string.IsNullOrWhiteSpace(value))
SetError(nameof(LastName), "Last Name Required");
else
SetError(nameof(LastName), null);
OnPropertyChanged(nameof(LastName));
}
}
public bool IsBanned
{
get => _isBanned;
set
{
_isBanned = value;
OnPropertyChanged(nameof(_isBanned));
}
}
/// <summary>
/// Gets or sets the age of the person
/// </summary>
public int Age
{
get => _age;
set
{
_age = value;
OnPropertyChanged(nameof(Age));
}
}
Dictionary<string, List<string>> _errorLookup = new Dictionary<string, List<string>>();
void SetError(string propertyName, string? error)
{
if (string.IsNullOrEmpty(error))
{
if (_errorLookup.Remove(propertyName))
OnErrorsChanged(propertyName);
}
else
{
if (_errorLookup.TryGetValue(propertyName, out var errorList))
{
errorList.Clear();
errorList.Add(error!);
}
else
{
var errors = new List<string> { error! };
_errorLookup.Add(propertyName, errors);
}
OnErrorsChanged(propertyName);
}
}
public bool HasErrors => _errorLookup.Count > 0;
public event EventHandler<DataErrorsChangedEventArgs>? ErrorsChanged;
public event PropertyChangedEventHandler? PropertyChanged;
void OnErrorsChanged(string propertyName)
{
ErrorsChanged?.Invoke(this, new DataErrorsChangedEventArgs(propertyName));
}
void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
public IEnumerable GetErrors(string? propertyName)
{
if (propertyName is { } && _errorLookup.TryGetValue(propertyName, out var errorList))
return errorList;
else
return Array.Empty<object>();
}
}
public static class Countries
{
static IEnumerable<Country> GetCountries()
{
yield return new Country("Afghanistan", "ASIA (EX. NEAR EAST)", 31056997, 647500, 48, 0, 23.06, 163.07, 700, 36, 3.2, 46.6, 20.34);
yield return new Country("Albania", "EASTERN EUROPE", 3581655, 28748, 124.6, 1.26, -4.93, 21.52, 4500, 86.5, 71.2, 15.11, 5.22);
yield return new Country("Algeria", "NORTHERN AFRICA", 32930091, 2381740, 13.8, 0.04, -0.39, 31, 6000, 70, 78.1, 17.14, 4.61);
yield return new Country("American Samoa", "OCEANIA", 57794, 199, 290.4, 58.29, -20.71, 9.27, 8000, 97, 259.5, 22.46, 3.27);
yield return new Country("Andorra", "WESTERN EUROPE", 71201, 468, 152.1, 0, 6.6, 4.05, 19000, 100, 497.2, 8.71, 6.25);
yield return new Country("Angola", "SUB-SAHARAN AFRICA", 12127071, 1246700, 9.7, 0.13, 0, 191.19, 1900, 42, 7.8, 45.11, 24.2);
yield return new Country("Anguilla", "LATIN AMER. & CARIB", 13477, 102, 132.1, 59.8, 10.76, 21.03, 8600, 95, 460, 14.17, 5.34);
yield return new Country("Antigua & Barbuda", "LATIN AMER. & CARIB", 69108, 443, 156, 34.54, -6.15, 19.46, 11000, 89, 549.9, 16.93, 5.37);
yield return new Country("Argentina", "LATIN AMER. & CARIB", 39921833, 2766890, 14.4, 0.18, 0.61, 15.18, 11200, 97.1, 220.4, 16.73, 7.55);
yield return new Country("Armenia", "C.W. OF IND. STATES", 2976372, 29800, 99.9, 0, -6.47, 23.28, 3500, 98.6, 195.7, 12.07, 8.23);
yield return new Country("Aruba", "LATIN AMER. & CARIB", 71891, 193, 372.5, 35.49, 0, 5.89, 28000, 97, 516.1, 11.03, 6.68);
yield return new Country("Australia", "OCEANIA", 20264082, 7686850, 2.6, 0.34, 3.98, 4.69, 29000, 100, 565.5, 12.14, 7.51);
yield return new Country("Austria", "WESTERN EUROPE", 8192880, 83870, 97.7, 0, 2, 4.66, 30000, 98, 452.2, 8.74, 9.76);
yield return new Country("Azerbaijan", "C.W. OF IND. STATES", 7961619, 86600, 91.9, 0, -4.9, 81.74, 3400, 97, 137.1, 20.74, 9.75);
yield return new Country("The Bahamas", "LATIN AMER. & CARIB", 303770, 13940, 21.8, 25.41, -2.2, 25.21, 16700, 95.6, 460.6, 17.57, 9.05);
yield return new Country("Bahrain", "NEAR EAST", 698585, 665, 1050.5, 24.21, 1.05, 17.27, 16900, 89.1, 281.3, 17.8, 4.14);
yield return new Country("Bangladesh", "ASIA (EX. NEAR EAST)", 147365352, 144000, 1023.4, 0.4, -0.71, 62.6, 1900, 43.1, 7.3, 29.8, 8.27);
yield return new Country("Barbados", "LATIN AMER. & CARIB", 279912, 431, 649.5, 22.51, -0.31, 12.5, 15700, 97.4, 481.9, 12.71, 8.67);
yield return new Country("Belarus", "C.W. OF IND. STATES", 10293011, 207600, 49.6, 0, 2.54, 13.37, 6100, 99.6, 319.1, 11.16, 14.02);
yield return new Country("Belgium", "WESTERN EUROPE", 10379067, 30528, 340, 0.22, 1.23, 4.68, 29100, 98, 462.6, 10.38, 10.27);
yield return new Country("Belize", "LATIN AMER. & CARIB", 287730, 22966, 12.5, 1.68, 0, 25.69, 4900, 94.1, 115.7, 28.84, 5.72);
yield return new Country("Benin", "SUB-SAHARAN AFRICA", 7862944, 112620, 69.8, 0.11, 0, 85, 1100, 40.9, 9.7, 38.85, 12.22);
yield return new Country("Bermuda", "NORTHERN AMERICA", 65773, 53, 1241, 194.34, 2.49, 8.53, 36000, 98, 851.4, 11.4, 7.74);
yield return new Country("Bhutan", "ASIA (EX. NEAR EAST)", 2279723, 47000, 48.5, 0, 0, 100.44, 1300, 42.2, 14.3, 33.65, 12.7);
yield return new Country("Bolivia", "LATIN AMER. & CARIB", 8989046, 1098580, 8.2, 0, -1.32, 53.11, 2400, 87.2, 71.9, 23.3, 7.53);
yield return new Country("Bosnia & Herzegovina", "EASTERN EUROPE", 4498976, 51129, 88, 0.04, 0.31, 21.05, 6100,null, 215.4, 8.77, 8.27);
yield return new Country("Botswana", "SUB-SAHARAN AFRICA", 1639833, 600370, 2.7, 0, 0, 54.58, 9000, 79.8, 80.5, 23.08, 29.5);
yield return new Country("Brazil", "LATIN AMER. & CARIB", 188078227, 8511965, 22.1, 0.09, -0.03, 29.61, 7600, 86.4, 225.3, 16.56, 6.17);
yield return new Country("British Virgin Is.", "LATIN AMER. & CARIB", 23098, 153, 151, 52.29, 10.01, 18.05, 16000, 97.8, 506.5, 14.89, 4.42);
yield return new Country("Brunei", "ASIA (EX. NEAR EAST)", 379444, 5770, 65.8, 2.79, 3.59, 12.61, 18600, 93.9, 237.2, 18.79, 3.45);
yield return new Country("Bulgaria", "EASTERN EUROPE", 7385367, 110910, 66.6, 0.32, -4.58, 20.55, 7600, 98.6, 336.3, 9.65, 14.27);
yield return new Country("Burkina Faso", "SUB-SAHARAN AFRICA", 13902972, 274200, 50.7, 0, 0, 97.57, 1100, 26.6, 7, 45.62, 15.6);
yield return new Country("Burma", "ASIA (EX. NEAR EAST)", 47382633, 678500, 69.8, 0.28, -1.8, 67.24, 1800, 85.3, 10.1, 17.91, 9.83);
yield return new Country("Burundi", "SUB-SAHARAN AFRICA", 8090068, 27830, 290.7, 0, -0.06, 69.29, 600, 51.6, 3.4, 42.22, 13.46);
yield return new Country("Cambodia", "ASIA (EX. NEAR EAST)", 13881427, 181040, 76.7, 0.24, 0, 71.48, 1900, 69.4, 2.6, 26.9, 9.06);
yield return new Country("Cameroon", "SUB-SAHARAN AFRICA", 17340702, 475440, 36.5, 0.08, 0, 68.26, 1800, 79, 5.7, 33.89, 13.47);
yield return new Country("Canada", "NORTHERN AMERICA", 33098932, 9984670, 3.3, 2.02, 5.96, 4.75, 29800, 97, 552.2, 10.78, 7.8);
yield return new Country("Cape Verde", "SUB-SAHARAN AFRICA", 420979, 4033, 104.4, 23.93, -12.07, 47.77, 1400, 76.6, 169.6, 24.87, 6.55);
yield return new Country("Cayman Islands", "LATIN AMER. & CARIB", 45436, 262, 173.4, 61.07, 18.75, 8.19, 35000, 98, 836.3, 12.74, 4.89);
yield return new Country("Central African Rep.", "SUB-SAHARAN AFRICA", 4303356, 622984, 6.9, 0, 0, 91, 1100, 51, 2.3, 33.91, 18.65);
yield return new Country("Chad", "SUB-SAHARAN AFRICA", 9944201, 1284000, 7.7, 0, -0.11, 93.82, 1200, 47.5, 1.3, 45.73, 16.38);
yield return new Country("Chile", "LATIN AMER. & CARIB", 16134219, 756950, 21.3, 0.85, 0, 8.8, 9900, 96.2, 213, 15.23, 5.81);
yield return new Country("China", "ASIA (EX. NEAR EAST)", 1313973713, 9596960, 136.9, 0.15, -0.4, 24.18, 5000, 90.9, 266.7, 13.25, 6.97);
yield return new Country("Colombia", "LATIN AMER. & CARIB", 43593035, 1138910, 38.3, 0.28, -0.31, 20.97, 6300, 92.5, 176.2, 20.48, 5.58);
yield return new Country("Comoros", "SUB-SAHARAN AFRICA", 690948, 2170, 318.4, 15.67, 0, 74.93, 700, 56.5, 24.5, 36.93, 8.2);
yield return new Country("Congo, Dem.Rep.", "SUB - SAHARAN AFRICA", 62660551, 2345410, 26.7, 0, 0, 94.69, 700, 65.5, 0.2, 43.69, 13.27);
yield return new Country("Congo, Repub.of the", "SUB - SAHARAN AFRICA", 3702314, 342000, 10.8, 0.05, -0.17, 93.86, 700, 83.8, 3.7, 42.57, 12.93);
yield return new Country("Cook Islands", "OCEANIA", 21388, 240, 89.1, 50,null,null, 5000, 95, 289.9, 21,null);
yield return new Country("Costa Rica", "LATIN AMER. & CARIB", 4075261, 51100, 79.8, 2.52, 0.51, 9.95, 9100, 96, 340.7, 18.32, 4.36);
yield return new Country("Cote d'Ivoire", "SUB-SAHARAN AFRICA", 17654843, 322460, 54.8, 0.16, -0.07, 90.83, 1400, 50.9, 14.6, 35.11, 14.84);
yield return new Country("Croatia", "EASTERN EUROPE", 4494749, 56542, 79.5, 10.32, 1.58, 6.84, 10600, 98.5, 420.4, 9.61, 11.48);
yield return new Country("Cuba", "LATIN AMER. & CARIB", 11382820, 110860, 102.7, 3.37, -1.58, 6.33, 2900, 97, 74.7, 11.89, 7.22);
yield return new Country("Cyprus", "NEAR EAST", 784301, 9250, 84.8, 7.01, 0.43, 7.18, 19200, 97.6,null, 12.56, 7.68);
yield return new Country("Czech Republic", "EASTERN EUROPE", 10235455, 78866, 129.8, 0, 0.97, 3.93, 15700, 99.9, 314.3, 9.02, 10.59);
yield return new Country("Denmark", "WESTERN EUROPE", 5450661, 43094, 126.5, 16.97, 2.48, 4.56, 31100, 100, 614.6, 11.13, 10.36);
yield return new Country("Djibouti", "SUB-SAHARAN AFRICA", 486530, 23000, 21.2, 1.37, 0, 104.13, 1300, 67.9, 22.8, 39.53, 19.31);
yield return new Country("Dominica", "LATIN AMER. & CARIB", 68910, 754, 91.4, 19.63, -13.87, 14.15, 5400, 94, 304.8, 15.27, 6.73);
yield return new Country("Dominican Republic", "LATIN AMER. & CARIB", 9183984, 48730, 188.5, 2.64, -3.22, 32.38, 6000, 84.7, 97.4, 23.22, 5.73);
yield return new Country("East Timor", "ASIA (EX. NEAR EAST)", 1062777, 15007, 70.8, 4.7, 0, 47.41, 500, 58.6,null, 26.99, 6.24);
yield return new Country("Ecuador", "LATIN AMER. & CARIB", 13547510, 283560, 47.8, 0.79, -8.58, 23.66, 3300, 92.5, 125.6, 22.29, 4.23);
yield return new Country("Egypt", "NORTHERN AFRICA", 78887007, 1001450, 78.8, 0.24, -0.22, 32.59, 4000, 57.7, 131.8, 22.94, 5.23);
yield return new Country("El Salvador", "LATIN AMER. & CARIB", 6822378, 21040, 324.3, 1.46, -3.74, 25.1, 4800, 80.2, 142.4, 26.61, 5.78);
yield return new Country("Equatorial Guinea", "SUB-SAHARAN AFRICA", 540109, 28051, 19.3, 1.06, 0, 85.13, 2700, 85.7, 18.5, 35.59, 15.06);
yield return new Country("Eritrea", "SUB-SAHARAN AFRICA", 4786994, 121320, 39.5, 1.84, 0, 74.87, 700, 58.6, 7.9, 34.33, 9.6);
yield return new Country("Estonia", "BALTICS", 1324333, 45226, 29.3, 8.39, -3.16, 7.87, 12300, 99.8, 333.8, 10.04, 13.25);
yield return new Country("Ethiopia", "SUB-SAHARAN AFRICA", 74777981, 1127127, 66.3, 0, 0, 95.32, 700, 42.7, 8.2, 37.98, 14.86);
yield return new Country("Faroe Islands", "WESTERN EUROPE", 47246, 1399, 33.8, 79.84, 1.41, 6.24, 22000,null, 503.8, 14.05, 8.7);
yield return new Country("Fiji", "OCEANIA", 905949, 18270, 49.6, 6.18, -3.14, 12.62, 5800, 93.7, 112.6, 22.55, 5.65);
yield return new Country("Finland", "WESTERN EUROPE", 5231372, 338145, 15.5, 0.37, 0.95, 3.57, 27400, 100, 405.3, 10.45, 9.86);
yield return new Country("France", "WESTERN EUROPE", 60876136, 547030, 111.3, 0.63, 0.66, 4.26, 27600, 99, 586.4, 11.99, 9.14);
yield return new Country("French Guiana", "LATIN AMER. & CARIB", 199509, 91000, 2.2, 0.42, 6.27, 12.07, 8300, 83, 255.6, 20.46, 4.88);
yield return new Country("French Polynesia", "OCEANIA", 274578, 4167, 65.9, 60.6, 2.94, 8.44, 17500, 98, 194.5, 16.68, 4.69);
yield return new Country("Gabon", "SUB-SAHARAN AFRICA", 1424906, 267667, 5.3, 0.33, 0, 53.64, 5500, 63.2, 27.4, 36.16, 12.25);
yield return new Country("Gambia, The", "SUB - SAHARAN AFRICA", 1641564, 11300, 145.3, 0.71, 1.57, 72.02, 1700, 40.1, 26.8, 39.37, 12.25);
yield return new Country("Gaza Strip", "NEAR EAST", 1428757, 360, 3968.8, 11.11, 1.6, 22.93, 600,null, 244.3, 39.45, 3.8);
yield return new Country("Georgia", "C.W. OF IND. STATES", 4661473, 69700, 66.9, 0.44, -4.7, 18.59, 2500, 99, 146.6, 10.41, 9.23);
yield return new Country("Germany", "WESTERN EUROPE", 82422299, 357021, 230.9, 0.67, 2.18, 4.16, 27600, 99, 667.9, 8.25, 10.62);
yield return new Country("Ghana", "SUB-SAHARAN AFRICA", 22409572, 239460, 93.6, 0.23, -0.64, 51.43, 2200, 74.8, 14.4, 30.52, 9.72);
yield return new Country("Gibraltar", "WESTERN EUROPE", 27928, 7, 3989.7, 171.43, 0, 5.13, 17500,null, 877.7, 10.74, 9.31);
yield return new Country("Greece", "WESTERN EUROPE", 10688058, 131940, 81, 10.37, 2.35, 5.53, 20000, 97.5, 589.7, 9.68, 10.24);
yield return new Country("Greenland", "NORTHERN AMERICA", 56361, 2166086, 0, 2.04, -8.37, 15.82, 20000,null, 448.9, 15.93, 7.84);
yield return new Country("Grenada", "LATIN AMER. & CARIB", 89703, 344, 260.8, 35.17, -13.92, 14.62, 5000, 98, 364.5, 22.08, 6.88);
yield return new Country("Guadeloupe", "LATIN AMER. & CARIB", 452776, 1780, 254.4, 17.19, -0.15, 8.6, 8000, 90, 463.8, 15.05, 6.09);
yield return new Country("Guam", "OCEANIA", 171019, 541, 316.1, 23.2, 0, 6.94, 21000, 99, 492, 18.79, 4.48);
yield return new Country("Guatemala", "LATIN AMER. & CARIB", 12293545, 108890, 112.9, 0.37, -1.67, 35.93, 4100, 70.6, 92.1, 29.88, 5.2);
yield return new Country("Guernsey", "WESTERN EUROPE", 65409, 78, 838.6, 64.1, 3.84, 4.71, 20000,null, 842.4, 8.81, 10.01);
yield return new Country("Guinea", "SUB-SAHARAN AFRICA", 9690222, 245857, 39.4, 0.13, -3.06, 90.37, 2100, 35.9, 2.7, 41.76, 15.48);
yield return new Country("Guinea-Bissau", "SUB-SAHARAN AFRICA", 1442029, 36120, 39.9, 0.97, -1.57, 107.17, 800, 42.4, 7.4, 37.22, 16.53);
yield return new Country("Guyana", "LATIN AMER. & CARIB", 767245, 214970, 3.6, 0.21, -2.07, 33.26, 4000, 98.8, 143.5, 18.28, 8.28);
yield return new Country("Haiti", "LATIN AMER. & CARIB", 8308504, 27750, 299.4, 6.38, -3.4, 73.45, 1600, 52.9, 16.9, 36.44, 12.17);
yield return new Country("Honduras", "LATIN AMER. & CARIB", 7326496, 112090, 65.4, 0.73, -1.99, 29.32, 2600, 76.2, 67.5, 28.24, 5.28);
yield return new Country("Hong Kong", "ASIA (EX. NEAR EAST)", 6940432, 1092, 6355.7, 67.12, 5.24, 2.97, 28800, 93.5, 546.7, 7.29, 6.29);
yield return new Country("Hungary", "EASTERN EUROPE", 9981334, 93030, 107.3, 0, 0.86, 8.57, 13900, 99.4, 336.2, 9.72, 13.11);
yield return new Country("Iceland", "WESTERN EUROPE", 299388, 103000, 2.9, 4.83, 2.38, 3.31, 30900, 99.9, 647.7, 13.64, 6.72);
yield return new Country("India", "ASIA (EX. NEAR EAST)", 1095351995, 3287590, 333.2, 0.21, -0.07, 56.29, 2900, 59.5, 45.4, 22.01, 8.18);
yield return new Country("Indonesia", "ASIA (EX. NEAR EAST)", 245452739, 1919440, 127.9, 2.85, 0, 35.6, 3200, 87.9, 52, 20.34, 6.25);
yield return new Country("Iran", "ASIA (EX. NEAR EAST)", 68688433, 1648000, 41.7, 0.15, -0.84, 41.58, 7000, 79.4, 276.4, 17, 5.55);
yield return new Country("Iraq", "NEAR EAST", 26783383, 437072, 61.3, 0.01, 0, 50.25, 1500, 40.4, 38.6, 31.98, 5.37);
yield return new Country("Ireland", "WESTERN EUROPE", 4062235, 70280, 57.8, 2.06, 4.99, 5.39, 29600, 98, 500.5, 14.45, 7.82);
yield return new Country("Isle of Man", "WESTERN EUROPE", 75441, 572, 131.9, 27.97, 5.36, 5.93, 21000,null, 676, 11.05, 11.19);
yield return new Country("Israel", "NEAR EAST", 6352117, 20770, 305.8, 1.31, 0.68, 7.03, 19800, 95.4, 462.3, 17.97, 6.18);
yield return new Country("Italy", "WESTERN EUROPE", 58133509, 301230, 193, 2.52, 2.07, 5.94, 26700, 98.6, 430.9, 8.72, 10.4);
yield return new Country("Jamaica", "LATIN AMER. & CARIB", 2758124, 10991, 250.9, 9.3, -4.92, 12.36, 3900, 87.9, 124, 20.82, 6.52);
yield return new Country("Japan", "ASIA (EX. NEAR EAST)", 127463611, 377835, 337.4, 7.87, 0, 3.26, 28200, 99, 461.2, 9.37, 9.16);
yield return new Country("Jersey", "WESTERN EUROPE", 91084, 116, 785.2, 60.34, 2.76, 5.24, 24800,null, 811.3, 9.3, 9.28);
yield return new Country("Jordan", "NEAR EAST", 5906760, 92300, 64, 0.03, 6.59, 17.35, 4300, 91.3, 104.5, 21.25, 2.65);
yield return new Country("Kazakhstan", "C.W. OF IND. STATES", 15233244, 2717300, 5.6, 0, -3.35, 29.21, 6300, 98.4, 164.1, 16, 9.42);
yield return new Country("Kenya", "SUB-SAHARAN AFRICA", 34707817, 582650, 59.6, 0.09, -0.1, 61.47, 1000, 85.1, 8.1, 39.72, 14.02);
yield return new Country("Kiribati", "OCEANIA", 105432, 811, 130, 140.94, 0, 48.52, 800,null, 42.7, 30.65, 8.26);
yield return new Country("North Korea", "ASIA(EX.NEAR EAST)", 23113019, 120540, 191.8, 2.07, 0, 24.04, 1300, 99, 42.4, 15.54, 7.13);
yield return new Country("South Korea", "ASIA(EX.NEAR EAST)", 48846823, 98480, 496, 2.45, 0, 7.05, 17800, 97.9, 486.1, 10, 5.85);
yield return new Country("Kuwait", "NEAR EAST", 2418393, 17820, 135.7, 2.8, 14.18, 9.95, 19000, 83.5, 211, 21.94, 2.41);
yield return new Country("Kyrgyzstan", "C.W. OF IND. STATES", 5213898, 198500, 26.3, 0, -2.45, 35.64, 1600, 97, 84, 22.8, 7.08);
yield return new Country("Laos", "ASIA (EX. NEAR EAST)", 6368481, 236800, 26.9, 0, 0, 85.22, 1700, 66.4, 14.1, 35.49, 11.55);
yield return new Country("Latvia", "BALTICS", 2274735, 64589, 35.2, 0.82, -2.23, 9.55, 10200, 99.8, 321.4, 9.24, 13.66);
yield return new Country("Lebanon", "NEAR EAST", 3874050, 10400, 372.5, 2.16, 0, 24.52, 4800, 87.4, 255.6, 18.52, 6.21);
yield return new Country("Lesotho", "SUB-SAHARAN AFRICA", 2022331, 30355, 66.6, 0, -0.74, 84.23, 3000, 84.8, 23.7, 24.75, 28.71);
yield return new Country("Liberia", "SUB-SAHARAN AFRICA", 3042004, 111370, 27.3, 0.52, 0, 128.87, 1000, 57.5, 2.3, 44.77, 23.1);
yield return new Country("Libya", "NORTHERN AFRICA", 5900754, 1759540, 3.4, 0.1, 0, 24.6, 6400, 82.6, 127.1, 26.49, 3.48);
yield return new Country("Liechtenstein", "WESTERN EUROPE", 33987, 160, 212.4, 0, 4.85, 4.7, 25000, 100, 585.5, 10.21, 7.18);
yield return new Country("Lithuania", "BALTICS", 3585906, 65200, 55, 0.14, -0.71, 6.89, 11400, 99.6, 223.4, 8.75, 10.98);
yield return new Country("Luxembourg", "WESTERN EUROPE", 474413, 2586, 183.5, 0, 8.97, 4.81, 55100, 100, 515.4, 11.94, 8.41);
yield return new Country("Macau", "ASIA (EX. NEAR EAST)", 453125, 28, 16183, 146.43, 4.86, 4.39, 19400, 94.5, 384.9, 8.48, 4.47);
yield return new Country("Macedonia", "EASTERN EUROPE", 2050554, 25333, 80.9, 0, -1.45, 10.09, 6700,null, 260, 12.02, 8.77);
yield return new Country("Madagascar", "SUB-SAHARAN AFRICA", 18595469, 587040, 31.7, 0.82, 0, 76.83, 800, 68.9, 3.6, 41.41, 11.11);
yield return new Country("Malawi", "SUB-SAHARAN AFRICA", 13013926, 118480, 109.8, 0, 0, 103.32, 600, 62.7, 7.9, 43.13, 19.33);
yield return new Country("Malaysia", "ASIA (EX. NEAR EAST)", 24385858, 329750, 74, 1.42, 0, 17.7, 9000, 88.7, 179, 22.86, 5.05);
yield return new Country("Maldives", "ASIA (EX. NEAR EAST)", 359008, 300, 1196.7, 214.67, 0, 56.52, 3900, 97.2, 90, 34.81, 7.06);
yield return new Country("Mali", "SUB-SAHARAN AFRICA", 11716829, 1240000, 9.5, 0, -0.33, 116.79, 900, 46.4, 6.4, 49.82, 16.89);
yield return new Country("Malta", "WESTERN EUROPE", 400214, 316, 1266.5, 62.28, 2.07, 3.89, 17700, 92.8, 505, 10.22, 8.1);
yield return new Country("Marshall Islands", "OCEANIA", 60422, 11854, 5.1, 3.12, -6.04, 29.45, 1600, 93.7, 91.2, 33.05, 4.78);
yield return new Country("Martinique", "LATIN AMER. & CARIB", 436131, 1100, 396.5, 31.82, -0.05, 7.09, 14400, 97.7, 394.4, 13.74, 6.48);
yield return new Country("Mauritania", "SUB-SAHARAN AFRICA", 3177388, 1030700, 3.1, 0.07, 0, 70.89, 1800, 41.7, 12.9, 40.99, 12.16);
yield return new Country("Mauritius", "SUB-SAHARAN AFRICA", 1240827, 2040, 608.3, 8.68, -0.9, 15.03, 11400, 85.6, 289.3, 15.43, 6.86);
yield return new Country("Mayotte", "SUB-SAHARAN AFRICA", 201234, 374, 538.1, 49.52, 6.78, 62.4, 2600,null, 49.7, 40.95, 7.7);
yield return new Country("Mexico", "LATIN AMER. & CARIB", 107449525, 1972550, 54.5, 0.47, -4.87, 20.91, 9000, 92.2, 181.6, 20.69, 4.74);
yield return new Country("Micronesia, Fed.St.", "OCEANIA", 108004, 702, 153.9, 870.66, -20.99, 30.21, 2000, 89, 114.8, 24.68, 4.75);
yield return new Country("Moldova", "C.W. OF IND. STATES", 4466706, 33843, 132, 0, -0.26, 40.42, 1800, 99.1, 208.1, 15.7, 12.64);
yield return new Country("Monaco", "WESTERN EUROPE", 32543, 2, 16271.5, 205, 7.75, 5.43, 27000, 99, 1035.6, 9.19, 12.91);
yield return new Country("Mongolia", "ASIA (EX. NEAR EAST)", 2832224, 1564116, 1.8, 0, 0, 53.79, 1800, 97.8, 55.1, 21.59, 6.95);
yield return new Country("Montserrat", "LATIN AMER. & CARIB", 9439, 102, 92.5, 39.22, 0, 7.35, 3400, 97,null, 17.59, 7.1);
yield return new Country("Morocco", "NORTHERN AFRICA", 33241259, 446550, 74.4, 0.41, -0.98, 41.62, 4000, 51.7, 40.4, 21.98, 5.58);
yield return new Country("Mozambique", "SUB-SAHARAN AFRICA", 19686505, 801590, 24.6, 0.31, 0, 130.79, 1200, 47.8, 3.5, 35.18, 21.35);
yield return new Country("Namibia", "SUB-SAHARAN AFRICA", 2044147, 825418, 2.5, 0.19, 0, 48.98, 7200, 84, 62.6, 24.32, 18.86);
yield return new Country("Nauru", "OCEANIA", 13287, 21, 632.7, 142.86, 0, 9.95, 5000,null, 143, 24.76, 6.7);
yield return new Country("Nepal", "ASIA (EX. NEAR EAST)", 28287147, 147181, 192.2, 0, 0, 66.98, 1400, 45.2, 15.9, 30.98, 9.31);
yield return new Country("Netherlands", "WESTERN EUROPE", 16491461, 41526, 397.1, 1.09, 2.91, 5.04, 28600, 99, 460.8, 10.9, 8.68);
yield return new Country("Netherlands Antilles", "LATIN AMER. & CARIB", 221736, 960, 231, 37.92, -0.41, 10.03, 11400, 96.7, 365.3, 14.78, 6.45);
yield return new Country("New Caledonia", "OCEANIA", 219246, 19060, 11.5, 11.83, 0, 7.72, 15000, 91, 252.2, 18.11, 5.69);
yield return new Country("New Zealand", "OCEANIA", 4076140, 268680, 15.2, 5.63, 4.05, 5.85, 21600, 99, 441.7, 13.76, 7.53);
yield return new Country("Nicaragua", "LATIN AMER. & CARIB", 5570129, 129494, 43, 0.7, -1.22, 29.11, 2300, 67.5, 39.7, 24.51, 4.45);
yield return new Country("Niger", "SUB-SAHARAN AFRICA", 12525094, 1267000, 9.9, 0, -0.67, 121.69, 800, 17.6, 1.9, 50.73, 20.91);
yield return new Country("Nigeria", "SUB-SAHARAN AFRICA", 131859731, 923768, 142.7, 0.09, 0.26, 98.8, 900, 68, 9.3, 40.43, 16.94);
yield return new Country("N. Mariana Islands", "OCEANIA", 82459, 477, 172.9, 310.69, 9.61, 7.11, 12500, 97, 254.7, 19.43, 2.29);
yield return new Country("Norway", "WESTERN EUROPE", 4610820, 323802, 14.2, 7.77, 1.74, 3.7, 37800, 100, 461.7, 11.46, 9.4);
yield return new Country("Oman", "NEAR EAST", 3102229, 212460, 14.6, 0.98, 0.28, 19.51, 13100, 75.8, 85.5, 36.24, 3.81);
yield return new Country("Pakistan", "ASIA (EX. NEAR EAST)", 165803560, 803940, 206.2, 0.13, -2.77, 72.44, 2100, 45.7, 31.8, 29.74, 8.23);
yield return new Country("Palau", "OCEANIA", 20579, 458, 44.9, 331.66, 2.85, 14.84, 9000, 92, 325.6, 18.03, 6.8);
yield return new Country("Panama", "LATIN AMER. & CARIB", 3191319, 78200, 40.8, 3.18, -0.91, 20.47, 6300, 92.6, 137.9, 21.74, 5.36);
yield return new Country("Papua New Guinea", "OCEANIA", 5670544, 462840, 12.3, 1.11, 0, 51.45, 2200, 64.6, 10.9, 29.36, 7.25);
yield return new Country("Paraguay", "LATIN AMER. & CARIB", 6506464, 406750, 16, 0, -0.08, 25.63, 4700, 94, 49.2, 29.1, 4.49);
yield return new Country("Peru", "LATIN AMER. & CARIB", 28302603, 1285220, 22, 0.19, -1.05, 31.94, 5100, 90.9, 79.5, 20.48, 6.23);
yield return new Country("Philippines", "ASIA (EX. NEAR EAST)", 89468677, 300000, 298.2, 12.1, -1.5, 23.51, 4600, 92.6, 38.4, 24.89, 5.41);
yield return new Country("Poland", "EASTERN EUROPE", 38536869, 312685, 123.3, 0.16, -0.49, 8.51, 11100, 99.8, 306.3, 9.85, 9.89);
yield return new Country("Portugal", "WESTERN EUROPE", 10605870, 92391, 114.8, 1.94, 3.57, 5.05, 18000, 93.3, 399.2, 10.72, 10.5);
yield return new Country("Puerto Rico", "LATIN AMER. & CARIB", 3927188, 13790, 284.8, 3.63, -1.46, 8.24, 16800, 94.1, 283.1, 12.77, 7.65);
yield return new Country("Qatar", "NEAR EAST", 885359, 11437, 77.4, 4.92, 16.29, 18.61, 21500, 82.5, 232, 15.56, 4.72);
yield return new Country("Reunion", "SUB-SAHARAN AFRICA", 787584, 2517, 312.9, 8.22, 0, 7.78, 5800, 88.9, 380.9, 18.9, 5.49);
yield return new Country("Romania", "EASTERN EUROPE", 22303552, 237500, 93.9, 0.09, -0.13, 26.43, 7000, 98.4, 196.9, 10.7, 11.77);
yield return new Country("Russia", "C.W. OF IND. STATES", 142893540, 17075200, 8.4, 0.22, 1.02, 15.39, 8900, 99.6, 280.6, 9.95, 14.65);
yield return new Country("Rwanda", "SUB-SAHARAN AFRICA", 8648248, 26338, 328.4, 0, 0, 91.23, 1300, 70.4, 2.7, 40.37, 16.09);
yield return new Country("Saint Helena", "SUB-SAHARAN AFRICA", 7502, 413, 18.2, 14.53, 0, 19, 2500, 97, 293.3, 12.13, 6.53);
yield return new Country("Saint Kitts & Nevis", "LATIN AMER. & CARIB", 39129, 261, 149.9, 51.72, -7.11, 14.49, 8800, 97, 638.9, 18.02, 8.33);
yield return new Country("Saint Lucia", "LATIN AMER. & CARIB", 168458, 616, 273.5, 25.65, -2.67, 13.53, 5400, 67, 303.3, 19.68, 5.08);
yield return new Country("St Pierre & Miquelon", "NORTHERN AMERICA", 7026, 242, 29, 49.59, -4.86, 7.54, 6900, 99, 683.2, 13.52, 6.83);
yield return new Country("Saint Vincent and the Grenadines", "LATIN AMER. & CARIB", 117848, 389, 303, 21.59, -7.64, 14.78, 2900, 96, 190.9, 16.18, 5.98);
yield return new Country("Samoa", "OCEANIA", 176908, 2944, 60.1, 13.69, -11.7, 27.71, 5600, 99.7, 75.2, 16.43, 6.62);
yield return new Country("San Marino", "WESTERN EUROPE", 29251, 61, 479.5, 0, 10.98, 5.73, 34600, 96, 704.3, 10.02, 8.17);
yield return new Country("Sao Tome & Principe", "SUB-SAHARAN AFRICA", 193413, 1001, 193.2, 20.88, -2.72, 43.11, 1200, 79.3, 36.2, 40.25, 6.47);
yield return new Country("Saudi Arabia", "NEAR EAST", 27019731, 1960582, 13.8, 0.13, -2.71, 13.24, 11800, 78.8, 140.6, 29.34, 2.58);
yield return new Country("Senegal", "SUB-SAHARAN AFRICA", 11987121, 196190, 61.1, 0.27, 0.2, 55.51, 1600, 40.2, 22.2, 32.78, 9.42);
yield return new Country("Serbia", "EASTERN EUROPE", 9396411, 88361, 106.3, 0, -1.33, 12.89, 2200, 93, 285.8,null,null);
yield return new Country("Seychelles", "SUB-SAHARAN AFRICA", 81541, 455, 179.2, 107.91, -5.69, 15.53, 7800, 58, 262.4, 16.03, 6.29);
yield return new Country("Sierra Leone", "SUB-SAHARAN AFRICA", 6005250, 71740, 83.7, 0.56, 0, 143.64, 500, 31.4, 4, 45.76, 23.03);
yield return new Country("Singapore", "ASIA (EX. NEAR EAST)", 4492150, 693, 6482.2, 27.85, 11.53, 2.29, 23700, 92.5, 411.4, 9.34, 4.28);
yield return new Country("Slovakia", "EASTERN EUROPE", 5439448, 48845, 111.4, 0, 0.3, 7.41, 13300,null, 220.1, 10.65, 9.45);
yield return new Country("Slovenia", "EASTERN EUROPE", 2010347, 20273, 99.2, 0.23, 1.12, 4.45, 19000, 99.7, 406.1, 8.98, 10.31);
yield return new Country("Solomon Islands", "OCEANIA", 552438, 28450, 19.4, 18.67, 0, 21.29, 1700,null, 13.4, 30.01, 3.92);
yield return new Country("Somalia", "SUB-SAHARAN AFRICA", 8863338, 637657, 13.9, 0.47, 5.37, 116.7, 500, 37.8, 11.3, 45.13, 16.63);
yield return new Country("South Africa", "SUB-SAHARAN AFRICA", 44187637, 1219912, 36.2, 0.23, -0.29, 61.81, 10700, 86.4, 107, 18.2, 22);
yield return new Country("Spain", "WESTERN EUROPE", 40397842, 504782, 80, 0.98, 0.99, 4.42, 22000, 97.9, 453.5, 10.06, 9.72);
yield return new Country("Sri Lanka", "ASIA (EX. NEAR EAST)", 20222240, 65610, 308.2, 2.04, -1.31, 14.35, 3700, 92.3, 61.5, 15.51, 6.52);
yield return new Country("Sudan", "SUB-SAHARAN AFRICA", 41236378, 2505810, 16.5, 0.03, -0.02, 62.5, 1900, 61.1, 16.3, 34.53, 8.97);
yield return new Country("Suriname", "LATIN AMER. & CARIB", 439117, 163270, 2.7, 0.24, -8.81, 23.57, 4000, 93, 184.7, 18.02, 7.27);
yield return new Country("Swaziland", "SUB-SAHARAN AFRICA", 1136334, 17363, 65.5, 0, 0, 69.27, 4900, 81.6, 30.8, 27.41, 29.74);
yield return new Country("Sweden", "WESTERN EUROPE", 9016596, 449964, 20, 0.72, 1.67, 2.77, 26800, 99, 715, 10.27, 10.31);
yield return new Country("Switzerland", "WESTERN EUROPE", 7523934, 41290, 182.2, 0, 4.05, 4.39, 32700, 99, 680.9, 9.71, 8.49);
yield return new Country("Syria", "NEAR EAST", 18881361, 185180, 102, 0.1, 0, 29.53, 3300, 76.9, 153.8, 27.76, 4.81);
yield return new Country("Taiwan", "ASIA (EX. NEAR EAST)", 23036087, 35980, 640.3, 4.35, 0, 6.4, 23400, 96.1, 591, 12.56, 6.48);
yield return new Country("Tajikistan", "C.W. OF IND. STATES", 7320815, 143100, 51.2, 0, -2.86, 110.76, 1000, 99.4, 33.5, 32.65, 8.25);
yield return new Country("Tanzania", "SUB-SAHARAN AFRICA", 37445392, 945087, 39.6, 0.15, -2.06, 98.54, 600, 78.2, 4, 37.71, 16.39);
yield return new Country("Thailand", "ASIA (EX. NEAR EAST)", 64631595, 514000, 125.7, 0.63, 0, 20.48, 7400, 92.6, 108.9, 13.87, 7.04);
yield return new Country("Togo", "SUB-SAHARAN AFRICA", 5548702, 56785, 97.7, 0.1, 0, 66.61, 1500, 60.9, 10.6, 37.01, 9.83);
yield return new Country("Tonga", "OCEANIA", 114689, 748, 153.3, 56.02, 0, 12.62, 2200, 98.5, 97.7, 25.37, 5.28);
yield return new Country("Trinidad & Tobago", "LATIN AMER. & CARIB", 1065842, 5128, 207.9, 7.06, -10.83, 24.31, 9500, 98.6, 303.5, 12.9, 10.57);
yield return new Country("Tunisia", "NORTHERN AFRICA", 10175014, 163610, 62.2, 0.7, -0.57, 24.77, 6900, 74.2, 123.6, 15.52, 5.13);
yield return new Country("Turkey", "NEAR EAST", 70413958, 780580, 90.2, 0.92, 0, 41.04, 6700, 86.5, 269.5, 16.62, 5.97);
yield return new Country("Turkmenistan", "C.W. OF IND. STATES", 5042920, 488100, 10.3, 0, -0.86, 73.08, 5800, 98, 74.6, 27.61, 8.6);
yield return new Country("Turks & Caicos Is", "LATIN AMER. & CARIB", 21152, 430, 49.2, 90.47, 11.68, 15.67, 9600, 98, 269.5, 21.84, 4.21);
yield return new Country("Tuvalu", "OCEANIA", 11810, 26, 454.2, 92.31, 0, 20.03, 1100,null, 59.3, 22.18, 7.11);
yield return new Country("Uganda", "SUB-SAHARAN AFRICA", 28195754, 236040, 119.5, 0, 0, 67.83, 1400, 69.9, 3.6, 47.35, 12.24);
yield return new Country("Ukraine", "C.W. OF IND. STATES", 46710816, 603700, 77.4, 0.46, -0.39, 20.34, 5400, 99.7, 259.9, 8.82, 14.39);
yield return new Country("United Arab Emirates", "NEAR EAST", 2602713, 82880, 31.4, 1.59, 1.03, 14.51, 23200, 77.9, 475.3, 18.96, 4.4);
yield return new Country("United Kingdom", "WESTERN EUROPE", 60609153, 244820, 247.6, 5.08, 2.19, 5.16, 27700, 99, 543.5, 10.71, 10.13);
yield return new Country("United States", "NORTHERN AMERICA", 298444215, 9631420, 31, 0.21, 3.41, 6.5, 37800, 97, 898, 14.14, 8.26);
yield return new Country("Uruguay", "LATIN AMER. & CARIB", 3431932, 176220, 19.5, 0.37, -0.32, 11.95, 12800, 98, 291.4, 13.91, 9.05);
yield return new Country("Uzbekistan", "C.W. OF IND. STATES", 27307134, 447400, 61, 0, -1.72, 71.1, 1700, 99.3, 62.9, 26.36, 7.84);
yield return new Country("Vanuatu", "OCEANIA", 208869, 12200, 17.1, 20.72, 0, 55.16, 2900, 53, 32.6, 22.72, 7.82);
yield return new Country("Venezuela", "LATIN AMER. & CARIB", 25730435, 912050, 28.2, 0.31, -0.04, 22.2, 4800, 93.4, 140.1, 18.71, 4.92);
yield return new Country("Vietnam", "ASIA (EX. NEAR EAST)", 84402966, 329560, 256.1, 1.05, -0.45, 25.95, 2500, 90.3, 187.7, 16.86, 6.22);
yield return new Country("Virgin Islands", "LATIN AMER. & CARIB", 108605, 1910, 56.9, 9.84, -8.94, 8.03, 17200,null, 652.8, 13.96, 6.43);
yield return new Country("Wallis and Futuna", "OCEANIA", 16025, 274, 58.5, 47.08,null,null, 3700, 50, 118.6,null,null);
yield return new Country("West Bank", "NEAR EAST", 2460492, 5860, 419.9, 0, 2.98, 19.62, 800,null, 145.2, 31.67, 3.92);
yield return new Country("Yemen", "NEAR EAST", 21456188, 527970, 40.6, 0.36, 0, 61.5, 800, 50.2, 37.2, 42.89, 8.3);
yield return new Country("Zambia", "SUB-SAHARAN AFRICA", 11502010, 752614, 15.3, 0, 0, 88.29, 800, 80.6, 8.2, 41, 19.93);
yield return new Country("Zimbabwe", "SUB-SAHARAN AFRICA", 12236805, 390580, 31.3, 0, 0, 67.69, 1900, 90.7, 26.8, 28.01, 21.84);
}
static IReadOnlyList<Country>? _all;
public static IReadOnlyList<Country> All
{
get
{
if(_all == null)
{
_all = GetCountries().ToList().AsReadOnly();
}
return _all;
}
}
}
public class Country
{
public string Name { get; private set; }
public string Region { get; private set; }
public int Population { get; private set; }
//Square Miles
public int Area { get; private set; }
//Per Square Mile
public double PopulationDensity { get; private set; }
//Coast / Area
public double CoastLine { get; private set; }
public double? NetMigration { get; private set; }
//per 1000 births
public double? InfantMortality { get; private set; }
public int GDP { get; private set; }
public double? LiteracyPercent { get; private set; }
//per 1000
public double? Phones { get; private set; }
public double? BirthRate { get; private set; }
public double? DeathRate { get; private set; }
public Country(string name, string region, int population, int area, double density, double coast, double? migration,
double? infantMorality, int gdp, double? literacy, double? phones, double? birth, double? death)
{
Name = name;
Region = region;
Population = population;
Area = area;
PopulationDensity = density;
CoastLine = coast;
NetMigration = migration;
InfantMortality = infantMorality;
GDP = gdp;
LiteracyPercent = literacy;
BirthRate = birth;
DeathRate = death;
DataContext = new DataGridDemoViewModel();
}
}
@@ -0,0 +1,83 @@
<UserControl
x:Class="Semi.Avalonia.Demo.Pages.DataValidationErrorsDemo"
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:system="clr-namespace:System;assembly=netstandard"
d:DesignHeight="450"
d:DesignWidth="800"
mc:Ignorable="d">
<ScrollViewer>
<StackPanel HorizontalAlignment="Left" Spacing="20">
<AutoCompleteBox Width="300">
<DataValidationErrors.Error>
<system:Exception />
</DataValidationErrors.Error>
</AutoCompleteBox>
<AutoCompleteBox Width="300" Classes="Large">
<DataValidationErrors.Error>
<system:Exception />
</DataValidationErrors.Error>
</AutoCompleteBox>
<AutoCompleteBox Width="300" Classes="Small">
<DataValidationErrors.Error>
<system:Exception />
</DataValidationErrors.Error>
</AutoCompleteBox>
<CalendarDatePicker Width="300">
<DataValidationErrors.Error>
<system:Exception />
</DataValidationErrors.Error>
</CalendarDatePicker>
<ComboBox Width="300">
<ComboBoxItem>AAA</ComboBoxItem>
<ComboBoxItem>BBB</ComboBoxItem>
<DataValidationErrors.Error>
<system:Exception />
</DataValidationErrors.Error>
</ComboBox>
<DatePicker Width="300">
<DataValidationErrors.Error>
<system:Exception />
</DataValidationErrors.Error>
</DatePicker>
<NumericUpDown Width="300">
<DataValidationErrors.Error>
<system:Exception />
</DataValidationErrors.Error>
</NumericUpDown>
<Slider Width="300">
<DataValidationErrors.Error>
<system:Exception />
</DataValidationErrors.Error>
</Slider>
<TimePicker Width="300">
<DataValidationErrors.Error>
<system:Exception />
</DataValidationErrors.Error>
</TimePicker>
<TextBox
Width="300"
InnerLeftContent="http://"
InnerRightContent=".com">
<DataValidationErrors.Error>
<system:Exception />
</DataValidationErrors.Error>
</TextBox>
<TextBox
Width="300"
InnerLeftContent="http://"
InnerRightContent=".com">
<TextBox.Styles>
<Style Selector="TextBox /template/ DataValidationErrors">
<Setter Property="Theme" Value="{DynamicResource TooltipDataValidationErrors}" />
</Style>
</TextBox.Styles>
<DataValidationErrors.Error>
<system:Exception />
</DataValidationErrors.Error>
</TextBox>
</StackPanel>
</ScrollViewer>
</UserControl>
@@ -0,0 +1,18 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
namespace Semi.Avalonia.Demo.Pages;
public partial class DataValidationErrorsDemo : UserControl
{
public DataValidationErrorsDemo()
{
InitializeComponent();
}
private void InitializeComponent()
{
AvaloniaXamlLoader.Load(this);
}
}
@@ -9,9 +9,21 @@
mc:Ignorable="d">
<StackPanel Spacing="20">
<DatePicker />
<DatePicker Classes="ClearButton" />
<DatePicker DayFormat="d (ddd)" YearVisible="False" />
<DatePicker IsEnabled="False" />
<DatePicker Classes="Large" />
<DatePicker Classes="Small" />
<StackPanel Orientation="Horizontal">
<DatePicker Classes="Large" />
<DatePicker />
<DatePicker Classes="Small" />
</StackPanel>
<StackPanel Orientation="Horizontal">
<DatePicker IsEnabled="False" />
<DatePicker Classes="Bordered" />
<DatePicker Classes="Bordered" IsEnabled="False" />
</StackPanel>
</StackPanel>
</UserControl>
@@ -19,7 +19,7 @@
<Button Content="Hello Avalonia World!" />
</Expander>
</StackPanel>
<Grid ColumnDefinitions="* *">
<Grid ColumnDefinitions="*, *">
<Expander
Height="200"
ExpandDirection="Right"
+42 -3
View File
@@ -10,13 +10,14 @@
<UserControl.Styles>
<Style Selector="Button">
<Setter Property="Margin" Value="8" />
<Setter Property="HorizontalAlignment" Value="Stretch" />
</Style>
</UserControl.Styles>
<Grid
HorizontalAlignment="Center"
VerticalAlignment="Center"
ColumnDefinitions="* * * * *"
RowDefinitions="* * * * *">
ColumnDefinitions="*, *, *, *, *"
RowDefinitions="*, *, *, *, *, *">
<Button
Grid.Row="0"
Grid.Column="1"
@@ -113,6 +114,44 @@
<Flyout Content="BottomEdgeAlignedRight" Placement="BottomEdgeAlignedRight" />
</Button.Flyout>
</Button>
<Button
Grid.Row="2"
Grid.Column="2"
Content="Center">
<Button.Flyout>
<Flyout Content="Center" Placement="Center" />
</Button.Flyout>
</Button>
<Button
Grid.Row="5"
Grid.Column="2" Content="LightFlyout">
<Button.Flyout>
<Flyout FlyoutPresenterTheme="{StaticResource LightFlyout}" Placement="Top">
<StackPanel>
<Label Classes="Red" Theme="{StaticResource TagLabel}">Red</Label>
<Label Classes="Pink" Theme="{StaticResource TagLabel}">Pink</Label>
<Label Classes="Purple" Theme="{StaticResource TagLabel}">Purple</Label>
<Label Classes="Violet" Theme="{StaticResource TagLabel}">Violet</Label>
<Label Classes="Indigo" Theme="{StaticResource TagLabel}">Indigo</Label>
<Label Classes="Blue" Theme="{StaticResource TagLabel}">Blue</Label>
<Label Classes="LightBlue" Theme="{StaticResource TagLabel}">LightBlue</Label>
<Label Classes="Cyan" Theme="{StaticResource TagLabel}">Cyan</Label>
<Label Classes="Teal" Theme="{StaticResource TagLabel}">Teal</Label>
<Label Classes="Green" Theme="{StaticResource TagLabel}">Green</Label>
<Label Classes="LightGreen" Theme="{StaticResource TagLabel}">LightGreen</Label>
<Label Classes="Lime" Theme="{StaticResource TagLabel}">Lime</Label>
<Label Classes="Yellow" Theme="{StaticResource TagLabel}">Yellow</Label>
<Label Classes="Amber" Theme="{StaticResource TagLabel}">Amber</Label>
<Label Classes="Orange" Theme="{StaticResource TagLabel}">Orange</Label>
<Label Classes="Grey" Theme="{StaticResource TagLabel}">Grey</Label>
<Label Classes="White" Theme="{StaticResource TagLabel}">White</Label>
</StackPanel>
</Flyout>
</Button.Flyout>
</Button>
</Grid>
</UserControl>
</UserControl>
@@ -0,0 +1,39 @@
<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"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:Class="Semi.Avalonia.Demo.Pages.HeaderedContentControlDemo">
<ScrollViewer>
<StackPanel HorizontalAlignment="Left" Spacing="20">
<TextBlock>Default Theme</TextBlock>
<WrapPanel ItemWidth="400">
<HeaderedContentControl
Header="This is the text header!"
BorderBrush="Gray"
BorderThickness="1"
CornerRadius="4">
<TextBlock Text="Some content" />
</HeaderedContentControl>
<HeaderedContentControl Header="This is the image header!">
<Image Source="/Assets/WORLD.png" />
</HeaderedContentControl>
<HeaderedContentControl>
<HeaderedContentControl.Header>
<Image Source="/Assets/WORLD.png" />
</HeaderedContentControl.Header>
<TextBlock Text="This is the content. But the header can also be non textual" />
</HeaderedContentControl>
</WrapPanel>
<TextBlock>GroupBox Theme</TextBlock>
<HeaderedContentControl
HorizontalAlignment="Left"
Theme="{DynamicResource GroupBox}"
Header="Semi Design"
Width="400"
Height="200">
<TextBlock TextWrapping="Wrap">Semi Design 是由互娱社区前端团队与 UED 团队共同设计开发并维护的设计系统。设计系统包含设计语言以及一整套可复用的前端组件,帮助设计师与开发者更容易地打造高质量的、用户体验一致的、符合设计规范的 Web 应用。</TextBlock>
</HeaderedContentControl>
</StackPanel>
</ScrollViewer>
</UserControl>
@@ -0,0 +1,11 @@
using Avalonia.Controls;
namespace Semi.Avalonia.Demo.Pages;
public partial class HeaderedContentControlDemo : UserControl
{
public HeaderedContentControlDemo()
{
InitializeComponent();
}
}
@@ -0,0 +1,43 @@
<UserControl
d:DesignHeight="450"
d:DesignWidth="800"
mc:Ignorable="d"
x:Class="Semi.Avalonia.Demo.Pages.HyperlinkButtonDemo"
xmlns="https://github.com/avaloniaui"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<StackPanel HorizontalAlignment="Left" Spacing="20">
<StackPanel Orientation="Horizontal">
<HyperlinkButton Height="20" NavigateUri="http://www.irihi.tech/">
<TextBlock
HorizontalAlignment="Center"
Text="iRihi Homepage"
TextDecorations="Underline"
VerticalAlignment="Center" />
</HyperlinkButton>
</StackPanel>
<StackPanel Orientation="Horizontal">
<HyperlinkButton Height="20" IsEnabled="False">
<TextBlock
HorizontalAlignment="Center"
Text="Not Enabled"
TextDecorations="Underline"
VerticalAlignment="Center" />
</HyperlinkButton>
</StackPanel>
<StackPanel Orientation="Horizontal">
<HyperlinkButton
BorderThickness="1"
Classes="WithIcon"
Height="20"
NavigateUri="http://www.irihi.tech/">
<TextBlock
HorizontalAlignment="Center"
Text="Link with Icon"
TextDecorations="Underline"
VerticalAlignment="Center" />
</HyperlinkButton>
</StackPanel>
</StackPanel>
</UserControl>
@@ -0,0 +1,14 @@
using System;
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
namespace Semi.Avalonia.Demo.Pages;
public partial class HyperlinkButtonDemo : UserControl
{
public HyperlinkButtonDemo()
{
InitializeComponent();
}
}
+216 -73
View File
@@ -7,77 +7,220 @@
d:DesignHeight="450"
d:DesignWidth="800"
mc:Ignorable="d">
<StackPanel
Width="500"
HorizontalAlignment="Left"
Spacing="20">
<StackPanel.Styles>
<Style Selector="Label">
<Setter Property="Margin" Value="4" />
</Style>
</StackPanel.Styles>
<WrapPanel>
<Label Theme="{StaticResource TagLabel}">Label</Label>
<Label Classes="Large" Theme="{StaticResource TagLabel}">Large Label</Label>
<Label Classes="Circle" Theme="{StaticResource TagLabel}">Circle Label</Label>
<Label Classes="Large Circle" Theme="{StaticResource TagLabel}">Large Circle Label</Label>
</WrapPanel>
<WrapPanel>
<Label Classes="Amber" Theme="{StaticResource TagLabel}">Amber</Label>
<Label Classes="Blue" Theme="{StaticResource TagLabel}">Blue</Label>
<Label Classes="Cyan" Theme="{StaticResource TagLabel}">Cyan</Label>
<Label Classes="Green" Theme="{StaticResource TagLabel}">Green</Label>
<Label Classes="Grey" Theme="{StaticResource TagLabel}">Grey</Label>
<Label Classes="Indigo" Theme="{StaticResource TagLabel}">Indigo</Label>
<Label Classes="LightBlue" Theme="{StaticResource TagLabel}">LightBlue</Label>
<Label Classes="LightGreen" Theme="{StaticResource TagLabel}">LightGreen</Label>
<Label Classes="Lime" Theme="{StaticResource TagLabel}">Lime</Label>
<Label Classes="Orange" Theme="{StaticResource TagLabel}">Orange</Label>
<Label Classes="Pink" Theme="{StaticResource TagLabel}">Pink</Label>
<Label Classes="Purple" Theme="{StaticResource TagLabel}">Purple</Label>
<Label Classes="Red" Theme="{StaticResource TagLabel}">Red</Label>
<Label Classes="Teal" Theme="{StaticResource TagLabel}">Teal</Label>
<Label Classes="Violet" Theme="{StaticResource TagLabel}">Violet</Label>
<Label Classes="Yellow" Theme="{StaticResource TagLabel}">Yellow</Label>
<Label Classes="White" Theme="{StaticResource TagLabel}">White</Label>
</WrapPanel>
<WrapPanel>
<Label Classes="Ghost Amber" Theme="{StaticResource TagLabel}">Amber</Label>
<Label Classes="Ghost Blue" Theme="{StaticResource TagLabel}">Blue</Label>
<Label Classes="Ghost Cyan" Theme="{StaticResource TagLabel}">Cyan</Label>
<Label Classes="Ghost Green" Theme="{StaticResource TagLabel}">Green</Label>
<Label Classes="Ghost Grey" Theme="{StaticResource TagLabel}">Grey</Label>
<Label Classes="Ghost Indigo" Theme="{StaticResource TagLabel}">Indigo</Label>
<Label Classes="Ghost LightBlue" Theme="{StaticResource TagLabel}">LightBlue</Label>
<Label Classes="Ghost LightGreen" Theme="{StaticResource TagLabel}">LightGreen</Label>
<Label Classes="Ghost Lime" Theme="{StaticResource TagLabel}">Lime</Label>
<Label Classes="Ghost Orange" Theme="{StaticResource TagLabel}">Orange</Label>
<Label Classes="Ghost Pink" Theme="{StaticResource TagLabel}">Pink</Label>
<Label Classes="Ghost Purple" Theme="{StaticResource TagLabel}">Purple</Label>
<Label Classes="Ghost Red" Theme="{StaticResource TagLabel}">Red</Label>
<Label Classes="Ghost Teal" Theme="{StaticResource TagLabel}">Teal</Label>
<Label Classes="Ghost Violet" Theme="{StaticResource TagLabel}">Violet</Label>
<Label Classes="Ghost Yellow" Theme="{StaticResource TagLabel}">Yellow</Label>
<Label Classes="Ghost White" Theme="{StaticResource TagLabel}">White</Label>
</WrapPanel>
<WrapPanel>
<Label Classes="Solid Amber" Theme="{StaticResource TagLabel}">Amber</Label>
<Label Classes="Solid Blue" Theme="{StaticResource TagLabel}">Blue</Label>
<Label Classes="Solid Cyan" Theme="{StaticResource TagLabel}">Cyan</Label>
<Label Classes="Solid Green" Theme="{StaticResource TagLabel}">Green</Label>
<Label Classes="Solid Grey" Theme="{StaticResource TagLabel}">Grey</Label>
<Label Classes="Solid Indigo" Theme="{StaticResource TagLabel}">Indigo</Label>
<Label Classes="Solid LightBlue" Theme="{StaticResource TagLabel}">LightBlue</Label>
<Label Classes="Solid LightGreen" Theme="{StaticResource TagLabel}">LightGreen</Label>
<Label Classes="Solid Lime" Theme="{StaticResource TagLabel}">Lime</Label>
<Label Classes="Solid Orange" Theme="{StaticResource TagLabel}">Orange</Label>
<Label Classes="Solid Pink" Theme="{StaticResource TagLabel}">Pink</Label>
<Label Classes="Solid Purple" Theme="{StaticResource TagLabel}">Purple</Label>
<Label Classes="Solid Red" Theme="{StaticResource TagLabel}">Red</Label>
<Label Classes="Solid Teal" Theme="{StaticResource TagLabel}">Teal</Label>
<Label Classes="Solid Violet" Theme="{StaticResource TagLabel}">Violet</Label>
<Label Classes="Solid Yellow" Theme="{StaticResource TagLabel}">Yellow</Label>
<Label Classes="Solid White" Theme="{StaticResource TagLabel}">White</Label>
</WrapPanel>
</StackPanel>
<ScrollViewer>
<StackPanel HorizontalAlignment="Left" Spacing="20">
<StackPanel.Styles>
<Style Selector="Label">
<Setter Property="Margin" Value="4" />
</Style>
</StackPanel.Styles>
<ScrollViewer HorizontalScrollBarVisibility="Auto">
<StackPanel Orientation="Horizontal">
<StackPanel.Styles>
<Style Selector="Label, TextBlock">
<Setter Property="VerticalAlignment" Value="Center" />
<Setter Property="Margin" Value="4" />
</Style>
</StackPanel.Styles>
<HeaderedContentControl
Width="400"
Height="400"
Margin="16"
VerticalAlignment="Top"
Header="Default Theme"
Theme="{DynamicResource GroupBox}">
<Grid
VerticalAlignment="Top"
ColumnDefinitions="Auto, *"
RowDefinitions="*,*,*,*,*,*,*,*,*,*,*,*">
<TextBlock Grid.Row="1" Grid.Column="0">Classes</TextBlock>
<TextBlock Grid.Row="2" Grid.Column="0">-</TextBlock>
<TextBlock Grid.Row="3" Grid.Column="0">Secondary</TextBlock>
<TextBlock Grid.Row="4" Grid.Column="0">Tertiary</TextBlock>
<TextBlock Grid.Row="5" Grid.Column="0">Quaternary</TextBlock>
<TextBlock Grid.Row="6" Grid.Column="0">Success</TextBlock>
<TextBlock Grid.Row="7" Grid.Column="0">Warning</TextBlock>
<TextBlock Grid.Row="8" Grid.Column="0">Danger</TextBlock>
<TextBlock Grid.Row="9" Grid.Column="0">Mark</TextBlock>
<TextBlock Grid.Row="10" Grid.Column="0">Code</TextBlock>
<Label Grid.Row="2" Grid.Column="1">Text</Label>
<Label
Grid.Row="3"
Grid.Column="1"
Classes="Secondary">
Secondary
</Label>
<Label
Grid.Row="4"
Grid.Column="1"
Classes="Tertiary">
Tertiary
</Label>
<Label
Grid.Row="5"
Grid.Column="1"
Classes="Quaternary">
Quaternary
</Label>
<Label
Grid.Row="6"
Grid.Column="1"
Classes="Success">
Success
</Label>
<Label
Grid.Row="7"
Grid.Column="1"
Classes="Warning">
Warning
</Label>
<Label
Grid.Row="8"
Grid.Column="1"
Classes="Danger">
Danger
</Label>
<Label
Grid.Row="9"
Grid.Column="1"
Classes="Mark">
Default Mark
</Label>
<Label
Grid.Row="10"
Grid.Column="1"
Classes="Code">
Code
</Label>
</Grid>
</HeaderedContentControl>
<HeaderedContentControl
Width="400"
Height="400"
Margin="16"
VerticalAlignment="Top"
Header="Theme: TitleLabel"
Theme="{DynamicResource GroupBox}">
<Grid
VerticalAlignment="Top"
ColumnDefinitions="Auto, *"
RowDefinitions="*,*,*,*,*,*,*,*">
<TextBlock Grid.Row="1" Grid.Column="0">Classes</TextBlock>
<TextBlock Grid.Row="2" Grid.Column="0">H1</TextBlock>
<TextBlock Grid.Row="3" Grid.Column="0">H2</TextBlock>
<TextBlock Grid.Row="4" Grid.Column="0">H3</TextBlock>
<TextBlock Grid.Row="5" Grid.Column="0">H4</TextBlock>
<TextBlock Grid.Row="6" Grid.Column="0">H5</TextBlock>
<TextBlock Grid.Row="7" Grid.Column="0">H6</TextBlock>
<Label
Grid.Row="2"
Grid.Column="1"
Classes="H1"
Theme="{StaticResource TitleLabel}">
Header 1
</Label>
<Label
Grid.Row="3"
Grid.Column="1"
Classes="H2"
Theme="{StaticResource TitleLabel}">
Header 2
</Label>
<Label
Grid.Row="4"
Grid.Column="1"
Classes="H3"
Theme="{StaticResource TitleLabel}">
Header 3
</Label>
<Label
Grid.Row="5"
Grid.Column="1"
Classes="H4"
Theme="{StaticResource TitleLabel}">
Header 4
</Label>
<Label
Grid.Row="6"
Grid.Column="1"
Classes="H5"
Theme="{StaticResource TitleLabel}">
Header 5
</Label>
<Label
Grid.Row="7"
Grid.Column="1"
Classes="H6"
Theme="{StaticResource TitleLabel}">
Header 6
</Label>
</Grid>
</HeaderedContentControl>
</StackPanel>
</ScrollViewer>
<WrapPanel>
<Label Theme="{StaticResource TagLabel}">Label</Label>
<Label Classes="Large" Theme="{StaticResource TagLabel}">Large Label</Label>
<Label Classes="Circle" Theme="{StaticResource TagLabel}">Circle Label</Label>
<Label Classes="Large Circle" Theme="{StaticResource TagLabel}">Large Circle Label</Label>
</WrapPanel>
<WrapPanel>
<Label Classes="Red" Theme="{StaticResource TagLabel}">Red</Label>
<Label Classes="Pink" Theme="{StaticResource TagLabel}">Pink</Label>
<Label Classes="Purple" Theme="{StaticResource TagLabel}">Purple</Label>
<Label Classes="Violet" Theme="{StaticResource TagLabel}">Violet</Label>
<Label Classes="Indigo" Theme="{StaticResource TagLabel}">Indigo</Label>
<Label Classes="Blue" Theme="{StaticResource TagLabel}">Blue</Label>
<Label Classes="LightBlue" Theme="{StaticResource TagLabel}">LightBlue</Label>
<Label Classes="Cyan" Theme="{StaticResource TagLabel}">Cyan</Label>
<Label Classes="Teal" Theme="{StaticResource TagLabel}">Teal</Label>
<Label Classes="Green" Theme="{StaticResource TagLabel}">Green</Label>
<Label Classes="LightGreen" Theme="{StaticResource TagLabel}">LightGreen</Label>
<Label Classes="Lime" Theme="{StaticResource TagLabel}">Lime</Label>
<Label Classes="Yellow" Theme="{StaticResource TagLabel}">Yellow</Label>
<Label Classes="Amber" Theme="{StaticResource TagLabel}">Amber</Label>
<Label Classes="Orange" Theme="{StaticResource TagLabel}">Orange</Label>
<Label Classes="Grey" Theme="{StaticResource TagLabel}">Grey</Label>
<Label Classes="White" Theme="{StaticResource TagLabel}">White</Label>
</WrapPanel>
<WrapPanel>
<Label Classes="Ghost Red" Theme="{StaticResource TagLabel}">Red</Label>
<Label Classes="Ghost Pink" Theme="{StaticResource TagLabel}">Pink</Label>
<Label Classes="Ghost Purple" Theme="{StaticResource TagLabel}">Purple</Label>
<Label Classes="Ghost Violet" Theme="{StaticResource TagLabel}">Violet</Label>
<Label Classes="Ghost Indigo" Theme="{StaticResource TagLabel}">Indigo</Label>
<Label Classes="Ghost Blue" Theme="{StaticResource TagLabel}">Blue</Label>
<Label Classes="Ghost LightBlue" Theme="{StaticResource TagLabel}">LightBlue</Label>
<Label Classes="Ghost Cyan" Theme="{StaticResource TagLabel}">Cyan</Label>
<Label Classes="Ghost Teal" Theme="{StaticResource TagLabel}">Teal</Label>
<Label Classes="Ghost Green" Theme="{StaticResource TagLabel}">Green</Label>
<Label Classes="Ghost LightGreen" Theme="{StaticResource TagLabel}">LightGreen</Label>
<Label Classes="Ghost Lime" Theme="{StaticResource TagLabel}">Lime</Label>
<Label Classes="Ghost Yellow" Theme="{StaticResource TagLabel}">Yellow</Label>
<Label Classes="Ghost Amber" Theme="{StaticResource TagLabel}">Amber</Label>
<Label Classes="Ghost Orange" Theme="{StaticResource TagLabel}">Orange</Label>
<Label Classes="Ghost Grey" Theme="{StaticResource TagLabel}">Grey</Label>
<Label Classes="Ghost White" Theme="{StaticResource TagLabel}">White</Label>
</WrapPanel>
<WrapPanel>
<Label Classes="Solid Red" Theme="{StaticResource TagLabel}">Red</Label>
<Label Classes="Solid Pink" Theme="{StaticResource TagLabel}">Pink</Label>
<Label Classes="Solid Purple" Theme="{StaticResource TagLabel}">Purple</Label>
<Label Classes="Solid Violet" Theme="{StaticResource TagLabel}">Violet</Label>
<Label Classes="Solid Indigo" Theme="{StaticResource TagLabel}">Indigo</Label>
<Label Classes="Solid Blue" Theme="{StaticResource TagLabel}">Blue</Label>
<Label Classes="Solid LightBlue" Theme="{StaticResource TagLabel}">LightBlue</Label>
<Label Classes="Solid Cyan" Theme="{StaticResource TagLabel}">Cyan</Label>
<Label Classes="Solid Teal" Theme="{StaticResource TagLabel}">Teal</Label>
<Label Classes="Solid Green" Theme="{StaticResource TagLabel}">Green</Label>
<Label Classes="Solid LightGreen" Theme="{StaticResource TagLabel}">LightGreen</Label>
<Label Classes="Solid Lime" Theme="{StaticResource TagLabel}">Lime</Label>
<Label Classes="Solid Yellow" Theme="{StaticResource TagLabel}">Yellow</Label>
<Label Classes="Solid Amber" Theme="{StaticResource TagLabel}">Amber</Label>
<Label Classes="Solid Orange" Theme="{StaticResource TagLabel}">Orange</Label>
<Label Classes="Solid Grey" Theme="{StaticResource TagLabel}">Grey</Label>
<Label Classes="Solid White" Theme="{StaticResource TagLabel}">White</Label>
</WrapPanel>
</StackPanel>
</ScrollViewer>
</UserControl>
+140 -17
View File
@@ -4,22 +4,145 @@
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"
d:DesignHeight="450"
xmlns:local="clr-namespace:Semi.Avalonia.Demo.Pages"
d:DesignHeight="900"
d:DesignWidth="800"
mc:Ignorable="d">
<ListBox>
<ListBoxItem>Item 1</ListBoxItem>
<ListBoxItem>Item 2</ListBoxItem>
<ListBoxItem IsEnabled="False">Item 3</ListBoxItem>
<ListBoxItem>Item 4</ListBoxItem>
<ListBoxItem>Item 5</ListBoxItem>
<ListBoxItem>Item 6</ListBoxItem>
<ListBoxItem>Item 7</ListBoxItem>
<ListBoxItem IsEnabled="False">Item 8</ListBoxItem>
<ListBoxItem>Item 9</ListBoxItem>
<ListBoxItem>Item 10</ListBoxItem>
<ListBoxItem>Item 11</ListBoxItem>
<ListBoxItem>Item 12</ListBoxItem>
<ListBoxItem>Item 13</ListBoxItem>
</ListBox>
</UserControl>
<ScrollViewer>
<Grid ColumnDefinitions="*,*,*">
<HeaderedContentControl
Grid.Column="0"
Theme="{StaticResource GroupBox}"
Header="Default">
<ScrollViewer>
<StackPanel Spacing="20">
<TextBlock Text="Theme: Default"/>
<ListBox ItemsSource="{Binding $parent[local:ListBoxDemo].Items}" />
<ListBox IsEnabled="False">
<ListBoxItem IsSelected="True">Avalonia</ListBoxItem>
<ListBoxItem>WPF</ListBoxItem>
</ListBox>
</StackPanel>
</ScrollViewer>
</HeaderedContentControl>
<HeaderedContentControl
Grid.Column="1"
Theme="{DynamicResource GroupBox}"
Header="RadioGroupListBox">
<StackPanel Spacing="20">
<TextBlock Text="Theme: RadioGroupListBox"/>
<ListBox
Theme="{DynamicResource RadioGroupListBox}"
ItemsSource="{Binding $parent[local:ListBoxDemo].Items}" />
<ListBox Theme="{DynamicResource RadioGroupListBox}" IsEnabled="False">
<ListBoxItem>Avalonia</ListBoxItem>
<ListBoxItem IsSelected="True">WPF</ListBoxItem>
</ListBox>
<TextBlock Text="Theme: ButtonRadioGroupListBox"/>
<StackPanel Orientation="Horizontal">
<Border HorizontalAlignment="Left" Theme="{StaticResource RadioButtonGroupBorder}">
<ListBox Theme="{DynamicResource ButtonRadioGroupListBox}">
<ListBoxItem Classes="Small" IsSelected="True">Small 1</ListBoxItem>
<ListBoxItem Classes="Small">Small 2</ListBoxItem>
</ListBox>
</Border>
<Border
Margin="8,0"
HorizontalAlignment="Left"
Theme="{StaticResource RadioButtonGroupBorder}">
<ListBox Theme="{DynamicResource ButtonRadioGroupListBox}" IsEnabled="False">
<ListBoxItem Classes="Small" IsSelected="True">Small 1</ListBoxItem>
<ListBoxItem Classes="Small">Small 2</ListBoxItem>
</ListBox>
</Border>
</StackPanel>
<StackPanel Orientation="Horizontal">
<Border HorizontalAlignment="Left" Theme="{StaticResource RadioButtonGroupBorder}">
<ListBox Theme="{DynamicResource ButtonRadioGroupListBox}">
<ListBoxItem IsSelected="True">Default 1</ListBoxItem>
<ListBoxItem>Default 2</ListBoxItem>
</ListBox>
</Border>
<Border
Margin="8,0"
HorizontalAlignment="Left"
Theme="{StaticResource RadioButtonGroupBorder}">
<ListBox Theme="{DynamicResource ButtonRadioGroupListBox}" IsEnabled="False">
<ListBoxItem IsSelected="True">Default 1</ListBoxItem>
<ListBoxItem>Default 2</ListBoxItem>
</ListBox>
</Border>
</StackPanel>
<StackPanel Orientation="Horizontal">
<Border HorizontalAlignment="Left" Theme="{StaticResource RadioButtonGroupBorder}">
<ListBox Theme="{DynamicResource ButtonRadioGroupListBox}">
<ListBoxItem Classes="Large" IsSelected="True">Small 1</ListBoxItem>
<ListBoxItem Classes="Large">Small 2</ListBoxItem>
</ListBox>
</Border>
<Border
Margin="8,0"
HorizontalAlignment="Left"
Theme="{StaticResource RadioButtonGroupBorder}">
<ListBox Theme="{DynamicResource ButtonRadioGroupListBox}" IsEnabled="False">
<ListBoxItem Classes="Large" IsSelected="True">Small 1</ListBoxItem>
<ListBoxItem Classes="Large">Small 2</ListBoxItem>
</ListBox>
</Border>
</StackPanel>
<TextBlock Text="Theme: CardRadioGroupListBox"/>
<ListBox Theme="{DynamicResource CardRadioGroupListBox}"
ItemsSource="{Binding $parent[local:ListBoxDemo].Items}" />
<ListBox Theme="{DynamicResource CardRadioGroupListBox}" IsEnabled="False">
<ListBoxItem IsSelected="True">Avalonia</ListBoxItem>
<ListBoxItem>WPF</ListBoxItem>
</ListBox>
<TextBlock Text="Theme: PureCardRadioGroupListBox"/>
<ListBox Theme="{DynamicResource PureCardRadioGroupListBox}"
ItemsSource="{Binding $parent[local:ListBoxDemo].Items}" />
<ListBox Theme="{DynamicResource PureCardRadioGroupListBox}" IsEnabled="False">
<ListBoxItem>Avalonia</ListBoxItem>
<ListBoxItem IsSelected="True">WPF</ListBoxItem>
</ListBox>
</StackPanel>
</HeaderedContentControl>
<HeaderedContentControl
Grid.Column="2"
Theme="{DynamicResource GroupBox}"
Header="CheckGroupListBox">
<ScrollViewer>
<StackPanel Spacing="20">
<TextBlock Text="Theme: CheckGroupListBox"/>
<ListBox
SelectionMode="Multiple"
Theme="{DynamicResource CheckGroupListBox}"
ItemsSource="{Binding $parent[local:ListBoxDemo].Items}" />
<ListBox Theme="{DynamicResource CheckGroupListBox}"
SelectionMode="Multiple"
IsEnabled="False">
<ListBoxItem IsSelected="True">Avalonia</ListBoxItem>
<ListBoxItem>WPF</ListBoxItem>
</ListBox>
<TextBlock Text="Theme: CardCheckGroupListBox"/>
<ListBox
SelectionMode="Multiple"
Theme="{DynamicResource CardCheckGroupListBox}"
ItemsSource="{Binding $parent[local:ListBoxDemo].Items}" />
<ListBox Theme="{DynamicResource CardCheckGroupListBox}"
SelectionMode="Multiple"
IsEnabled="False">
<ListBoxItem>Avalonia</ListBoxItem>
<ListBoxItem IsSelected="True">WPF</ListBoxItem>
</ListBox>
</StackPanel>
</ScrollViewer>
</HeaderedContentControl>
</Grid>
</ScrollViewer>
</UserControl>
@@ -1,6 +1,6 @@
using Avalonia;
using System.Collections;
using System.Collections.Generic;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
namespace Semi.Avalonia.Demo.Pages;
@@ -10,4 +10,6 @@ public partial class ListBoxDemo : UserControl
{
InitializeComponent();
}
public IEnumerable Items { get; set; } = new List<string> { "Ding", "Otter", "Husky", "Mr.17", "Cass", };
}
@@ -8,6 +8,11 @@
d:DesignWidth="800"
mc:Ignorable="d">
<StackPanel HorizontalAlignment="Left" Spacing="10">
<StackPanel.Styles>
<Style Selector="Button">
<Setter Property="HorizontalAlignment" Value="Stretch" />
</Style>
</StackPanel.Styles>
<Button Name="openFileDialog">Open File</Button>
<Button Name="selectFolderDialog">Select Folder</Button>
<Button Name="saveFileDialog">Save File</Button>
+21 -3
View File
@@ -25,14 +25,30 @@
<MenuItem Header="Submenu Level 2" />
</MenuItem>
</MenuItem>
<MenuItem Header="Menu Item with _Checkbox">
<MenuItem Header="Menu Item with _Icon">
<MenuItem.Icon>
<TextBlock>😊</TextBlock>
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="Menu Item with _Checkbox" ToggleType="CheckBox" />
</MenuItem>
<MenuItem Header="_Second">
<MenuItem Header="Second _Menu Item" />
<MenuItem IsChecked="True" Header="Second Menu toggle item" ToggleType="CheckBox" />
<Separator />
<MenuItem GroupName="A" Header="Radio 1 - group" ToggleType="Radio" />
<MenuItem IsChecked="True" GroupName="A" Header="Radio 2 - group" ToggleType="Radio" />
<MenuItem GroupName="A" Header="Radio 3 - group" ToggleType="Radio">
<MenuItem Header="Radio 4 - group" ToggleType="Radio" GroupName="A" />
<MenuItem Header="Radio 5 - group" ToggleType="Radio" GroupName="A" />
</MenuItem>
<Separator />
<MenuItem Header="Radio 1" ToggleType="Radio" />
<MenuItem IsChecked="True" Header="Radio 2" ToggleType="Radio" />
<MenuItem Header="Radio 3" ToggleType="Radio">
<MenuItem Header="Radio 4" ToggleType="Radio" />
<MenuItem Header="Radio 5" ToggleType="Radio" />
</MenuItem>
</MenuItem>
<MenuItem Header="Parent">
<MenuItem Header="Child 1" />
@@ -86,7 +102,7 @@
<MenuItem Header="Submenu _1" />
<MenuItem Header="Submenu _2" />
</MenuItem>
<MenuItem Header="Menu Item with _Checkbox">
<MenuItem Header="Menu Item with _Icon">
<MenuItem.Icon>
<CheckBox
Padding="0"
@@ -95,6 +111,7 @@
IsHitTestVisible="False" />
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="Menu Item with _Checkbox" ToggleType="CheckBox" />
<MenuItem Header="Menu Item that won't close on click" StaysOpenOnClick="True" />
</ContextMenu>
</Border.ContextMenu>
@@ -113,7 +130,7 @@
<MenuItem Header="Submenu _1" />
<MenuItem Header="Submenu _2" />
</MenuItem>
<MenuItem Header="Menu Item with _Checkbox">
<MenuItem Header="Menu Item with _Icon">
<MenuItem.Icon>
<CheckBox
Padding="0"
@@ -122,6 +139,7 @@
IsHitTestVisible="False" />
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="Menu Item with _Checkbox" ToggleType="CheckBox" />
</MenuFlyout>
</Border.ContextFlyout>
<TextBlock Text="Right Click to show Context Flyout" />
@@ -8,9 +8,17 @@
d:DesignWidth="800"
mc:Ignorable="d">
<StackPanel HorizontalAlignment="Left" Spacing="20">
<StackPanel.Styles>
<Style Selector="Button">
<Setter Property="Theme" Value="{DynamicResource SolidButton}" />
<Setter Property="HorizontalAlignment" Value="Stretch" />
</Style>
</StackPanel.Styles>
<Button Click="InfoButton_OnClick" Content="Default" />
<Button Click="InfoButton_OnClick" Content="Information" />
<Button Click="InfoButton_OnClick" Content="Success" />
<Button Click="InfoButton_OnClick" Content="Warning" />
<Button Click="InfoButton_OnClick" Content="Error" />
<Button Click="InfoButton_OnClick" Content="Success" Classes="Success" />
<Button Click="InfoButton_OnClick" Content="Warning" Classes="Warning" />
<Button Click="InfoButton_OnClick" Content="Error" Classes="Danger" />
</StackPanel>
</UserControl>
</UserControl>
@@ -2,17 +2,14 @@ using System;
using Avalonia;
using Avalonia.Controls;
using Avalonia.Controls.Notifications;
using Avalonia.Controls.Presenters;
using Avalonia.Interactivity;
using Avalonia.Markup.Xaml;
using Avalonia.VisualTree;
using Semi.Avalonia.Demo.Views;
namespace Semi.Avalonia.Demo.Pages;
public partial class NotificationDemo : UserControl
{
private WindowNotificationManager? _manager;
public NotificationDemo()
{
InitializeComponent();
@@ -22,14 +19,16 @@ public partial class NotificationDemo : UserControl
{
base.OnAttachedToVisualTree(e);
var topLevel = TopLevel.GetTopLevel(this);
_manager = new WindowNotificationManager(topLevel){ MaxItems = 3};
_manager = new WindowNotificationManager(topLevel) { MaxItems = 3 };
}
private void InfoButton_OnClick(object? sender, RoutedEventArgs e)
{
if (sender is Button b && b.Content is string s && Enum.TryParse<NotificationType>(s, out NotificationType t))
if (sender is Button b && b.Content is string s)
{
_manager?.Show(new Notification(t.ToString(), "This is message", t));
_manager?.Show(Enum.TryParse<NotificationType>(s, out NotificationType t)
? new Notification(t.ToString(), "This is message", t)
: new Notification(s, "This is message"));
}
}
}
@@ -4,28 +4,53 @@
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"
d:DesignHeight="450"
d:DesignHeight="800"
d:DesignWidth="800"
mc:Ignorable="d">
<StackPanel HorizontalAlignment="Left" Spacing="20">
<NumericUpDown
Width="200"
Maximum="100"
Minimum="0" />
<NumericUpDown
Width="200"
Increment="10"
Maximum="100"
Minimum="0" />
<NumericUpDown
Width="200"
ButtonSpinnerLocation="Left"
Maximum="100"
Minimum="0" />
<NumericUpDown
Width="200"
Maximum="100"
Minimum="0"
ShowButtonSpinner="False" />
<StackPanel.Styles>
<Style Selector="NumericUpDown">
<Setter Property="Width" Value="300" />
<Setter Property="Maximum" Value="100" />
<Setter Property="Minimum" Value="0" />
</Style>
</StackPanel.Styles>
<NumericUpDown />
<NumericUpDown Increment="10" />
<NumericUpDown ButtonSpinnerLocation="Left" />
<NumericUpDown ShowButtonSpinner="False" />
<NumericUpDown Classes="Large" />
<NumericUpDown Classes="Small" />
<NumericUpDown InnerLeftContent="Price" InnerRightContent="$" />
<StackPanel Orientation="Horizontal">
<NumericUpDown
Width="100"
Classes="Large"
Watermark="Large"
ButtonSpinnerLocation="Left" />
<NumericUpDown
Width="100"
Watermark="Default"
ShowButtonSpinner="False" />
<NumericUpDown
Width="100"
Watermark="Small"
Classes="Small" />
</StackPanel>
<StackPanel Orientation="Horizontal">
<NumericUpDown Width="100" ButtonSpinnerLocation="Left" />
<NumericUpDown Width="100" ShowButtonSpinner="False" />
<NumericUpDown Width="100" />
</StackPanel>
<StackPanel Orientation="Horizontal">
<NumericUpDown Width="100" ShowButtonSpinner="False" />
<NumericUpDown Width="100" IsEnabled="False" />
<NumericUpDown Width="100" ButtonSpinnerLocation="Left" />
</StackPanel>
</StackPanel>
</UserControl>
</UserControl>
+399 -143
View File
@@ -2,159 +2,415 @@
x:Class="Semi.Avalonia.Demo.Pages.Overview"
xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:converters="clr-namespace:Avalonia.Markup.Xaml.Converters;assembly=Avalonia.Markup.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"
d:DesignHeight="1000"
d:DesignWidth="800"
d:DesignWidth="1920"
mc:Ignorable="d">
<UserControl.Resources>
<ResourceDictionary>
<converters:ColorToBrushConverter x:Key="ColorToBrushConverter" />
</ResourceDictionary>
</UserControl.Resources>
<UserControl.Styles>
<Style Selector="Border.CodeBlock">
<Setter Property="BorderBrush" Value="{DynamicResource SemiColorBorder}" />
<Setter Property="Padding" Value="16" />
<Setter Property="CornerRadius" Value="6" />
<Setter Property="Background" Value="{DynamicResource SemiColorFill0}" />
</Style>
</UserControl.Styles>
<ScrollViewer HorizontalScrollBarVisibility="Auto">
<StackPanel Spacing="5">
<StackPanel Orientation="Horizontal" Spacing="20">
<Button Classes="Primary" Theme="{DynamicResource SolidButton}">Primary</Button>
<Button Classes="Secondary" Theme="{DynamicResource SolidButton}">Secondary</Button>
<Button Classes="Tertiary" Theme="{DynamicResource SolidButton}">Tertiary</Button>
<Button Classes="Warning" Theme="{DynamicResource SolidButton}">Warning</Button>
<Button Classes="Danger" Theme="{DynamicResource SolidButton}">Danger</Button>
<Button
Classes="Primary"
IsEnabled="False"
Theme="{DynamicResource SolidButton}">
Danger
</Button>
<StackPanel Margin="20">
<StackPanel
Margin="20"
HorizontalAlignment="Center"
Orientation="Horizontal">
<PathIcon
Width="32"
Height="32"
Data="M10.6201 17.5C6.06377 17.5 2.37012 13.8063 2.37012 9.25C2.37012 4.69365 6.06377 1 10.6201 1V17.5ZM13.3701 6.5C17.9265 6.5 21.6201 10.1936 21.6201 14.75C21.6201 19.3063 17.9265 23 13.3701 23V6.5Z" />
<PathIcon
Width="10"
Height="10"
Margin="20,0"
Data="M20.5 13.5C21.3284 13.5 22 12.8284 22 12C22 11.1716 21.3284 10.5 20.5 10.5L13.5 10.5L13.5 3.5C13.5 2.67157 12.8284 2 12 2C11.1716 2 10.5 2.67157 10.5 3.5L10.5 10.5L3.5 10.5C2.67157 10.5 2 11.1716 2 12C2 12.8284 2.67157 13.5 3.5 13.5L10.5 13.5V20.5C10.5 21.3284 11.1716 22 12 22C12.8284 22 13.5 21.3284 13.5 20.5V13.5L20.5 13.5Z" />
<Image Width="32" Height="32">
<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" />
</DrawingGroup>
</DrawingImage>
</Image.Source>
</Image>
</StackPanel>
<StackPanel Orientation="Horizontal" Spacing="20">
<Label Theme="{StaticResource TagLabel}">Label</Label>
<Label Classes="Large" Theme="{StaticResource TagLabel}">Large Label</Label>
<Label Classes="Circle" Theme="{StaticResource TagLabel}">Circle Label</Label>
<Label Classes="Large Circle" Theme="{StaticResource TagLabel}">Large Circle Label</Label>
<TextBlock
HorizontalAlignment="Center"
Classes="H1"
Text="Semi Avalonia"
Theme="{DynamicResource TitleTextBlock}" />
<TextBlock
MaxWidth="600"
Margin="0,20,0,0"
HorizontalAlignment="Center"
Classes="Secondary"
Text="AvaloniaUI Theme inspired by Semi Design. An easy-to-customize modern design system that helps designers and developers create high-quality products."
TextWrapping="Wrap" />
<StackPanel
Margin="0,10,0,0"
HorizontalAlignment="Center"
Orientation="Horizontal">
<TextBlock
Margin="12,0"
FontWeight="600"
Text="Modern" />
<TextBlock
Margin="12,0"
FontWeight="600"
Foreground="{Binding #color.Color, Converter={StaticResource ColorToBrushConverter}, Mode=TwoWay}"
Text="Flexible" />
<TextBlock
Margin="12,0"
FontWeight="600"
Text="Simple" />
</StackPanel>
<StackPanel Orientation="Horizontal" Spacing="20">
<Label Classes="Blue" Theme="{StaticResource TagLabel}">Indigo</Label>
<Label Classes="Ghost Blue" Theme="{StaticResource TagLabel}">Indigo</Label>
<Label Classes="Solid Blue" Theme="{StaticResource TagLabel}">Indigo</Label>
</StackPanel>
<StackPanel Orientation="Horizontal">
<StackPanel
Margin="0,0,16,0"
VerticalAlignment="Center"
Orientation="Horizontal">
<RadioButton Margin="0,0,8,0">Option 1</RadioButton>
<RadioButton>Option 2</RadioButton>
</StackPanel>
<Border VerticalAlignment="Center" Theme="{StaticResource RadioButtonGroupBorder}">
<StackPanel HorizontalAlignment="Center">
<StackPanel>
<StackPanel Orientation="Horizontal">
<RadioButton IsChecked="True" Theme="{StaticResource ButtonRadioButton}">选项 1</RadioButton>
<RadioButton Theme="{StaticResource ButtonRadioButton}">选项 2</RadioButton>
</StackPanel>
</Border>
<RadioButton Margin="4" Theme="{StaticResource CardRadioButton}">
<StackPanel>
<TextBlock FontWeight="Bold">Option 1</TextBlock>
<TextBlock Classes="Tertiary">Description 1</TextBlock>
</StackPanel>
</RadioButton>
<RadioButton
Margin="4"
IsChecked="True"
Theme="{StaticResource CardRadioButton}">
<StackPanel>
<TextBlock FontWeight="Bold">Option 2</TextBlock>
<TextBlock Classes="Tertiary">Description 2</TextBlock>
</StackPanel>
</RadioButton>
</StackPanel>
<StackPanel Orientation="Horizontal" />
<StackPanel Orientation="Horizontal">
<CheckBox Margin="0,0,8,0">Avalonia</CheckBox>
<CheckBox Margin="0,0,8,0" IsChecked="True">WPF</CheckBox>
<CheckBox IsChecked="{x:Null}" IsThreeState="True">UWP</CheckBox>
</StackPanel>
<StackPanel Orientation="Horizontal">
<ToggleSwitch
Content="Content"
OffContent="No"
OnContent="Yes" />
<ProgressBar
Classes="Right"
ShowProgressText="True"
Value="20" />
<Slider
Width="200"
Margin="30,0"
Orientation="Horizontal"
Value="30" />
</StackPanel>
<TabControl>
<TabItem Header="Tab 1">
<TextBlock Margin="8">Tab Content 1</TextBlock>
</TabItem>
<TabItem Header="Tab 2">
<TextBlock Margin="8">Tab Content 2</TextBlock>
</TabItem>
<TabItem Header="Tab 3">
<TextBlock Margin="8">Tab Content 3</TextBlock>
</TabItem>
</TabControl>
<StackPanel Orientation="Horizontal" Spacing="20">
<ComboBox Width="200" PlaceholderText="Please Select" >
<ComboBoxItem>Item 1</ComboBoxItem>
<ComboBoxItem>Item 2</ComboBoxItem>
<ComboBoxItem>Item 3</ComboBoxItem>
</ComboBox>
<DatePicker />
<TimePicker />
<CalendarDatePicker />
</StackPanel>
<Grid ColumnDefinitions="* * *">
<Border Theme="{StaticResource CardBorder}">
<TextBlock>Card</TextBlock>
</Border>
<Border
Grid.Column="1"
Classes="Hover"
Theme="{StaticResource CardBorder}">
<TextBlock>Shadow on hover</TextBlock>
</Border>
<Border
Grid.Column="2"
Classes="Shadow"
Theme="{StaticResource CardBorder}">
<TextBlock>Shadow</TextBlock>
</Border>
</Grid>
<StackPanel Orientation="Horizontal" Spacing="20">
<TextBox
Width="200"
InnerLeftContent="http://"
InnerRightContent=".com" />
<TextBox
Width="200"
Classes="revealPasswordButton"
PasswordChar="*"
Text="Avalonia" />
<StackPanel Margin="16,0">
<Button
Margin="0,8"
Classes="Primary"
Content="Primary"
HorizontalAlignment="Stretch"
Theme="{DynamicResource SolidButton}" />
<Button
Margin="0,8"
Classes="Secondary"
Content="Secondary"
HorizontalAlignment="Stretch"
Theme="{DynamicResource SolidButton}" />
<Button
Margin="0,8"
Classes="Tertiary"
Content="Tertiary"
HorizontalAlignment="Stretch"
Theme="{DynamicResource SolidButton}" />
<Button
Margin="0,8"
Classes="Success"
Content="Success"
HorizontalAlignment="Stretch"
Theme="{DynamicResource SolidButton}" />
<Button
Margin="0,8"
Classes="Warning"
Content="Warning"
HorizontalAlignment="Stretch"
Theme="{DynamicResource SolidButton}" />
<Button
Margin="0,8"
Classes="Danger"
Content="Danger"
HorizontalAlignment="Stretch"
Theme="{DynamicResource SolidButton}" />
</StackPanel>
<Calendar Margin="16,0" />
<StackPanel Margin="16,0">
<TextBox
Width="300"
Margin="0,12"
InnerLeftContent="https://"
InnerRightContent=".com" />
<DatePicker Width="300" Margin="0,12" />
<CalendarDatePicker Width="300" Margin="0,12" />
<NumericUpDown Width="300" Margin="0,12" />
<ComboBox Width="300" Margin="0,12">
<ComboBoxItem>Avalonia</ComboBoxItem>
<ComboBoxItem>Semi Design</ComboBoxItem>
<ComboBoxItem>IRIHI Technology</ComboBoxItem>
</ComboBox>
</StackPanel>
<StackPanel>
<UniformGrid HorizontalAlignment="Center" Columns="3">
<UniformGrid.Styles>
<Style Selector="CheckBox">
<Setter Property="Margin" Value="4" />
</Style>
</UniformGrid.Styles>
<CheckBox Content="Windows" IsChecked="True" />
<CheckBox Content="macOS" IsChecked="True" />
<CheckBox Content="Linux" IsChecked="True" />
<CheckBox
Content="iOS"
IsChecked="{x:Null}"
IsThreeState="True" />
<CheckBox
Content="Android"
IsChecked="{x:Null}"
IsThreeState="True" />
<CheckBox
Content="Wasm"
IsChecked="{x:Null}"
IsThreeState="True" />
</UniformGrid>
<UniformGrid HorizontalAlignment="Center" Columns="3">
<UniformGrid.Styles>
<Style Selector="CheckBox">
<Setter Property="Margin" Value="4" />
</Style>
</UniformGrid.Styles>
<CheckBox
Content="Windows"
IsChecked="True"
Theme="{DynamicResource CardCheckBox}" />
<CheckBox
Content="macOS"
IsChecked="True"
Theme="{DynamicResource CardCheckBox}" />
<CheckBox
Content="Linux"
IsChecked="True"
Theme="{DynamicResource CardCheckBox}" />
<CheckBox
Content="iOS"
IsChecked="{x:Null}"
IsThreeState="True"
Theme="{DynamicResource CardCheckBox}" />
<CheckBox
Content="Android"
IsChecked="{x:Null}"
IsThreeState="True"
Theme="{DynamicResource CardCheckBox}" />
<CheckBox
Content="Wasm"
IsChecked="{x:Null}"
IsThreeState="True"
Theme="{DynamicResource CardCheckBox}" />
</UniformGrid>
</StackPanel>
</StackPanel>
</StackPanel>
<StackPanel Orientation="Horizontal">
<StackPanel Margin="16,0">
<Button
Margin="0,8"
HorizontalAlignment="Stretch"
Classes="Primary"
Content="Primary" />
<Button
Margin="0,8"
HorizontalAlignment="Stretch"
Classes="Secondary"
Content="Secondary" />
<Button
Margin="0,8"
HorizontalAlignment="Stretch"
Classes="Tertiary"
Content="Tertiary" />
<Button
Margin="0,8"
HorizontalAlignment="Stretch"
Classes="Success"
Content="Success" />
<Button
Margin="0,8"
HorizontalAlignment="Stretch"
Classes="Warning"
Content="Warning" />
<Button
Margin="0,8"
HorizontalAlignment="Stretch"
Classes="Danger"
Content="Danger" />
</StackPanel>
<ColorView
Name="color"
VerticalAlignment="Top"
Palette="{DynamicResource SemiColorPalette}"
SelectedIndex="2"
Color="#8B44AC" />
<StackPanel Width="300" Margin="8">
<StackPanel Orientation="Horizontal">
<Slider
Name="slider"
Width="200"
Margin="16"
Maximum="100"
Minimum="0" />
<ToggleSwitch Name="three" IsChecked="True" />
</StackPanel>
<UniformGrid Columns="2">
<ProgressBar
Width="100"
MinWidth="100"
Margin="0,16"
IsIndeterminate="{Binding #three.IsChecked}"
ShowProgressText="True"
Value="{Binding #slider.Value}" />
<ProgressBar
Width="100"
Height="100"
IsIndeterminate="{Binding #three.IsChecked}"
ShowProgressText="True"
Theme="{DynamicResource ProgressRing}"
Value="{Binding #slider.Value}" />
</UniformGrid>
<TabStrip Margin="0,8">
<TabStripItem Content="Tab 1" />
<TabStripItem Content="Tab 2" />
<TabStripItem Content="Tab 3" />
</TabStrip>
<Menu Margin="0,8">
<MenuItem Header="Menu 1">
<MenuItem Header="SubMenu 1" />
<MenuItem Header="SubMenu 2" />
<MenuItem Header="SubMenu 3" />
</MenuItem>
<MenuItem Header="Menu 2">
<MenuItem Header="SubMenu 1" />
<MenuItem Header="SubMenu 2" />
<MenuItem Header="SubMenu 3" />
<MenuItem Header="SubMenu 4">
<MenuItem Header="SubMenu 1" />
<MenuItem Header="SubMenu 2" />
<MenuItem Header="SubMenu 3" />
</MenuItem>
</MenuItem>
<MenuItem Header="Menu 3" />
</Menu>
<StackPanel Orientation="Horizontal" Spacing="20">
<TreeView>
<TreeViewItem Header="Level 1" IsExpanded="True">
<TreeViewItem Header="Level 2" />
<TreeViewItem Header="Level 2" />
<TreeViewItem Header="Level 2" IsExpanded="True">
<TreeViewItem Header="Level 3" />
<TreeViewItem Header="Level 3" />
</TreeViewItem>
</TreeViewItem>
</TreeView>
<ListBox SelectedIndex="3">
<TextBlock>List Item 1</TextBlock>
<TextBlock>List Item 2</TextBlock>
<TextBlock>List Item 3</TextBlock>
<TextBlock>List Item 4</TextBlock>
<TextBlock>List Item 5</TextBlock>
</ListBox>
<Calendar />
</StackPanel>
<StackPanel Margin="8">
<UniformGrid HorizontalAlignment="Center" Columns="3">
<UniformGrid.Styles>
<Style Selector="RadioButton">
<Setter Property="Margin" Value="4" />
<Setter Property="HorizontalAlignment" Value="Center" />
</Style>
</UniformGrid.Styles>
<RadioButton Content="Avalonia" IsChecked="True" />
<RadioButton Content="WPF" />
<RadioButton Content="Xamarin" />
</UniformGrid>
<UniformGrid HorizontalAlignment="Center" Columns="3">
<UniformGrid.Styles>
<Style Selector="RadioButton">
<Setter Property="Margin" Value="4" />
<Setter Property="HorizontalAlignment" Value="Center" />
</Style>
</UniformGrid.Styles>
<RadioButton
Content="Avalonia"
IsChecked="True"
Theme="{DynamicResource CardRadioButton}" />
<RadioButton Content="WPF" Theme="{DynamicResource CardRadioButton}" />
<RadioButton Content="Xamarin" Theme="{DynamicResource CardRadioButton}" />
</UniformGrid>
<WrapPanel Width="300">
<WrapPanel.Styles>
<Style Selector="Label">
<Setter Property="Margin" Value="4" />
<Setter Property="HorizontalContentAlignment" Value="Center" />
</Style>
</WrapPanel.Styles>
<Label Classes="Red" Theme="{StaticResource TagLabel}">Red</Label>
<Label Classes="Pink" Theme="{StaticResource TagLabel}">Pink</Label>
<Label Classes="Purple" Theme="{StaticResource TagLabel}">Purple</Label>
<Label Classes="Violet" Theme="{StaticResource TagLabel}">Violet</Label>
<Label Classes="Indigo" Theme="{StaticResource TagLabel}">Indigo</Label>
<Label Classes="Blue" Theme="{StaticResource TagLabel}">Blue</Label>
<Label Classes="LightBlue" Theme="{StaticResource TagLabel}">LightBlue</Label>
<Label Classes="Cyan" Theme="{StaticResource TagLabel}">Cyan</Label>
<Label Classes="Teal" Theme="{StaticResource TagLabel}">Teal</Label>
<Label Classes="Green" Theme="{StaticResource TagLabel}">Green</Label>
<Label Classes="LightGreen" Theme="{StaticResource TagLabel}">LightGreen</Label>
<Label Classes="Lime" Theme="{StaticResource TagLabel}">Lime</Label>
<Label Classes="Yellow" Theme="{StaticResource TagLabel}">Yellow</Label>
<Label Classes="Amber" Theme="{StaticResource TagLabel}">Amber</Label>
<Label Classes="Orange" Theme="{StaticResource TagLabel}">Orange</Label>
<Label Classes="Grey" Theme="{StaticResource TagLabel}">Grey</Label>
<Label Classes="White" Theme="{StaticResource TagLabel}">White</Label>
<Label Classes="Large" Theme="{StaticResource TagLabel}">Large</Label>
<Label Classes="Circle" Theme="{StaticResource TagLabel}">Circle</Label>
</WrapPanel>
</StackPanel>
</StackPanel>
</StackPanel>
<TextBlock
Margin="0,32,0,16"
Classes="H5"
Text="Start to install"
Theme="{DynamicResource TitleTextBlock}" />
<TabControl Padding="8">
<TabItem Header="Main">
<StackPanel>
<TextBlock Text="Install via nuget: " />
<Border Margin="0,16" Classes="CodeBlock">
<SelectableTextBlock FontFamily="Consolas" Text="{Binding $parent[local:Overview].MainInstall}" />
</Border>
<TextBlock Text="Reference styles: " />
<Border Margin="0,16" Classes="CodeBlock">
<SelectableTextBlock
FontFamily="Consolas"
Text="{Binding $parent[local:Overview].MainStyle}"
TextWrapping="Wrap" />
</Border>
</StackPanel>
</TabItem>
<TabItem Header="ColorPicker">
<StackPanel>
<TextBlock Text="Install via nuget: " />
<Border Margin="0,16" Classes="CodeBlock">
<SelectableTextBlock FontFamily="Consolas" Text="{Binding $parent[local:Overview].ColorPickerInstall}" />
</Border>
<TextBlock Text="Reference styles: " />
<Border Margin="0,16" Classes="CodeBlock">
<SelectableTextBlock
FontFamily="Consolas"
Text="{Binding $parent[local:Overview].ColorPickerStyle}"
TextWrapping="Wrap" />
</Border>
</StackPanel>
</TabItem>
<TabItem Header="DataGrid">
<StackPanel>
<TextBlock Text="Install via nuget: " />
<Border Margin="0,16" Classes="CodeBlock">
<SelectableTextBlock FontFamily="Consolas" Text="{Binding $parent[local:Overview].DataGridInstall}" />
</Border>
<TextBlock Text="Reference styles: " />
<Border Margin="0,16" Classes="CodeBlock">
<SelectableTextBlock
FontFamily="Consolas"
Text="{Binding $parent[local:Overview].DataGridStyle}"
TextWrapping="Wrap" />
</Border>
</StackPanel>
</TabItem>
<TabItem Header="TreeDataGrid">
<StackPanel>
<TextBlock Text="Install via nuget: " />
<Border Margin="0,16" Classes="CodeBlock">
<SelectableTextBlock FontFamily="Consolas" Text="{Binding $parent[local:Overview].TreeDataGridInstall}" />
</Border>
<TextBlock Text="Reference styles: " />
<Border Margin="0,16" Classes="CodeBlock">
<SelectableTextBlock
FontFamily="Consolas"
Text="{Binding $parent[local:Overview].TreeDataGridStyle}"
TextWrapping="Wrap" />
</Border>
</StackPanel>
</TabItem>
</TabControl>
</StackPanel>
</StackPanel>
</ScrollViewer>
</UserControl>
</UserControl>
+31 -12
View File
@@ -13,16 +13,35 @@ public partial class Overview : UserControl
InitializeComponent();
}
private void ToggleButton_OnIsCheckedChanged(object sender, RoutedEventArgs e)
{
var variant = Application.Current!.RequestedThemeVariant;
if (variant?.Key == "Dark")
{
Application.Current!.RequestedThemeVariant = ThemeVariant.Light;
}
else
{
Application.Current!.RequestedThemeVariant = ThemeVariant.Dark;
}
}
public string MainInstall { get; set; } = "dotnet add package Semi.Avalonia --version 11.0.7";
public string MainStyle { get; set; } = """
<Application.Styles>
<StyleInclude Source="avares://Semi.Avalonia/Themes/Index.axaml" />
</Application.Styles>
""";
public string ColorPickerInstall { get; set; } = "dotnet add package Semi.Avalonia.ColorPicker --version 11.0.7";
public string ColorPickerStyle { get; set; } = """
<Application.Styles>
<StyleInclude Source="avares://Semi.Avalonia.ColorPicker/Index.axaml" />
</Application.Styles>
""";
public string DataGridInstall { get; set; } = "dotnet add package Semi.Avalonia.DataGrid --version 11.0.7";
public string DataGridStyle { get; set; } = """
<Application.Styles>
<StyleInclude Source="avares://Semi.Avalonia.DataGrid/Index.axaml" />
</Application.Styles>
""";
public string TreeDataGridInstall { get; set; } = "dotnet add package Semi.Avalonia.TreeDataGrid --version 11.0.7";
public string TreeDataGridStyle { get; set; } = """
<Application.Styles>
<StyleInclude Source="avares://Semi.Avalonia.TreeDataGrid/Index.axaml" />
</Application.Styles>
""";
}
@@ -46,6 +46,7 @@
TextWrapping="Wrap" />
<controls:ColorDetailControl
Background="{Binding SelectedColor.Brush}"
ColorResourceKey="{Binding SelectedColor.ColorResourceKey}"
IsVisible="{Binding SelectedColor, Converter={x:Static ObjectConverters.IsNotNull}}"
ResourceKey="{Binding SelectedColor.ResourceKey}"
ResourceName="{Binding SelectedColor.ColorDisplayName}" />
@@ -62,7 +63,7 @@
Theme="{DynamicResource TitleTextBlock}" />
<TabControl>
<TabItem Header="Light">
<ItemsControl Margin="16" Items="{Binding LightLists}">
<ItemsControl Margin="16" ItemsSource="{Binding LightLists}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Horizontal" />
@@ -70,7 +71,7 @@
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate x:DataType="viewModels:ColorListViewModel">
<ItemsControl Margin="4,0" Items="{Binding Color}">
<ItemsControl Margin="4,0" ItemsSource="{Binding Color}">
<ItemsControl.ItemTemplate>
<DataTemplate x:DataType="viewModels:ColorItemViewModel">
<controls:ColorItemControl
@@ -86,7 +87,7 @@
</ItemsControl>
</TabItem>
<TabItem Header="Dark">
<ItemsControl Margin="16" Items="{Binding DarkLists}">
<ItemsControl Margin="16" ItemsSource="{Binding DarkLists}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Horizontal" />
@@ -94,7 +95,7 @@
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate x:DataType="viewModels:ColorListViewModel">
<ItemsControl Margin="4,0" Items="{Binding Color}">
<ItemsControl Margin="4,0" ItemsSource="{Binding Color}">
<ItemsControl.ItemTemplate>
<DataTemplate x:DataType="viewModels:ColorItemViewModel">
<controls:ColorItemControl
@@ -111,7 +112,7 @@
</TabItem>
</TabControl>
<ItemsControl Items="{Binding FunctionalColors}">
<ItemsControl ItemsSource="{Binding FunctionalColors}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<!-- -->
@@ -0,0 +1,22 @@
<UserControl
x:Class="Semi.Avalonia.Demo.Pages.PathIconDemo"
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"
d:DesignHeight="450"
d:DesignWidth="800"
mc:Ignorable="d">
<StackPanel HorizontalAlignment="Left" >
<TextBlock Text="Size"></TextBlock>
<Slider Name="width" Minimum="0" Maximum="100" Value="20" Width="300"></Slider>
<ToggleSwitch Name="active" Content="Active"></ToggleSwitch>
<PathIcon
Classes.Active="{Binding ElementName=active, Path=IsChecked}"
BorderBrush="{DynamicResource SemiRed6}"
Width="{Binding #width.Value}"
Height="{Binding #width.Value}"
Data="M12 3L2 12H5V20H19V12H22L12 3M13 18H11V16H13V18M13 14H11V8H13V14Z"
Foreground="{DynamicResource SemiBlue6}" />
</StackPanel>
</UserControl>
@@ -0,0 +1,13 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
namespace Semi.Avalonia.Demo.Pages;
public partial class PathIconDemo : UserControl
{
public PathIconDemo()
{
InitializeComponent();
}
}
@@ -7,114 +7,159 @@
d:DesignHeight="800"
d:DesignWidth="800"
mc:Ignorable="d">
<StackPanel HorizontalAlignment="Left" Spacing="20">
<ProgressBar
Width="200"
Maximum="100"
Minimum="0"
ShowProgressText="True"
Value="20" />
<ProgressBar
Width="200"
IsIndeterminate="True"
Maximum="100"
Minimum="0"
ShowProgressText="True"
Value="20" />
<ProgressBar
Width="200"
Classes="Left"
IsIndeterminate="True"
Maximum="100"
Minimum="0"
ShowProgressText="True"
Value="20" />
<ProgressBar
Width="200"
Classes="Left"
Maximum="100"
Minimum="0"
ShowProgressText="True"
Value="20" />
<ProgressBar
Width="200"
Classes="Right"
Maximum="100"
Minimum="0"
ShowProgressText="True"
Value="20" />
<StackPanel
HorizontalAlignment="Left"
Orientation="Horizontal"
Spacing="20">
<ProgressBar
Classes="Left"
<ScrollViewer>
<StackPanel HorizontalAlignment="Left" Spacing="20">
<StackPanel
HorizontalAlignment="Left"
Orientation="Horizontal"
Spacing="20">
<ProgressBar
Width="100"
Height="100"
Maximum="{Binding #slider.Maximum}"
Minimum="{Binding #slider.Minimum}"
Theme="{DynamicResource ProgressRing}"
Value="{Binding #slider.Value}"
ShowProgressText="True"/>
<ProgressBar
Width="100"
Height="100"
IsIndeterminate="True"
Maximum="{Binding #slider.Maximum}"
Minimum="{Binding #slider.Minimum}"
Theme="{DynamicResource ProgressRing}"
ShowProgressText="True"/>
</StackPanel>
<Slider
Name="slider"
Width="300"
IsSnapToTickEnabled="True"
Maximum="100"
Minimum="0"
TickFrequency="10" />
<ProgressBar
Width="200"
Maximum="100"
Minimum="0"
ShowProgressText="True"
Value="{Binding #slider.Value}" />
<ProgressBar
Width="200"
IsIndeterminate="True"
Maximum="100"
Minimum="0"
Orientation="Vertical"
ShowProgressText="True"
Value="20" />
<ProgressBar
Width="200"
Classes="Left"
IsIndeterminate="True"
Maximum="100"
Minimum="0"
ShowProgressText="True"
Value="20" />
<ProgressBar
Width="200"
Classes="Left"
Maximum="100"
Minimum="0"
ShowProgressText="True"
Value="20" />
<ProgressBar
Width="200"
Classes="Right"
Maximum="100"
Minimum="0"
Orientation="Vertical"
ShowProgressText="True"
Value="20" />
<StackPanel
HorizontalAlignment="Left"
Orientation="Horizontal"
Spacing="20">
<ProgressBar
Classes="Left"
Maximum="100"
Minimum="0"
Orientation="Vertical"
ShowProgressText="True"
Value="20" />
<ProgressBar
Classes="Right"
Maximum="100"
Minimum="0"
Orientation="Vertical"
ShowProgressText="True"
Value="20" />
<ProgressBar
Maximum="100"
Minimum="0"
Orientation="Vertical"
ShowProgressText="True"
Value="20" />
<ProgressBar
Classes="Left"
Maximum="100"
Minimum="0"
Orientation="Vertical"
ShowProgressText="False"
Value="20" />
<ProgressBar
IsIndeterminate="True"
Maximum="100"
Minimum="0"
Orientation="Vertical"
ShowProgressText="True"
Value="20" />
<ProgressBar
IsIndeterminate="True"
Maximum="100"
Minimum="0"
Orientation="Vertical"
ShowProgressText="False"
Value="20" />
</StackPanel>
<ProgressBar
Width="200"
Classes="Primary"
Maximum="100"
Minimum="0"
Orientation="Vertical"
ShowProgressText="True"
Value="20" />
Value="60" />
<ProgressBar
Classes="Left"
Width="200"
Classes="Secondary"
Maximum="100"
Minimum="0"
Orientation="Vertical"
ShowProgressText="False"
Value="20" />
<ProgressBar
IsIndeterminate="True"
Maximum="100"
Minimum="0"
Orientation="Vertical"
ShowProgressText="True"
Value="20" />
Value="60" />
<ProgressBar
IsIndeterminate="True"
Width="200"
Classes="Tertiary"
Maximum="100"
Minimum="0"
Orientation="Vertical"
ShowProgressText="False"
Value="20" />
ShowProgressText="True"
Value="60" />
<ProgressBar
Width="200"
Classes="Success"
Maximum="100"
Minimum="0"
ShowProgressText="True"
Value="60" />
<ProgressBar
Width="200"
Classes="Warning"
Maximum="100"
Minimum="0"
ShowProgressText="True"
Value="60" />
<ProgressBar
Width="200"
Classes="Error"
Maximum="100"
Minimum="0"
ShowProgressText="True"
Value="60" />
</StackPanel>
<ProgressBar
Width="200"
Classes="Success"
Maximum="100"
Minimum="0"
ShowProgressText="True"
Value="60" />
<ProgressBar
Width="200"
Classes="Warning"
Maximum="100"
Minimum="0"
ShowProgressText="True"
Value="60" />
<ProgressBar
Width="200"
Classes="Error"
Maximum="100"
Minimum="0"
ShowProgressText="True"
Value="60" />
<ProgressBar
Width="200"
Maximum="100"
Minimum="0"
ShowProgressText="True"
Value="60" />
</StackPanel>
</UserControl>
</ScrollViewer>
</UserControl>
@@ -5,73 +5,157 @@
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<StackPanel HorizontalAlignment="Left" Spacing="20">
<TextBlock Text="Radio Buttons" />
<StackPanel>
<RadioButton>111</RadioButton>
<RadioButton>222</RadioButton>
<RadioButton>333</RadioButton>
</StackPanel>
<TextBlock Text="Radio Button as Button" />
<Border HorizontalAlignment="Left" Theme="{StaticResource RadioButtonGroupBorder}">
<ScrollViewer>
<StackPanel HorizontalAlignment="Left" Spacing="20">
<TextBlock Text="Radio Buttons" />
<StackPanel Orientation="Horizontal">
<RadioButton Classes="Small" Theme="{DynamicResource ButtonRadioButton}">小1</RadioButton>
<RadioButton Classes="Small" Theme="{DynamicResource ButtonRadioButton}">小2</RadioButton>
<RadioButton>Unchecked</RadioButton>
<RadioButton IsChecked="True">Checked</RadioButton>
</StackPanel>
</Border>
<Border HorizontalAlignment="Left" Theme="{StaticResource RadioButtonGroupBorder}">
<StackPanel Orientation="Horizontal">
<RadioButton Theme="{DynamicResource ButtonRadioButton}">默认1</RadioButton>
<RadioButton Theme="{DynamicResource ButtonRadioButton}">默认2</RadioButton>
<RadioButton IsEnabled="False">Unchecked</RadioButton>
<RadioButton IsChecked="True" IsEnabled="False">Checked</RadioButton>
</StackPanel>
</Border>
<Border HorizontalAlignment="Left" Theme="{StaticResource RadioButtonGroupBorder}">
<TextBlock Text="Radio Button as Button" />
<StackPanel Orientation="Horizontal">
<RadioButton Classes="Large" Theme="{DynamicResource ButtonRadioButton}">大1</RadioButton>
<RadioButton Classes="Large" Theme="{DynamicResource ButtonRadioButton}">大2</RadioButton>
<Border HorizontalAlignment="Left" Theme="{StaticResource RadioButtonGroupBorder}">
<StackPanel Orientation="Horizontal">
<RadioButton Classes="Small" Theme="{DynamicResource ButtonRadioButton}">小1</RadioButton>
<RadioButton
Classes="Small"
IsChecked="True"
Theme="{DynamicResource ButtonRadioButton}">
小2
</RadioButton>
</StackPanel>
</Border>
<Border
Margin="8,0"
HorizontalAlignment="Left"
Theme="{StaticResource RadioButtonGroupBorder}">
<StackPanel Orientation="Horizontal">
<RadioButton
Classes="Small"
IsEnabled="False"
Theme="{DynamicResource ButtonRadioButton}">
小1
</RadioButton>
<RadioButton
Classes="Small"
IsChecked="True"
IsEnabled="False"
Theme="{DynamicResource ButtonRadioButton}">
小2
</RadioButton>
</StackPanel>
</Border>
</StackPanel>
<StackPanel Orientation="Horizontal">
<Border HorizontalAlignment="Left" Theme="{StaticResource RadioButtonGroupBorder}">
<StackPanel Orientation="Horizontal">
<RadioButton Theme="{DynamicResource ButtonRadioButton}">默认1</RadioButton>
<RadioButton IsChecked="True" Theme="{DynamicResource ButtonRadioButton}">默认2</RadioButton>
</StackPanel>
</Border>
<Border
Margin="8,0"
HorizontalAlignment="Left"
Theme="{StaticResource RadioButtonGroupBorder}">
<StackPanel Orientation="Horizontal">
<RadioButton IsEnabled="False" Theme="{DynamicResource ButtonRadioButton}">默认1</RadioButton>
<RadioButton
IsChecked="True"
IsEnabled="False"
Theme="{DynamicResource ButtonRadioButton}">
默认2
</RadioButton>
</StackPanel>
</Border>
</StackPanel>
<StackPanel Orientation="Horizontal">
<Border HorizontalAlignment="Left" Theme="{StaticResource RadioButtonGroupBorder}">
<StackPanel Orientation="Horizontal">
<RadioButton Classes="Large" Theme="{DynamicResource ButtonRadioButton}">大1</RadioButton>
<RadioButton
Classes="Large"
IsChecked="True"
Theme="{DynamicResource ButtonRadioButton}">
大2
</RadioButton>
</StackPanel>
</Border>
<Border
Margin="8,0"
HorizontalAlignment="Left"
Theme="{StaticResource RadioButtonGroupBorder}">
<StackPanel Orientation="Horizontal">
<RadioButton
Classes="Large"
IsEnabled="False"
Theme="{DynamicResource ButtonRadioButton}">
大1
</RadioButton>
<RadioButton
Classes="Large"
IsChecked="True"
IsEnabled="False"
Theme="{DynamicResource ButtonRadioButton}">
大2
</RadioButton>
</StackPanel>
</Border>
</StackPanel>
<TextBlock Text="Radio Button as Card" />
<StackPanel Orientation="Horizontal">
<RadioButton
Width="300"
Content="Avalonia"
IsChecked="True"
Theme="{DynamicResource CardRadioButton}" />
<RadioButton
Width="300"
Content="WPF"
IsChecked="True"
Theme="{DynamicResource CardRadioButton}" />
</StackPanel>
<StackPanel Orientation="Horizontal">
<RadioButton
Width="300"
Content="Avalonia"
IsEnabled="False"
Theme="{DynamicResource CardRadioButton}" />
<RadioButton
Width="300"
Content="WPF"
IsChecked="True"
IsEnabled="False"
Theme="{DynamicResource CardRadioButton}" />
</StackPanel>
<TextBlock Text="Radio Button as Pure Card" />
<StackPanel Orientation="Horizontal">
<RadioButton
Width="300"
Content="Avalonia"
IsChecked="True"
Theme="{DynamicResource PureCardRadioButton}" />
<RadioButton
Width="300"
Content="WPF"
Theme="{DynamicResource PureCardRadioButton}" />
</StackPanel>
<StackPanel Orientation="Horizontal">
<RadioButton
Width="300"
Content="Avalonia"
IsChecked="True"
IsEnabled="False"
Theme="{DynamicResource PureCardRadioButton}" />
<RadioButton
Width="300"
Content="WPF"
IsEnabled="False"
Theme="{DynamicResource PureCardRadioButton}" />
</StackPanel>
</Border>
<TextBlock Text="Radio Button as Card" />
<StackPanel Orientation="Horizontal">
<RadioButton Width="300" Theme="{DynamicResource CardRadioButton}">
<StackPanel>
<TextBlock FontWeight="Bold">单选框标题</TextBlock>
<TextBlock TextWrapping="Wrap">Semi Design 是由互娱社区前端团队与 UED 团队共同设计开发并维护的设计系统</TextBlock>
</StackPanel>
</RadioButton>
<RadioButton Width="300" Theme="{DynamicResource CardRadioButton}">
<StackPanel>
<TextBlock FontWeight="Bold">单选框标题</TextBlock>
<TextBlock TextWrapping="Wrap">Semi Design 是由互娱社区前端团队与 UED 团队共同设计开发并维护的设计系统</TextBlock>
</StackPanel>
</RadioButton>
<RadioButton Width="300" Theme="{DynamicResource CardRadioButton}">
<StackPanel>
<TextBlock FontWeight="Bold">单选框标题</TextBlock>
<TextBlock TextWrapping="Wrap">Semi Design 是由互娱社区前端团队与 UED 团队共同设计开发并维护的设计系统</TextBlock>
</StackPanel>
</RadioButton>
</StackPanel>
<TextBlock Text="Radio Button as Pure Card" />
<StackPanel Orientation="Horizontal">
<RadioButton Width="300" Theme="{DynamicResource PureCardRadioButton}">
<StackPanel>
<TextBlock FontWeight="Bold">单选框标题</TextBlock>
<TextBlock TextWrapping="Wrap">Semi Design 是由互娱社区前端团队与 UED 团队共同设计开发并维护的设计系统</TextBlock>
</StackPanel>
</RadioButton>
<RadioButton Width="300" Theme="{DynamicResource PureCardRadioButton}">
<StackPanel>
<TextBlock FontWeight="Bold">单选框标题</TextBlock>
<TextBlock TextWrapping="Wrap">Semi Design 是由互娱社区前端团队与 UED 团队共同设计开发并维护的设计系统</TextBlock>
</StackPanel>
</RadioButton>
<RadioButton Width="300" Theme="{DynamicResource PureCardRadioButton}">
<StackPanel>
<TextBlock FontWeight="Bold">单选框标题</TextBlock>
<TextBlock TextWrapping="Wrap">Semi Design 是由互娱社区前端团队与 UED 团队共同设计开发并维护的设计系统</TextBlock>
</StackPanel>
</RadioButton>
</StackPanel>
</StackPanel>
</UserControl>
</ScrollViewer>
</UserControl>
@@ -4,12 +4,24 @@
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"
d:DesignHeight="450"
d:DesignWidth="800"
x:DataType="pages:RefreshContainerDemoViewModel"
x:CompileBindings="True"
mc:Ignorable="d">
<StackPanel HorizontalAlignment="Left" Spacing="20">
<RefreshContainer Name="container">
<TextBlock Text="Content" />
<DockPanel HorizontalAlignment="Stretch" VerticalAlignment="Top">
<Label DockPanel.Dock="Top">A control that supports pull to refresh</Label>
<RefreshContainer Name="Refresh"
DockPanel.Dock="Bottom"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
PullDirection="TopToBottom"
RefreshRequested="RefreshContainerPage_RefreshRequested"
Margin="5">
<ListBox HorizontalAlignment="Stretch"
VerticalAlignment="Top"
ItemsSource="{Binding Items}" />
</RefreshContainer>
</StackPanel>
</DockPanel>
</UserControl>
@@ -1,14 +1,46 @@
using Avalonia;
using System.Collections.ObjectModel;
using System.Linq;
using System.Threading.Tasks;
using Avalonia.Controls;
using Avalonia.Interactivity;
using Avalonia.Markup.Xaml;
using CommunityToolkit.Mvvm.ComponentModel;
namespace Semi.Avalonia.Demo.Pages;
public partial class RefreshContainerDemo : UserControl
{
private RefreshContainerDemoViewModel _viewModel;
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}");
}
}
@@ -13,22 +13,24 @@
<RepeatButton Classes="Primary">Primary</RepeatButton>
<RepeatButton Classes="Secondary">Secondary</RepeatButton>
<RepeatButton Classes="Tertiary">Tertiary</RepeatButton>
<RepeatButton Classes="Success">Success</RepeatButton>
<RepeatButton Classes="Warning">Warning</RepeatButton>
<RepeatButton Classes="Danger">Danger</RepeatButton>
<RepeatButton Classes="Primary" IsEnabled="False">Danger</RepeatButton>
<RepeatButton Classes="Danger" IsEnabled="False">Disabled</RepeatButton>
</StackPanel>
<TextBlock>Solid</TextBlock>
<StackPanel Orientation="Horizontal" Spacing="20">
<RepeatButton Classes="Primary" Theme="{DynamicResource SolidRepeatButton}">Primary</RepeatButton>
<RepeatButton Classes="Secondary" Theme="{DynamicResource SolidRepeatButton}">Secondary</RepeatButton>
<RepeatButton Classes="Tertiary" Theme="{DynamicResource SolidRepeatButton}">Tertiary</RepeatButton>
<RepeatButton Classes="Success" Theme="{DynamicResource SolidRepeatButton}">Success</RepeatButton>
<RepeatButton Classes="Warning" Theme="{DynamicResource SolidRepeatButton}">Warning</RepeatButton>
<RepeatButton Classes="Danger" Theme="{DynamicResource SolidRepeatButton}">Danger</RepeatButton>
<RepeatButton
Classes="Primary"
Classes="Danger"
IsEnabled="False"
Theme="{DynamicResource SolidRepeatButton}">
Danger
Disabled
</RepeatButton>
</StackPanel>
<TextBlock>Borderless</TextBlock>
@@ -36,14 +38,20 @@
<RepeatButton Classes="Primary" Theme="{DynamicResource BorderlessRepeatButton}">Primary</RepeatButton>
<RepeatButton Classes="Secondary" Theme="{DynamicResource BorderlessRepeatButton}">Secondary</RepeatButton>
<RepeatButton Classes="Tertiary" Theme="{DynamicResource BorderlessRepeatButton}">Tertiary</RepeatButton>
<RepeatButton Classes="Success" Theme="{DynamicResource BorderlessRepeatButton}">Success</RepeatButton>
<RepeatButton Classes="Warning" Theme="{DynamicResource BorderlessRepeatButton}">Warning</RepeatButton>
<RepeatButton Classes="Danger" Theme="{DynamicResource BorderlessRepeatButton}">Danger</RepeatButton>
<RepeatButton
Classes="Primary"
Classes="Danger"
IsEnabled="False"
Theme="{DynamicResource BorderlessRepeatButton}">
Danger
Disabled
</RepeatButton>
</StackPanel>
<StackPanel Orientation="Horizontal" Spacing="8">
<RepeatButton Classes="Small">Small</RepeatButton>
<RepeatButton>Default</RepeatButton>
<RepeatButton Classes="Large">Large</RepeatButton>
</StackPanel>
</StackPanel>
</UserControl>
@@ -0,0 +1,75 @@
<UserControl
x:Class="Semi.Avalonia.Demo.Pages.ScrollViewerDemo"
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"
d:DesignHeight="450"
d:DesignWidth="800"
mc:Ignorable="d">
<ScrollViewer>
<StackPanel HorizontalAlignment="Left" Spacing="20">
<ScrollViewer
Width="200"
Height="200"
Margin="10"
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>
</ScrollViewer>
</StackPanel>
</ScrollViewer>
</UserControl>
@@ -0,0 +1,18 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
namespace Semi.Avalonia.Demo.Pages;
public partial class ScrollViewerDemo : UserControl
{
public ScrollViewerDemo()
{
InitializeComponent();
}
private void InitializeComponent()
{
AvaloniaXamlLoader.Load(this);
}
}
@@ -0,0 +1,163 @@
<UserControl
x:Class="Semi.Avalonia.Demo.Pages.SelectableTextBlockDemo"
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"
d:DesignHeight="450"
d:DesignWidth="800"
mc:Ignorable="d">
<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
<StackPanel Orientation="Horizontal">
<StackPanel.Styles>
<Style Selector="SelectableTextBlock">
<Setter Property="VerticalAlignment" Value="Center" />
<Setter Property="Margin" Value="4" />
</Style>
</StackPanel.Styles>
<HeaderedContentControl
Width="400"
Height="400"
Margin="16"
VerticalAlignment="Top"
Header="Default Theme"
Theme="{DynamicResource GroupBox}">
<Grid
VerticalAlignment="Top"
ColumnDefinitions="Auto, *"
RowDefinitions="*,*,*,*,*,*,*,*,*,*,*,*">
<SelectableTextBlock Grid.Row="1" Grid.Column="0">Classes</SelectableTextBlock>
<SelectableTextBlock Grid.Row="2" Grid.Column="0">-</SelectableTextBlock>
<SelectableTextBlock Grid.Row="3" Grid.Column="0">Secondary</SelectableTextBlock>
<SelectableTextBlock Grid.Row="4" Grid.Column="0">Tertiary</SelectableTextBlock>
<SelectableTextBlock Grid.Row="5" Grid.Column="0">Quaternary</SelectableTextBlock>
<SelectableTextBlock Grid.Row="6" Grid.Column="0">Success</SelectableTextBlock>
<SelectableTextBlock Grid.Row="7" Grid.Column="0">Warning</SelectableTextBlock>
<SelectableTextBlock Grid.Row="8" Grid.Column="0">Danger</SelectableTextBlock>
<SelectableTextBlock Grid.Row="9" Grid.Column="0">Mark</SelectableTextBlock>
<SelectableTextBlock Grid.Row="10" Grid.Column="0">Underline</SelectableTextBlock>
<SelectableTextBlock Grid.Row="11" Grid.Column="0">Delete</SelectableTextBlock>
<SelectableTextBlock Grid.Row="2" Grid.Column="1">Text</SelectableTextBlock>
<SelectableTextBlock
Grid.Row="3"
Grid.Column="1"
Classes="Secondary">
Secondary
</SelectableTextBlock>
<SelectableTextBlock
Grid.Row="4"
Grid.Column="1"
Classes="Tertiary">
Tertiary
</SelectableTextBlock>
<SelectableTextBlock
Grid.Row="5"
Grid.Column="1"
Classes="Quaternary">
Quaternary
</SelectableTextBlock>
<SelectableTextBlock
Grid.Row="6"
Grid.Column="1"
Classes="Success">
Success
</SelectableTextBlock>
<SelectableTextBlock
Grid.Row="7"
Grid.Column="1"
Classes="Warning">
Warning
</SelectableTextBlock>
<SelectableTextBlock
Grid.Row="8"
Grid.Column="1"
Classes="Danger">
Danger
</SelectableTextBlock>
<SelectableTextBlock
Grid.Row="9"
Grid.Column="1"
Classes="Mark">
Default Mark
</SelectableTextBlock>
<SelectableTextBlock
Grid.Row="10"
Grid.Column="1"
Classes="Underline">
Underline
</SelectableTextBlock>
<SelectableTextBlock
Grid.Row="11"
Grid.Column="1"
Classes="Delete">
Delete
</SelectableTextBlock>
</Grid>
</HeaderedContentControl>
<HeaderedContentControl
Width="400"
Height="400"
Margin="16"
VerticalAlignment="Top"
Header="Theme: TitleSelectableTextBlock"
Theme="{DynamicResource GroupBox}">
<Grid
VerticalAlignment="Top"
Background="{Binding}"
ColumnDefinitions="Auto, *"
RowDefinitions="*,*,*,*,*,*,*,*">
<SelectableTextBlock Grid.Row="1" Grid.Column="0">Classes</SelectableTextBlock>
<SelectableTextBlock Grid.Row="2" Grid.Column="0">H1</SelectableTextBlock>
<SelectableTextBlock Grid.Row="3" Grid.Column="0">H2</SelectableTextBlock>
<SelectableTextBlock Grid.Row="4" Grid.Column="0">H3</SelectableTextBlock>
<SelectableTextBlock Grid.Row="5" Grid.Column="0">H4</SelectableTextBlock>
<SelectableTextBlock Grid.Row="6" Grid.Column="0">H5</SelectableTextBlock>
<SelectableTextBlock Grid.Row="7" Grid.Column="0">H6</SelectableTextBlock>
<SelectableTextBlock
Grid.Row="2"
Grid.Column="1"
Classes="H1"
Theme="{StaticResource TitleSelectableTextBlock}">
Header 1
</SelectableTextBlock>
<SelectableTextBlock
Grid.Row="3"
Grid.Column="1"
Classes="H2"
Theme="{StaticResource TitleSelectableTextBlock}">
Header 2
</SelectableTextBlock>
<SelectableTextBlock
Grid.Row="4"
Grid.Column="1"
Classes="H3"
Theme="{StaticResource TitleSelectableTextBlock}">
Header 3
</SelectableTextBlock>
<SelectableTextBlock
Grid.Row="5"
Grid.Column="1"
Classes="H4"
Theme="{StaticResource TitleSelectableTextBlock}">
Header 4
</SelectableTextBlock>
<SelectableTextBlock
Grid.Row="6"
Grid.Column="1"
Classes="H5"
Theme="{StaticResource TitleSelectableTextBlock}">
Header 5
</SelectableTextBlock>
<SelectableTextBlock
Grid.Row="7"
Grid.Column="1"
Classes="H6"
Theme="{StaticResource TitleSelectableTextBlock}">
Header 6
</SelectableTextBlock>
</Grid>
</HeaderedContentControl>
</StackPanel>
</ScrollViewer>
</UserControl>
@@ -0,0 +1,18 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
namespace Semi.Avalonia.Demo.Pages;
public partial class SelectableTextBlockDemo : UserControl
{
public SelectableTextBlockDemo()
{
InitializeComponent();
}
private void InitializeComponent()
{
AvaloniaXamlLoader.Load(this);
}
}
+164 -117
View File
@@ -4,147 +4,194 @@
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"
d:DesignHeight="450"
xmlns:pages="clr-namespace:Semi.Avalonia.Demo.Pages"
d:DesignHeight="1000"
d:DesignWidth="800"
mc:Ignorable="d">
<Design.DataContext>
<pages:SplitViewDemoViewModel />
</Design.DataContext>
<UserControl.Resources>
<ResourceDictionary>
<StreamGeometry x:Key="NavigationMenuExpandIconGlyph">M5 2H19C20.6569 2 22 3.34315 22 5V19C22 20.6569 20.6569 22 19 22H5C3.34315 22 2 20.6569 2 19V5C2 3.34315 3.34315 2 5 2ZM6 4C5.44772 4 5 4.44772 5 5V19C5 19.5523 5.44772 20 6 20H9C9.55229 20 10 19.5523 10 19V5C10 4.44772 9.55229 4 9 4H6Z</StreamGeometry>
</ResourceDictionary>
</UserControl.Resources>
<Border>
<Grid ColumnDefinitions="*,400">
<StackPanel
Grid.Column="1"
Orientation="Vertical"
Spacing="4">
<ToggleButton
Name="PaneOpenButton"
Content="IsPaneOpen"
IsChecked="{Binding IsPaneOpen, ElementName=SplitView}" />
<Border Grid.Column="1" VerticalAlignment="Top" Margin="10 0 0 0">
<Grid RowDefinitions="*, *, *, *, *, *" ColumnDefinitions="Auto, *">
<Label
Grid.Row="0" Grid.Column="0"
VerticalAlignment="Center"
Content="IsPaneOpen" />
<ToggleSwitch
Grid.Row="0" Grid.Column="1"
Name="PaneOpenButton"
IsChecked="{Binding #SplitView.IsPaneOpen}" />
<ToggleButton
Name="UseLightDismissOverlayModeButton"
Content="UseLightDismissOverlayMode"
IsChecked="{Binding UseLightDismissOverlayMode, ElementName=SplitView}" />
<Label
Grid.Row="1" Grid.Column="0"
VerticalAlignment="Center"
Content="UseLightDismissOverlayMode" />
<ToggleSwitch
Grid.Row="1" Grid.Column="1"
Name="UseLightDismissOverlayModeButton"
IsChecked="{Binding #SplitView.UseLightDismissOverlayMode}" />
<ToggleSwitch
Content="Placement"
OffContent="Left"
OnContent="Right" />
<Label
Grid.Row="2" Grid.Column="0"
VerticalAlignment="Center"
Content="Placement" />
<ToggleSwitch
Grid.Row="2" Grid.Column="1"
OffContent="Left"
OnContent="Right"
IsChecked="{Binding #SplitView.PanePlacement}" />
<TextBlock Text="DisplayMode" />
<ComboBox
Name="DisplayModeSelector"
Width="170"
Margin="10"
SelectedIndex="{Binding DisplayMode}">
<ComboBoxItem>Inline</ComboBoxItem>
<ComboBoxItem>CompactInline</ComboBoxItem>
<ComboBoxItem>Overlay</ComboBoxItem>
<ComboBoxItem>CompactOverlay</ComboBoxItem>
</ComboBox>
<Label
Grid.Row="3" Grid.Column="0"
VerticalAlignment="Center"
Content="DisplayMode" />
<ComboBox
Grid.Row="3" Grid.Column="1"
Name="DisplayModeSelector"
HorizontalAlignment="Stretch"
ItemsSource="{Binding DisplayModes}"
SelectedIndex="{Binding #SplitView.DisplayMode}" />
<TextBlock Text="PaneBackground" />
<ComboBox
Name="PaneBackgroundSelector"
Width="170"
Margin="10"
SelectedIndex="0">
<ComboBoxItem Tag="White">White</ComboBoxItem>
<ComboBoxItem Tag="Red">Red</ComboBoxItem>
<ComboBoxItem Tag="Blue">Blue</ComboBoxItem>
<ComboBoxItem Tag="Green">Green</ComboBoxItem>
</ComboBox>
<Label
Grid.Row="4" Grid.Column="0"
VerticalAlignment="Center"
Content="{Binding #CompactPaneLengthSlider.Value, StringFormat='{}CompactPaneLength: {0}'}" />
<Slider
Grid.Row="4" Grid.Column="1"
Name="CompactPaneLengthSlider"
Maximum="128"
Minimum="0"
TickFrequency="1"
IsSnapToTickEnabled="True"
Value="{Binding #SplitView.CompactPaneLength}" />
<TextBlock Text="{Binding Value, ElementName=OpenPaneLengthSlider, StringFormat='{}OpenPaneLength: {0}'}" />
<Slider
Name="OpenPaneLengthSlider"
Width="150"
Maximum="500"
Minimum="128"
Value="256" />
<TextBlock Text="{Binding Value, ElementName=CompactPaneLengthSlider, StringFormat='{}CompactPaneLength: {0}'}" />
<Slider
Name="CompactPaneLengthSlider"
Width="150"
Maximum="128"
Minimum="24"
Value="48" />
</StackPanel>
<Border BorderBrush="{DynamicResource SystemControlHighlightBaseLowBrush}" BorderThickness="1">
<!-- {Binding SelectedItem.Tag, ElementName=PaneBackgroundSelector} -->
<Label
Grid.Row="5" Grid.Column="0"
VerticalAlignment="Center"
Content="{Binding #OpenPaneLengthSlider.Value,StringFormat='{}OpenPaneLength: {0}'}" />
<Slider
Grid.Row="5" Grid.Column="1"
Name="OpenPaneLengthSlider"
Maximum="500"
Minimum="128"
TickFrequency="1"
IsSnapToTickEnabled="True"
Value="{Binding #SplitView.OpenPaneLength}" />
</Grid>
</Border>
<Border
Grid.Column="0"
BorderBrush="{DynamicResource SemiGrey1}"
BorderThickness="1">
<SplitView
Name="SplitView"
CompactPaneLength="{Binding Value, ElementName=CompactPaneLengthSlider}"
DisplayMode="CompactOverlay"
OpenPaneLength="{Binding Value, ElementName=OpenPaneLengthSlider}"
PaneBackground="{Binding SelectedItem.Tag, ElementName=PaneBackgroundSelector}"
PanePlacement="{Binding PanePlacement}">
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,*,Auto">
<Grid RowDefinitions="Auto,*,Auto">
<TextBlock
Grid.Row="0"
Name="PaneHeader"
Margin="5,12,0,0"
Margin="8,12"
FontWeight="Bold"
Text="PANE CONTENT" />
<ComboBox Grid.Row="1" Width="150">
<ComboBoxItem Content="Item1" />
<ComboBoxItem Content="Item2" />
<ComboBoxItem Content="Item3" />
</ComboBox>
<ListBoxItem
Text="Playlist" />
<ListBox
Grid.Row="1"
ItemsSource="{Binding Songs}" />
<ToggleSwitch
Grid.Row="2"
Margin="0,10"
VerticalAlignment="Top">
<StackPanel Orientation="Horizontal">
<!-- Path glyph from materialdesignicons.com -->
<Border Width="48">
<Viewbox
Width="24"
Height="24"
HorizontalAlignment="Left">
<Canvas Width="24" Height="24">
<Path Data="M16 17V19H2V17S2 13 9 13 16 17 16 17M12.5 7.5A3.5 3.5 0 1 0 9 11A3.5 3.5 0 0 0 12.5 7.5M15.94 13A5.32 5.32 0 0 1 18 17V19H22V17S22 13.37 15.94 13M15 4A3.39 3.39 0 0 0 13.07 4.59A5 5 0 0 1 13.07 10.41A3.39 3.39 0 0 0 15 11A3.5 3.5 0 0 0 15 4Z" Fill="{DynamicResource SystemControlForegroundBaseHighBrush}" />
</Canvas>
</Viewbox>
</Border>
<TextBlock VerticalAlignment="Center" Text="People" />
</StackPanel>
</ListBoxItem>
<TextBlock
Grid.Row="3"
Margin="60,12"
Text="Item at bottom" />
Theme="{DynamicResource ButtonToggleSwitch}"
IsChecked="{Binding #SplitView.IsPaneOpen}">
<ToggleSwitch.OnContent>
<PathIcon
Width="16"
Height="16"
Data="{StaticResource NavigationMenuExpandIconGlyph}" />
</ToggleSwitch.OnContent>
<ToggleSwitch.OffContent>
<PathIcon
Width="16"
Height="16"
Data="{StaticResource NavigationMenuExpandIconGlyph}" />
</ToggleSwitch.OffContent>
</ToggleSwitch>
</Grid>
</SplitView.Pane>
<Grid>
<Grid.Styles>
<Style Selector="TextBlock">
<Setter Property="FontSize" Value="14" />
<Setter Property="FontWeight" Value="700" />
<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>
</Grid.Styles>
<TextBlock
HorizontalAlignment="Center"
VerticalAlignment="Center"
Text="SplitViewContent" />
<TextBlock Text="SplitViewContent" TextAlignment="Left" />
<TextBlock
HorizontalAlignment="Right"
Text="SplitViewContent"
TextAlignment="Left" />
<TextBlock
VerticalAlignment="Bottom"
Text="SplitViewContent"
TextAlignment="Left" />
<TextBlock
HorizontalAlignment="Right"
VerticalAlignment="Bottom"
Text="SplitViewContent"
TextAlignment="Left" />
</Grid>
</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>
</Grid>
</Border>
</UserControl>
</UserControl>
@@ -1,6 +1,7 @@
using Avalonia;
using System.Collections.ObjectModel;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
using CommunityToolkit.Mvvm.ComponentModel;
namespace Semi.Avalonia.Demo.Pages;
@@ -9,10 +10,35 @@ public partial class SplitViewDemo : UserControl
public SplitViewDemo()
{
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,
];
}
@@ -4,63 +4,92 @@
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;assembly=Semi.Avalonia.Demo"
d:DesignHeight="450"
d:DesignWidth="800"
x:CompileBindings="True"
x:DataType="vm:TabControlDemoViewModel"
mc:Ignorable="d">
<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>
</StackPanel>
<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}" />
</Border>
</StackPanel>
</ScrollViewer>
</UserControl>
@@ -1,6 +1,7 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
using Semi.Avalonia.Demo.ViewModels;
namespace Semi.Avalonia.Demo.Pages;
@@ -9,5 +10,6 @@ public partial class TabControlDemo : UserControl
public TabControlDemo()
{
InitializeComponent();
this.DataContext = new TabControlDemoViewModel();
}
}
+150 -75
View File
@@ -7,82 +7,157 @@
d:DesignHeight="600"
d:DesignWidth="800"
mc:Ignorable="d">
<StackPanel Orientation="Horizontal">
<StackPanel
Margin="20"
HorizontalAlignment="Left"
Spacing="5">
<TextBlock>Styles for TextBlock</TextBlock>
<TextBlock Classes="H1" Theme="{StaticResource TitleTextBlock}">Header 1</TextBlock>
<TextBlock Classes="H2" Theme="{StaticResource TitleTextBlock}">Header 1</TextBlock>
<TextBlock Classes="H3" Theme="{StaticResource TitleTextBlock}">Header 1</TextBlock>
<TextBlock Classes="H4" Theme="{StaticResource TitleTextBlock}">Header 1</TextBlock>
<TextBlock Classes="H5" Theme="{StaticResource TitleTextBlock}">Header 1</TextBlock>
<TextBlock Classes="H6" Theme="{StaticResource TitleTextBlock}">Header 1</TextBlock>
<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
<StackPanel Orientation="Horizontal">
<StackPanel.Styles>
<Style Selector="TextBlock">
<Setter Property="VerticalAlignment" Value="Center" />
<Setter Property="Margin" Value="4" />
</Style>
</StackPanel.Styles>
<HeaderedContentControl
Width="400"
Height="400"
Margin="16"
VerticalAlignment="Top"
Header="Default Theme"
Theme="{DynamicResource GroupBox}">
<Grid
VerticalAlignment="Top"
ColumnDefinitions="Auto, *"
RowDefinitions="*,*,*,*,*,*,*,*,*,*,*,*">
<TextBlock Grid.Row="1" Grid.Column="0">Classes</TextBlock>
<TextBlock Grid.Row="2" Grid.Column="0">-</TextBlock>
<TextBlock Grid.Row="3" Grid.Column="0">Secondary</TextBlock>
<TextBlock Grid.Row="4" Grid.Column="0">Tertiary</TextBlock>
<TextBlock Grid.Row="5" Grid.Column="0">Quaternary</TextBlock>
<TextBlock Grid.Row="6" Grid.Column="0">Success</TextBlock>
<TextBlock Grid.Row="7" Grid.Column="0">Warning</TextBlock>
<TextBlock Grid.Row="8" Grid.Column="0">Danger</TextBlock>
<TextBlock Grid.Row="9" Grid.Column="0">Mark</TextBlock>
<TextBlock Grid.Row="10" Grid.Column="0">Underline</TextBlock>
<TextBlock Grid.Row="11" Grid.Column="0">Delete</TextBlock>
<TextBlock>Text</TextBlock>
<TextBlock Classes="Secondary">Secondary</TextBlock>
<TextBlock Classes="Tertiary">Tertiary</TextBlock>
<TextBlock Classes="Quaternary">Quaternary</TextBlock>
<TextBlock Classes="Warning">Warning</TextBlock>
<TextBlock Classes="Warning" IsEnabled="False">Warning disabled</TextBlock>
<TextBlock Classes="Danger">Danger</TextBlock>
<TextBlock Classes="Success">Success</TextBlock>
<TextBlock IsEnabled="False">Disabled</TextBlock>
<TextBlock Classes="Mark">Default Mark</TextBlock>
<TextBlock Classes="Underline">Underline</TextBlock>
<TextBlock Classes="Delete">Delete</TextBlock>
<TextBlock Classes="Underline Delete">Underline and Delete</TextBlock>
</StackPanel>
<StackPanel
Margin="20"
HorizontalAlignment="Left"
Spacing="5">
<TextBlock>Styles for SelectableTextBlock</TextBlock>
<SelectableTextBlock Classes="H1" Theme="{StaticResource TitleSelectableTextBlock}">Header 1</SelectableTextBlock>
<SelectableTextBlock Classes="H2" Theme="{StaticResource TitleSelectableTextBlock}">Header 1</SelectableTextBlock>
<SelectableTextBlock Classes="H3" Theme="{StaticResource TitleSelectableTextBlock}">Header 1</SelectableTextBlock>
<SelectableTextBlock Classes="H4" Theme="{StaticResource TitleSelectableTextBlock}">Header 1</SelectableTextBlock>
<SelectableTextBlock Classes="H5" Theme="{StaticResource TitleSelectableTextBlock}">Header 1</SelectableTextBlock>
<SelectableTextBlock Classes="H6" Theme="{StaticResource TitleSelectableTextBlock}">Header 1</SelectableTextBlock>
<TextBlock Grid.Row="2" Grid.Column="1">Text</TextBlock>
<TextBlock
Grid.Row="3"
Grid.Column="1"
Classes="Secondary">
Secondary
</TextBlock>
<TextBlock
Grid.Row="4"
Grid.Column="1"
Classes="Tertiary">
Tertiary
</TextBlock>
<TextBlock
Grid.Row="5"
Grid.Column="1"
Classes="Quaternary">
Quaternary
</TextBlock>
<TextBlock
Grid.Row="6"
Grid.Column="1"
Classes="Success">
Success
</TextBlock>
<TextBlock
Grid.Row="7"
Grid.Column="1"
Classes="Warning">
Warning
</TextBlock>
<TextBlock
Grid.Row="8"
Grid.Column="1"
Classes="Danger">
Danger
</TextBlock>
<TextBlock
Grid.Row="9"
Grid.Column="1"
Classes="Mark">
Default Mark
</TextBlock>
<TextBlock
Grid.Row="10"
Grid.Column="1"
Classes="Underline">
Underline
</TextBlock>
<TextBlock
Grid.Row="11"
Grid.Column="1"
Classes="Delete">
Delete
</TextBlock>
</Grid>
</HeaderedContentControl>
<HeaderedContentControl
Width="400"
Height="400"
Margin="16"
VerticalAlignment="Top"
Header="Theme: TitleTextBlock"
Theme="{DynamicResource GroupBox}">
<Grid
VerticalAlignment="Top"
ColumnDefinitions="Auto, *"
RowDefinitions="*,*,*,*,*,*,*,*">
<TextBlock Grid.Row="1" Grid.Column="0">Classes</TextBlock>
<TextBlock Grid.Row="2" Grid.Column="0">H1</TextBlock>
<TextBlock Grid.Row="3" Grid.Column="0">H2</TextBlock>
<TextBlock Grid.Row="4" Grid.Column="0">H3</TextBlock>
<TextBlock Grid.Row="5" Grid.Column="0">H4</TextBlock>
<TextBlock Grid.Row="6" Grid.Column="0">H5</TextBlock>
<TextBlock Grid.Row="7" Grid.Column="0">H6</TextBlock>
<TextBlock
Grid.Row="2"
Grid.Column="1"
Classes="H1"
Theme="{StaticResource TitleTextBlock}">
Header 1
</TextBlock>
<TextBlock
Grid.Row="3"
Grid.Column="1"
Classes="H2"
Theme="{StaticResource TitleTextBlock}">
Header 2
</TextBlock>
<TextBlock
Grid.Row="4"
Grid.Column="1"
Classes="H3"
Theme="{StaticResource TitleTextBlock}">
Header 3
</TextBlock>
<TextBlock
Grid.Row="5"
Grid.Column="1"
Classes="H4"
Theme="{StaticResource TitleTextBlock}">
Header 4
</TextBlock>
<TextBlock
Grid.Row="6"
Grid.Column="1"
Classes="H5"
Theme="{StaticResource TitleTextBlock}">
Header 5
</TextBlock>
<TextBlock
Grid.Row="7"
Grid.Column="1"
Classes="H6"
Theme="{StaticResource TitleTextBlock}">
Header 6
</TextBlock>
</Grid>
<SelectableTextBlock>Text</SelectableTextBlock>
<SelectableTextBlock Classes="Secondary">Secondary</SelectableTextBlock>
<SelectableTextBlock Classes="Tertiary">Tertiary</SelectableTextBlock>
<SelectableTextBlock Classes="Quaternary">Quaternary</SelectableTextBlock>
<SelectableTextBlock Classes="Warning">Warning</SelectableTextBlock>
<SelectableTextBlock Classes="Warning" IsEnabled="False">Warning disabled</SelectableTextBlock>
<SelectableTextBlock Classes="Danger">Danger</SelectableTextBlock>
<SelectableTextBlock Classes="Success">Success</SelectableTextBlock>
<SelectableTextBlock IsEnabled="False">Disabled</SelectableTextBlock>
<SelectableTextBlock Classes="Mark">Default Mark</SelectableTextBlock>
<SelectableTextBlock Classes="Underline">Underline</SelectableTextBlock>
<SelectableTextBlock Classes="Delete">Delete</SelectableTextBlock>
<SelectableTextBlock Classes="Underline Delete">Underline and Delete</SelectableTextBlock>
</HeaderedContentControl>
</StackPanel>
<StackPanel
Margin="20"
HorizontalAlignment="Left"
Spacing="5">
<TextBlock>Styles for Label</TextBlock>
<Label Classes="H1" Theme="{StaticResource TitleLabel}">Header 1</Label>
<Label Classes="H2" Theme="{StaticResource TitleLabel}">Header 1</Label>
<Label Classes="H3" Theme="{StaticResource TitleLabel}">Header 1</Label>
<Label Classes="H4" Theme="{StaticResource TitleLabel}">Header 1</Label>
<Label Classes="H5" Theme="{StaticResource TitleLabel}">Header 1</Label>
<Label Classes="H6" Theme="{StaticResource TitleLabel}">Header 1</Label>
<Label>Text</Label>
<Label Classes="Secondary">Secondary</Label>
<Label Classes="Tertiary">Tertiary</Label>
<Label Classes="Quaternary">Quaternary</Label>
<Label Classes="Warning">Warning</Label>
<Label Classes="Warning" IsEnabled="False">Warning disabled</Label>
<Label Classes="Danger">Danger</Label>
<Label Classes="Success">Success</Label>
<Label IsEnabled="False">Disabled</Label>
<Label Classes="Mark">Default Mark</Label>
<Label Classes="Code">Example Code</Label>
</StackPanel>
</StackPanel>
</ScrollViewer>
</UserControl>
@@ -4,7 +4,8 @@
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"
d:DesignHeight="450"
xmlns:system="clr-namespace:System;assembly=netstandard"
d:DesignHeight="800"
d:DesignWidth="800"
mc:Ignorable="d">
<ScrollViewer>
@@ -41,6 +42,41 @@
InnerLeftContent="http://"
InnerRightContent=".com"
IsEnabled="False" />
<StackPanel Orientation="Horizontal">
<TextBox
Width="150"
Classes="Large"
Watermark="Large" />
<TextBox
Width="150"
Watermark="Default" />
<TextBox
Width="150"
Classes="Small"
Watermark="Small" />
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBox
Width="150"
IsEnabled="False"
Watermark="Disabled" />
<TextBox
Width="150"
Classes="Bordered"
Watermark="Bordered" />
<TextBox
Width="150"
Classes="Bordered"
IsEnabled="False" />
</StackPanel>
<TextBox Width="300" Classes="TextArea" />
<TextBox
Width="300"
Theme="{StaticResource LooklessTextBox}"
Watermark="Lookless TextBox"
InnerLeftContent="http://"
InnerRightContent=".com" />
</StackPanel>
</ScrollViewer>
</UserControl>
@@ -8,7 +8,6 @@ namespace Semi.Avalonia.Demo.Pages;
public partial class ThemeVariantDemo : UserControl
{
private ThemeVariant _variant = ThemeVariant.Default;
public ThemeVariantDemo()
{
InitializeComponent();
@@ -16,15 +15,6 @@ public partial class ThemeVariantDemo : UserControl
private void Switch_OnIsCheckedChanged(object sender, RoutedEventArgs e)
{
if (_variant == ThemeVariant.Dark)
{
scope.RequestedThemeVariant = ThemeVariant.Default;
_variant = ThemeVariant.Default;
}
else
{
scope.RequestedThemeVariant = ThemeVariant.Dark;
_variant = ThemeVariant.Dark;
}
scope.RequestedThemeVariant = scope.ActualThemeVariant == ThemeVariant.Dark ? ThemeVariant.Light : ThemeVariant.Dark;
}
}
@@ -9,10 +9,22 @@
mc:Ignorable="d">
<StackPanel Spacing="20">
<TimePicker />
<TimePicker Classes="ClearButton" />
<TimePicker MinuteIncrement="15" />
<TimePicker ClockIdentifier="24HourClock" />
<TimePicker ClockIdentifier="12HourClock" IsEnabled="False" />
<TimePicker Classes="Large" />
<TimePicker Classes="Small" />
<StackPanel Orientation="Horizontal">
<TimePicker Classes="Large" ClockIdentifier="12HourClock"/>
<TimePicker ClockIdentifier="12HourClock"/>
<TimePicker Classes="Small" ClockIdentifier="12HourClock"/>
</StackPanel>
<StackPanel Orientation="Horizontal">
<TimePicker IsEnabled="False" />
<TimePicker Classes="Bordered" />
<TimePicker Classes="Bordered" IsEnabled="False" />
</StackPanel>
</StackPanel>
</UserControl>
@@ -7,23 +7,85 @@
d:DesignHeight="450"
d:DesignWidth="800"
mc:Ignorable="d">
<StackPanel>
<TextBlock Text="Toggle Button" />
<StackPanel Spacing="20">
<TextBlock Text="Toggle Button (Default)" />
<StackPanel Orientation="Horizontal" Spacing="20">
<ToggleButton>Primary</ToggleButton>
<ToggleButton>Default</ToggleButton>
<ToggleButton Classes="Primary">Primary</ToggleButton>
<ToggleButton Classes="Secondary">Secondary</ToggleButton>
<ToggleButton Classes="Tertiary">Tertiary</ToggleButton>
<ToggleButton Classes="Success">Success</ToggleButton>
<ToggleButton Classes="Warning">Warning</ToggleButton>
<ToggleButton Classes="Error">Error</ToggleButton>
<ToggleButton Classes="Danger">Danger</ToggleButton>
<ToggleButton Classes="Danger" IsEnabled="False">Disabled</ToggleButton>
</StackPanel>
<TextBlock Margin="0,20,0,0" Text="Toggle Button Three State" />
<TextBlock Text="Toggle Button Checked State" />
<StackPanel Orientation="Horizontal" Spacing="20">
<ToggleButton Name="button" IsThreeState="True">Primary</ToggleButton>
<ToggleButton Classes="Secondary" IsThreeState="True">Secondary</ToggleButton>
<ToggleButton Classes="Tertiary" IsThreeState="True">Tertiary</ToggleButton>
<ToggleButton Classes="Warning" IsThreeState="True">Warning</ToggleButton>
<ToggleButton Classes="Error" IsThreeState="True">Error</ToggleButton>
<ToggleButton IsChecked="True">Default</ToggleButton>
<ToggleButton Classes="Primary" IsChecked="True">Primary</ToggleButton>
<ToggleButton Classes="Secondary" IsChecked="True">Secondary</ToggleButton>
<ToggleButton Classes="Tertiary" IsChecked="True">Tertiary</ToggleButton>
<ToggleButton Classes="Success" IsChecked="True">Success</ToggleButton>
<ToggleButton Classes="Warning" IsChecked="True">Warning</ToggleButton>
<ToggleButton Classes="Danger" IsChecked="True">Danger</ToggleButton>
<ToggleButton
Classes="Danger"
IsChecked="True"
IsEnabled="False">
Disabled
</ToggleButton>
</StackPanel>
<TextBlock Text="Toggle Button Three State" />
<StackPanel Orientation="Horizontal" Spacing="20">
<ToggleButton IsChecked="{x:Null}" IsThreeState="True">Default</ToggleButton>
<ToggleButton
Classes="Primary"
IsChecked="{x:Null}"
IsThreeState="True">
Primary
</ToggleButton>
<ToggleButton
Classes="Secondary"
IsChecked="{x:Null}"
IsThreeState="True">
Secondary
</ToggleButton>
<ToggleButton
Classes="Tertiary"
IsChecked="{x:Null}"
IsThreeState="True">
Tertiary
</ToggleButton>
<ToggleButton
Classes="Success"
IsChecked="{x:Null}"
IsThreeState="True">
Success
</ToggleButton>
<ToggleButton
Classes="Warning"
IsChecked="{x:Null}"
IsThreeState="True">
Warning
</ToggleButton>
<ToggleButton
Classes="Danger"
IsChecked="{x:Null}"
IsThreeState="True">
Danger
</ToggleButton>
<ToggleButton
Classes="Danger"
IsChecked="{x:Null}"
IsEnabled="False"
IsThreeState="True">
Disabled
</ToggleButton>
</StackPanel>
<StackPanel Orientation="Horizontal">
<ToggleButton Classes="Small" IsThreeState="True">Small</ToggleButton>
<ToggleButton IsThreeState="True">Default</ToggleButton>
<ToggleButton Classes="Large" IsThreeState="True">Large</ToggleButton>
</StackPanel>
</StackPanel>
</UserControl>
</UserControl>
@@ -11,7 +11,8 @@
<Border
Margin="5"
Padding="50,10"
Background="Yellow"
Classes="Hover"
Theme="{StaticResource CardBorder}"
ToolTip.Tip="This is a ToolTip">
<TextBlock>Hover Here</TextBlock>
</Border>
@@ -23,7 +24,8 @@
Name="Border"
Margin="5"
Padding="50,10"
Background="Yellow"
Classes="Hover"
Theme="{StaticResource CardBorder}"
ToolTip.Placement="Bottom">
<ToolTip.Tip>
<StackPanel>
@@ -36,7 +38,8 @@
<Border
Margin="5"
Padding="50,10"
Background="Yellow"
Classes="Hover"
Theme="{StaticResource CardBorder}"
ToolTip.Placement="Top"
ToolTip.Tip="Hello">
<Border.Styles>
@@ -60,7 +63,8 @@
<Border
Margin="5"
Padding="50,10"
Background="Yellow"
Classes="Hover"
Theme="{StaticResource CardBorder}"
ToolTip.Placement="Top"
ToolTip.Tip="Hello">
<TextBlock>Top</TextBlock>
@@ -68,7 +72,8 @@
<Border
Margin="5"
Padding="50,10"
Background="Yellow"
Classes="Hover"
Theme="{StaticResource CardBorder}"
ToolTip.Placement="Left"
ToolTip.Tip="Hello">
<TextBlock>Left</TextBlock>
@@ -76,7 +81,8 @@
<Border
Margin="5"
Padding="50,10"
Background="Yellow"
Classes="Hover"
Theme="{StaticResource CardBorder}"
ToolTip.Placement="Right"
ToolTip.Tip="Hello">
<TextBlock>Right</TextBlock>
@@ -84,10 +90,11 @@
<Border
Margin="5"
Padding="50,10"
Background="Yellow"
Classes="Hover"
Theme="{StaticResource CardBorder}"
ToolTip.Placement="Bottom"
ToolTip.Tip="Hello">
<TextBlock>Bottom</TextBlock>
</Border>
</StackPanel>
</UserControl>
</UserControl>
@@ -1,42 +1,82 @@
<UserControl
x:Class="Semi.Avalonia.Demo.Pages.TreeViewDemo" 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" d:DesignHeight="450"
d:DesignWidth="800" mc:Ignorable="d">
<Panel>
<TreeView>
<TreeViewItem Header="Level 1">
<TreeViewItem Header="Level 2" />
<TreeViewItem Header="Level 2" />
<TreeViewItem Header="Level 2" />
<TreeViewItem Header="Level 2" />
<TreeViewItem Header="Level 2">
<TreeViewItem Header="Level 3" />
<TreeViewItem Header="Level 3" />
<TreeViewItem>
<TreeViewItem.Header>
<StackPanel>
<TextBlock>Layer 1</TextBlock>
<TextBlock>Layer 2</TextBlock>
<TextBlock>Layer 3</TextBlock>
</StackPanel>
</TreeViewItem.Header>
<TreeViewItem Header="Level 4" />
<TreeViewItem Header="Level 4" />
<TreeViewItem Header="Level 4" />
<TreeViewItem Header="Level 4" />
<TreeViewItem Header="Level 4" />
<TreeViewItem Header="Level 4" />
x:Class="Semi.Avalonia.Demo.Pages.TreeViewDemo"
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:models="using:Semi.Avalonia.Demo.Pages"
xmlns:vm="clr-namespace:Semi.Avalonia.Demo.Pages"
d:DesignHeight="450"
d:DesignWidth="800"
x:CompileBindings="True"
x:DataType="vm:TreeViewVm"
mc:Ignorable="d">
<Grid ColumnDefinitions="*,*,*">
<Border Theme="{StaticResource CardBorder}">
<TreeView>
<TreeViewItem Header="Level 1">
<TreeViewItem Header="Level 2" />
<TreeViewItem Header="Level 2" />
<TreeViewItem Header="Level 2" />
<TreeViewItem Header="Level 2" />
<TreeViewItem Header="Level 2">
<TreeViewItem Header="Level 3" />
<TreeViewItem Header="Level 3" />
<TreeViewItem>
<TreeViewItem.Header>
<StackPanel>
<TextBlock>Layer 1</TextBlock>
<TextBlock>Layer 2</TextBlock>
<TextBlock>Layer 3</TextBlock>
</StackPanel>
</TreeViewItem.Header>
<TreeViewItem Header="Level 4" />
<TreeViewItem Header="Level 4" />
<TreeViewItem Header="Level 4" />
<TreeViewItem Header="Level 4" />
<TreeViewItem Header="Level 4" />
<TreeViewItem Header="Level 4" />
</TreeViewItem>
<TreeViewItem Header="Level 3" />
<TreeViewItem Header="Level 3" />
<TreeViewItem Header="Level 3" />
<TreeViewItem Header="Level 3" />
<TreeViewItem Header="Level 3" />
<TreeViewItem Header="Level 3" />
<TreeViewItem Header="Level 3" />
</TreeViewItem>
<TreeViewItem Header="Level 3" />
<TreeViewItem Header="Level 3" />
<TreeViewItem Header="Level 3" />
<TreeViewItem Header="Level 3" />
<TreeViewItem Header="Level 3" />
<TreeViewItem Header="Level 3" />
<TreeViewItem Header="Level 3" />
</TreeViewItem>
</TreeViewItem>
</TreeView>
</Panel>
</TreeView>
</Border>
<Border Grid.Column="1" Theme="{StaticResource CardBorder}">
<TreeView Margin="0,10" ItemsSource="{Binding Items}">
<TreeView.ItemTemplate>
<TreeDataTemplate ItemsSource="{Binding Items}">
<TextBlock Text="{Binding Name}" />
</TreeDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
</Border>
<Border Grid.Column="2" Theme="{StaticResource CardBorder}">
<TreeView ItemsSource="{Binding MultipleLevelItems}">
<TreeView.DataTemplates>
<TreeDataTemplate DataType="models:FirstItem" ItemsSource="{Binding SecondItems}">
<TextBlock Text="{Binding Name}" />
</TreeDataTemplate>
<TreeDataTemplate DataType="models:SecondItem" ItemsSource="{Binding ThirdItemItems}">
<TextBlock Text="{Binding Name}" />
</TreeDataTemplate>
<TreeDataTemplate DataType="models:ThirdItem">
<TextBlock Text="{Binding Name}" />
</TreeDataTemplate>
</TreeView.DataTemplates>
</TreeView>
</Border>
</Grid>
</UserControl>
@@ -1,6 +1,8 @@
using System.Collections.ObjectModel;
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
using CommunityToolkit.Mvvm.ComponentModel;
namespace Semi.Avalonia.Demo.Pages;
@@ -9,5 +11,76 @@ public partial class TreeViewDemo : UserControl
public TreeViewDemo()
{
InitializeComponent();
this.DataContext = new TreeViewVm();
}
}
}
public class TreeViewVm : ObservableObject
{
public ObservableCollection<TreeViewItemVm> Items { get; set; }
public ObservableCollection<FirstItem>? MultipleLevelItems { get; set; }
public TreeViewVm()
{
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 3.1", Id = "3.1"},
new TreeViewItemVm() {Name = "Item 3.2", Id = "3.2"},
new TreeViewItemVm() {Name = "Item 3.3", Id = "3.3"},
},
},
};
MultipleLevelItems = new();
for (int i = 1; i < 6; i++)
{
FirstItem firstItem = new FirstItem { Id = i, Name = $"FirstItem {i}" };
firstItem.SecondItems = new();
for (int j = 1; j < 6; j++)
{
SecondItem secondItem = new SecondItem { Id = j, Name = $"SecondItem {j}" };
secondItem.ThirdItemItems = new();
for (int k = 1; k < 6; k++)
{
ThirdItem thirdItem = new ThirdItem { Id = k, Name = $"ThirdItem {k}" };
secondItem.ThirdItemItems.Add(thirdItem);
}
firstItem.SecondItems.Add(secondItem);
}
MultipleLevelItems.Add(firstItem);
}
}
}
public partial class TreeViewItemVm : ObservableObject
{
public ObservableCollection<TreeViewItemVm> Items { get; set; }
public string Name { get; set; }
public string Id { get; set; }
}
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
{
}
@@ -4,42 +4,18 @@
<Nullable>enable</Nullable>
<LangVersion>latest</LangVersion>
</PropertyGroup>
<ItemGroup>
<AvaloniaResource Include="Assets\**" />
<TrimmerRootDescriptor Include="Roots.xml" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Avalonia" Version="11.0.0-preview5" />
<PackageReference Include="Avalonia.Controls.DataGrid" Version="11.0.0-preview5" />
<PackageReference Include="Avalonia" Version="$(AvaloniaVersion)" />
<PackageReference Include="Avalonia.Controls.DataGrid" Version="$(AvaloniaVersion)" />
<!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->
<PackageReference Condition="'$(Configuration)' == 'Debug'" Include="Avalonia.Diagnostics" Version="11.0.0-preview5" />
<PackageReference Condition="'$(Configuration)' == 'Debug'" Include="Avalonia.Diagnostics" Version="$(AvaloniaVersion)" />
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.1.0" />
<PackageReference Include="XamlNameReferenceGenerator" Version="1.5.1" />
</ItemGroup>
<ItemGroup>
<AdditionalFiles Include="Pages\AutoCompleteBoxDemo.axaml" />
<AdditionalFiles Include="Pages\BorderDemo.axaml" />
<AdditionalFiles Include="Pages\ButtonDemo.axaml" />
<AdditionalFiles Include="Pages\CheckBoxDemo.axaml" />
<AdditionalFiles Include="Pages\ComboBoxDemo.axaml" />
<AdditionalFiles Include="Pages\ExpanderDemo.axaml" />
<AdditionalFiles Include="Pages\FlyoutDemo.axaml" />
<AdditionalFiles Include="Pages\LabelDemo.axaml" />
<AdditionalFiles Include="Pages\ListBoxDemo.axaml" />
<AdditionalFiles Include="Pages\NotificationDemo.axaml" />
<AdditionalFiles Include="Pages\Overview.axaml" />
<AdditionalFiles Include="Pages\ProgressBarDemo.axaml" />
<AdditionalFiles Include="Pages\RadioButtonDemo.axaml" />
<AdditionalFiles Include="Pages\RepeatButtonDemo.axaml" />
<AdditionalFiles Include="Pages\TabControlDemo.axaml" />
<AdditionalFiles Include="Pages\TextBlockDemo.axaml" />
<AdditionalFiles Include="Pages\TextBoxDemo.axaml" />
<AdditionalFiles Include="Pages\ToggleButtonDemo.axaml" />
<AdditionalFiles Include="Pages\ToggleSwitchDemo.axaml" />
<AdditionalFiles Include="Pages\TreeViewDemo.axaml" />
</ItemGroup>
<ItemGroup>
+3 -3
View File
@@ -36,9 +36,9 @@
</ControlTemplate>
</Setter>
<Style Selector="^[TabStripPlacement=Left] /template/ Border#PART_BorderSeparator">
<Setter Property="Border.Width" Value="1" />
<Setter Property="Border.VerticalAlignment" Value="Stretch" />
<Setter Property="Border.HorizontalAlignment" Value="Left" />
<Setter Property="Width" Value="1" />
<Setter Property="VerticalAlignment" Value="Stretch" />
<Setter Property="HorizontalAlignment" Value="Left" />
</Style>
</ControlTheme>
</ResourceDictionary>
@@ -0,0 +1,162 @@
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using Avalonia.Collections;
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
namespace Semi.Avalonia.Demo.ViewModels;
public class DataGridDemoViewModel: ObservableObject
{
public ObservableCollection<Song> GridData1 { get; set; }
public DataGridCollectionView GridData2 { get; set; }
public ObservableCollection<SongViewModel> GridData3 { get; set; }
public RelayCommand AddCommand { get; set; }
public DataGridDemoViewModel()
{
GridData1 = new ObservableCollection<Song>(Song.Songs);
GridData2 = new DataGridCollectionView(Song.Songs);
GridData2.GroupDescriptions.Add(new DataGridPathGroupDescription("Album"));
GridData3 = new ObservableCollection<SongViewModel>(Song.Songs.Take(10).Select(a=>new SongViewModel()
{
Title = a.Title,
Artist = a.Artist,
Album = a.Album,
CountOfComment = a.CountOfComment,
IsSelected = false
}));
AddCommand = new RelayCommand(Add);
}
private void Add()
{
GridData3.Add(new SongViewModel());
}
}
public class Song
{
public string? Title { get; set; }
public string? Artist { get; set; }
public TimeSpan? Duration { get; set; }
public string? Album { get; set; }
public int CountOfComment { get; set; }
public string Url { get; set; }
public Song(string title, string artist, int m, int s, string album, int countOfComment, int netEaseId)
{
Title = title;
Artist = artist;
Duration = new TimeSpan(0, m, s);
Album = album;
CountOfComment = countOfComment;
Url = $"https://music.163.com/song?id={netEaseId}";
}
public static List<Song> Songs { get; set; } = new List<Song>()
{
new("好肚有肚(feat.李玲玉)", "熊猫堂ProducePandas", 2, 50, "A.S.I.A", 730, 1487039339),
new("荒诞秀", "熊猫堂ProducePandas", 3, 15, "A.S.I.A", 639, 1487037601),
new("长大", "熊猫堂ProducePandas", 4, 6, "A.S.I.A", 1114, 1487037690),
new("招财猫(feat.纪粹希(G-Tracy))", "熊猫堂ProducePandas", 3, 37, "A.S.I.A", 361, 1487039632),
new("千转", "熊猫堂ProducePandas", 4, 0, "A.S.I.A", 1115, 1477312398),
new("辣辣辣", "熊猫堂ProducePandas", 3, 24, "A.S.I.A", 1873, 1465043716),
new("碎碎念", "熊猫堂ProducePandas", 3, 25, "A.S.I.A", 676, 1474142064),
new("盘他", "熊猫堂ProducePandas", 2, 16, "A.S.I.A", 365, 1481652786),
new("Na Na Na", "熊猫堂ProducePandas", 3, 26, "A.S.I.A", 312, 1469022662),
new("Indigo", "熊猫堂ProducePandas", 3, 15, "A.S.I.A", 137, 1487039517),
new("饕餮人间", "熊猫堂ProducePandas", 3, 20, "饕餮人间", 1295, 1499584605),
new("七步咙咚呛", "熊猫堂ProducePandas", 3, 10, "七步咙咚呛", 175, 1809095152),
new("大惊小怪", "熊猫堂ProducePandas", 3, 32, "大惊小怪", 10420, 1847477425),
new("工具人", "熊猫堂ProducePandas", 2, 46, "大惊小怪", 1135, 1847476499),
new("以梦为马", "熊猫堂ProducePandas", 4, 19, "大惊小怪", 18361, 1836034373),
new("以梦为马(Piano Version)", "熊猫堂ProducePandas", 3, 4, "大惊小怪", 570, 1847477423),
new("The ONE", "熊猫堂ProducePandas", 2, 58, "The ONE", 1508, 1864329424),
new("The ONE(日文版)", "熊猫堂ProducePandas", 2, 57, "The ONE", 385, 1864329429),
new("以梦为马 (壮志骄阳版)", "熊猫堂ProducePandas", 4, 19, "以梦为马 (壮志骄阳版)", 161, 1865138896),
new("New Horse", "熊猫堂ProducePandas", 2, 30, "emo了", 643, 1887021307),
new("不例外", "熊猫堂ProducePandas", 3, 31, "emo了", 1818, 1887022665),
new("满意", "熊猫堂ProducePandas", 4, 32, "emo了", 1081, 1882433472),
new("就算与全世界为敌也要跟你在一起", "熊猫堂ProducePandas", 3, 32, "emo了", 2119, 1881759960),
new("The ONE", "熊猫堂ProducePandas", 2, 58, "emo了", 67, 1887022648),
new("口香糖", "熊猫堂ProducePandas", 3, 10, "emo了", 2181, 1885502254),
new("Suuuuuuper Mario", "熊猫堂ProducePandas", 3, 32, "emo了", 1010, 1887021318),
new("饕餮人间", "熊猫堂ProducePandas", 3, 22, "emo了", 109, 1887021320),
new("以梦为马 (壮志骄阳版)", "熊猫堂ProducePandas", 4, 21, "emo了", 34, 1887022666),
new("The ONE(日文版)", "熊猫堂ProducePandas", 2, 57, "emo了", 27, 1887022646),
new("满意(DJheap九天版)", "熊猫堂ProducePandas", 4, 31, "emo了", 31, 1901605941),
new("一眼万年", "熊猫堂ProducePandas", 3, 54, "一眼万年", 20, 1922599361),
new("冲刺", "熊猫堂ProducePandas", 3, 49, "冲刺吧", 1006, 1932878194),
new("滴答滴", "熊猫堂ProducePandas", 2, 30, "爱的赏味期限", 86, 1957515790),
new("热带季风", "熊猫堂ProducePandas", 2, 45, "爱的赏味期限", 212, 1957514964),
new("渣", "熊猫堂ProducePandas", 3, 28, "爱的赏味期限", 22, 1957514965),
new("独特", "熊猫堂ProducePandas", 3, 33, "爱的赏味期限", 62, 1957514966),
new("雨后", "熊猫堂ProducePandas", 4, 15, "爱的赏味期限", 23, 1957514967),
new("然后然后", "熊猫堂ProducePandas", 3, 50, "爱的赏味期限", 108, 1957514968),
new("丢", "熊猫堂ProducePandas", 3, 26, "爱的赏味期限", 30, 1957515792),
new("热带疾风(FACEVOID桃心连哥 Remix)", "熊猫堂ProducePandas", 3, 23, "爱的赏味期限", 55, 1957515793),
new("COSMIC ANTHEM -Japanese Ver.-", "熊猫堂ProducePandas", 3, 11, "COSMIC ANTHEM / 手紙", 0, 1977171493),
new("手紙 (「長大-You Raise Me Up-」-Japanese Ver.-)", "熊猫堂ProducePandas", 4, 11, "COSMIC ANTHEM / 手紙", 0,
1977171494),
new("COSMIC ANTHEM -Chinese Ver.-", "熊猫堂ProducePandas", 3, 31, "COSMIC ANTHEM / 手紙", 0, 1977172202),
new("世界晚安", "熊猫堂ProducePandas", 2, 59, "世界晚安", 652, 1985063377),
new("世界晚安(泰文版)", "熊猫堂ProducePandas", 2, 59, "世界晚安", 134, 1987842504),
new("世界晚安(钢琴版)", "熊猫堂ProducePandas", 3, 2, "世界晚安", 76, 1990475933),
new("世界晚安(泰文钢琴版)", "熊猫堂ProducePandas", 3, 2, "世界晚安", 29, 1990475934),
new("世界晚安(DJ沈念版)", "熊猫堂ProducePandas", 3, 9, "世界晚安", 34, 2014263184),
new("世界晚安(钢琴配乐)", "熊猫堂ProducePandas", 2, 59, "世界晚安", 11, 2014263185),
new("明年也要好好长大", "熊猫堂ProducePandas", 3, 12, "明年也要好好长大", 0, 2010515162),
new("320万年前(DJ沈念版)", "熊猫堂ProducePandas", 3, 21, "320万年前", 8, 2055888636),
new("320万年前", "熊猫堂ProducePandas", 3, 7, "W.O.R.L.D.", 329, 2049770469),
new("隐德来希", "熊猫堂ProducePandas", 3, 3, "W.O.R.L.D.", 594, 2061317924),
new("孔明", "熊猫堂ProducePandas", 3, 59, "W.O.R.L.D.", 91, 2063175274),
new("锦鲤卟噜噜", "熊猫堂ProducePandas", 3, 5, "W.O.R.L.D.", 67, 2059208262),
new("指鹿为马", "熊猫堂ProducePandas", 3, 12, "W.O.R.L.D.", 74, 2063175272),
new("热带季风Remix", "熊猫堂ProducePandas", 3, 22, "W.O.R.L.D.", 23, 2063173319),
new("加州梦境", "熊猫堂ProducePandas", 2, 56, "W.O.R.L.D.", 1662, 2063173324),
new("渐近自由", "熊猫堂ProducePandas", 4, 19, "W.O.R.L.D.", 124, 2063173321),
new("世界所有的烂漫", "熊猫堂ProducePandas", 3, 30, "W.O.R.L.D.", 335, 2053388775),
};
}
public class SongViewModel: ObservableObject
{
private string? _title;
private string? _artist;
private string? _album;
private int _countOfComment;
private bool? _isSelected;
public string? Title
{
get => _title;
set => SetProperty(ref _title, value);
}
public string? Artist
{
get => _artist;
set => SetProperty(ref _artist, value);
}
public string? Album
{
get => _album;
set => SetProperty(ref _album, value);
}
public int CountOfComment
{
get => _countOfComment;
set => SetProperty(ref _countOfComment, value);
}
public bool? IsSelected
{
get => _isSelected;
set => SetProperty(ref _isSelected, value);
}
}
@@ -11,11 +11,17 @@ namespace Semi.Avalonia.Demo.ViewModels;
public class PaletteDemoViewModel: ObservableObject
{
private readonly string[] _predefinedColorNames = { "Amber","Blue","Cyan","Green","Grey","Indigo","LightBlue","LightGreen","Lime","Orange","Pink","Purple","Red","Teal","Violet","Yellow" };
private IResourceDictionary _lightResourceDictionary;
private IResourceDictionary _darkResourceDictionary;
private readonly string[] _predefinedColorNames =
{
"Red", "Pink", "Purple", "Violet", "Indigo",
"Blue", "LightBlue", "Cyan", "Teal", "Green",
"LightGreen", "Lime", "Yellow", "Amber", "Orange",
"Grey"
};
private readonly IResourceDictionary? _lightResourceDictionary;
private readonly IResourceDictionary? _darkResourceDictionary;
private ColorItemViewModel _selectedColor;
private ColorItemViewModel _selectedColor = null!;
public ColorItemViewModel SelectedColor
{
@@ -24,14 +30,14 @@ public class PaletteDemoViewModel: ObservableObject
}
private ObservableCollection<ColorListViewModel> _lightLists;
public ObservableCollection<ColorListViewModel> LightLists
private ObservableCollection<ColorListViewModel>? _lightLists;
public ObservableCollection<ColorListViewModel>? LightLists
{
get => _lightLists;
set => SetProperty(ref _lightLists, value);
}
private ObservableCollection<ColorListViewModel> _darkLists;
public ObservableCollection<ColorListViewModel> DarkLists
private ObservableCollection<ColorListViewModel>? _darkLists;
public ObservableCollection<ColorListViewModel>? DarkLists
{
get => _darkLists;
set => SetProperty(ref _darkLists, value);
@@ -41,8 +47,8 @@ public class PaletteDemoViewModel: ObservableObject
public PaletteDemoViewModel()
{
_lightResourceDictionary = (ResourceDictionary)AvaloniaXamlLoader.Load(new Uri("avares://Semi.Avalonia/Themes/Light/Palette.axaml"));
_darkResourceDictionary = (ResourceDictionary)AvaloniaXamlLoader.Load(new Uri("avares://Semi.Avalonia/Themes/Dark/Palette.axaml"));
_lightResourceDictionary = AvaloniaXamlLoader.Load(new Uri("avares://Semi.Avalonia/Themes/Light/Palette.axaml")) as ResourceDictionary;
_darkResourceDictionary = AvaloniaXamlLoader.Load(new Uri("avares://Semi.Avalonia/Themes/Dark/Palette.axaml")) as ResourceDictionary;
WeakReferenceMessenger.Default.Register<PaletteDemoViewModel, ColorItemViewModel>(this, OnClickColorItem);
}
@@ -110,8 +116,12 @@ public class ColorListViewModel: ObservableObject
set => SetProperty(ref _seriesName, value);
}
internal void Initialize(IResourceDictionary resourceDictionary, string color, bool light)
internal void Initialize(IResourceDictionary? resourceDictionary, string color, bool light)
{
if (resourceDictionary is null)
{
return;
}
SeriesName = color;
Color = new ObservableCollection<ColorItemViewModel>();
@@ -124,6 +134,7 @@ public class ColorListViewModel: ObservableObject
{
string name = color + " " + i;
var item = new ColorItemViewModel(name, brush, key, light, i);
item.ColorResourceKey = item.ResourceKey + "Color";
Color.Add(item);
}
}
@@ -134,28 +145,28 @@ public class ColorListViewModel: ObservableObject
public class ColorItemViewModel : ObservableObject
{
private IBrush _brush;
private IBrush _brush = null!;
public IBrush Brush
{
get => _brush;
set => SetProperty(ref _brush, value);
}
private IBrush _textBrush;
private IBrush _textBrush = null!;
public IBrush TextBrush
{
get => _textBrush;
set => SetProperty(ref _textBrush, value);
}
private string _colorDisplayName;
private string _colorDisplayName = null!;
public string ColorDisplayName
{
get => _colorDisplayName;
set => SetProperty(ref _colorDisplayName, value);
}
private string _resourceKey;
private string _resourceKey = null!;
public string ResourceKey
{
@@ -163,7 +174,15 @@ public class ColorItemViewModel : ObservableObject
set => SetProperty(ref _resourceKey, value);
}
private string _hex;
private string _colorResourceKey = null!;
public string ColorResourceKey
{
get => _colorResourceKey;
set => SetProperty(ref _colorResourceKey, value);
}
private string _hex = null!;
public string Hex
{
@@ -177,7 +196,7 @@ public class ColorItemViewModel : ObservableObject
Brush = brush;
ResourceKey = resourceKey;
Hex = brush.ToString().ToUpperInvariant();
if ((light && index < 5) || (!light && index > 5))
if ((light && index < 5) || (!light && index >= 5))
{
TextBrush = Brushes.Black;
}
@@ -190,7 +209,7 @@ public class ColorItemViewModel : ObservableObject
public class FunctionalColorGroupViewModel : ObservableObject
{
private string _title;
private string _title = null!;
public string Title
{
get => _title;
@@ -200,21 +219,22 @@ public class FunctionalColorGroupViewModel : ObservableObject
public ObservableCollection<ColorItemViewModel> LightColors { get; set; } = new();
public ObservableCollection<ColorItemViewModel> DarkColors { get; set; } = new();
public FunctionalColorGroupViewModel(string title, IResourceDictionary lightDictionary, IResourceDictionary darkDictionary, IReadOnlyList<Tuple<string, string>> tokens)
public FunctionalColorGroupViewModel(string title, IResourceDictionary? lightDictionary, IResourceDictionary? darkDictionary, IReadOnlyList<Tuple<string, string>> tokens)
{
Title = title;
foreach (var token in tokens)
{
string key = token.Item1;
string name = token.Item2;
if (lightDictionary.TryGetValue(key, out var lightValue))
if (lightDictionary?.TryGetValue(key, out var lightValue) ?? false)
{
if (lightValue is ISolidColorBrush lightBrush)
{
LightColors.Add(new ColorItemViewModel(name, lightBrush, key, true, 0));
}
}
if (darkDictionary.TryGetValue(key, out var darkValue))
if (darkDictionary?.TryGetValue(key, out var darkValue) ?? false)
{
if (darkValue is ISolidColorBrush darkBrush)
{
@@ -0,0 +1,15 @@
using System.Collections.ObjectModel;
using System.Linq;
using CommunityToolkit.Mvvm.ComponentModel;
namespace Semi.Avalonia.Demo.ViewModels;
public class TabControlDemoViewModel: ObservableObject
{
public ObservableCollection<string> Items { get; set; }
public TabControlDemoViewModel()
{
Items = new ObservableCollection<string>(Enumerable.Range(1, 200).Select(a => "Tab " + a));
}
}
+40 -22
View File
@@ -1,13 +1,13 @@
<UserControl
d:DesignHeight="450"
d:DesignWidth="800"
mc:Ignorable="d"
x:Class="Semi.Avalonia.Demo.Views.MainView"
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:pages="using:Semi.Avalonia.Demo.Pages"
d:DesignHeight="450"
d:DesignWidth="800"
mc:Ignorable="d">
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
@@ -21,52 +21,52 @@
Margin="8"
Padding="12,4"
Theme="{DynamicResource CardBorder}">
<Grid VerticalAlignment="Center" ColumnDefinitions="*, Auto">
<Grid ColumnDefinitions="*, Auto" VerticalAlignment="Center">
<StackPanel Grid.Column="0" Orientation="Horizontal">
<TextBlock
VerticalAlignment="Center"
Classes="H6"
Text="Semi Avalonia"
Theme="{DynamicResource TitleTextBlock}" />
Theme="{DynamicResource TitleTextBlock}"
VerticalAlignment="Center" />
<TextBlock
Margin="8,0"
VerticalAlignment="Center"
Text="/" />
Text="/"
VerticalAlignment="Center" />
<TextBlock
Margin="8,0"
VerticalAlignment="Center"
Classes="Secondary"
Text="{Binding #tab.SelectedItem.Header}" />
Margin="8,0"
Text="{Binding #tab.SelectedItem.Header}"
VerticalAlignment="Center" />
</StackPanel>
<ToggleSwitch
Grid.Column="1"
Padding="4"
IsCheckedChanged="ToggleButton_OnIsCheckedChanged"
Padding="4"
Theme="{DynamicResource ButtonToggleSwitch}">
<ToggleSwitch.OnContent>
<PathIcon
Width="16"
Height="16"
Data="M12 23C18.0751 23 23 18.0751 23 12C23 5.92487 18.0751 1 12 1C5.92487 1 1 5.92487 1 12C1 18.0751 5.92487 23 12 23ZM17 15C17.476 15 17.9408 14.9525 18.3901 14.862C17.296 17.3011 14.8464 19 12 19C8.13401 19 5 15.866 5 12C5 8.60996 7.40983 5.78277 10.6099 5.13803C10.218 6.01173 10 6.98041 10 8C10 11.866 13.134 15 17 15Z"
Foreground="{DynamicResource ButtonDefaultTertiaryForeground}" />
Foreground="{DynamicResource ButtonDefaultTertiaryForeground}"
Height="16"
Width="16" />
</ToggleSwitch.OnContent>
<ToggleSwitch.OffContent>
<PathIcon
Width="16"
Height="16"
Data="M3.55 19.09L4.96 20.5L6.76 18.71L5.34 17.29M12 6C8.69 6 6 8.69 6 12S8.69 18 12 18 18 15.31 18 12C18 8.68 15.31 6 12 6M20 13H23V11H20M17.24 18.71L19.04 20.5L20.45 19.09L18.66 17.29M20.45 5L19.04 3.6L17.24 5.39L18.66 6.81M13 1H11V4H13M6.76 5.39L4.96 3.6L3.55 5L5.34 6.81L6.76 5.39M1 13H4V11H1M13 20H11V23H13"
Foreground="{DynamicResource ButtonDefaultTertiaryForeground}" />
Foreground="{DynamicResource ButtonDefaultTertiaryForeground}"
Height="16"
Width="16" />
</ToggleSwitch.OffContent>
</ToggleSwitch>
</Grid>
</Border>
<TabControl
Name="tab"
Grid.Row="1"
Margin="8"
Padding="20,0,0,0"
HorizontalAlignment="Stretch"
Margin="8"
Name="tab"
Padding="20,0,0,0"
TabStripPlacement="Left"
Theme="{DynamicResource NavigationTab}">
<TabItem Header="Overview">
@@ -105,6 +105,9 @@
<TabItem Header="ComboBox">
<pages:ComboBoxDemo />
</TabItem>
<TabItem Header="DataValidationErrors">
<pages:DataValidationErrorsDemo />
</TabItem>
<TabItem Header="DataGrid">
<pages:DataGridDemo />
</TabItem>
@@ -120,6 +123,12 @@
<TabItem Header="GridSplitter">
<pages:GridSplitter />
</TabItem>
<TabItem Header="HeaderedContentControl">
<pages:HeaderedContentControlDemo />
</TabItem>
<TabItem Header="HyperlinkButton">
<pages:HyperlinkButtonDemo />
</TabItem>
<TabItem Header="Label">
<pages:LabelDemo />
</TabItem>
@@ -138,6 +147,9 @@
<TabItem Header="NumericUpDown">
<pages:NumericUpDownDemo />
</TabItem>
<TabItem Header="PathIcon">
<pages:PathIconDemo />
</TabItem>
<TabItem Header="ProgressBar">
<pages:ProgressBarDemo />
</TabItem>
@@ -150,6 +162,12 @@
<TabItem Header="RepeatButton">
<pages:RepeatButtonDemo />
</TabItem>
<TabItem Header="ScrollViewer">
<pages:ScrollViewerDemo />
</TabItem>
<TabItem Header="SelectableTextBlock">
<pages:SelectableTextBlockDemo />
</TabItem>
<TabItem Header="Slider">
<pages:SliderDemo />
</TabItem>
@@ -0,0 +1,12 @@
<Application
x:Class="Semi.Avalonia.TreeDataGrid.Demo.App"
xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
RequestedThemeVariant="Default">
<!-- "Default" ThemeVariant follows system theme variant. "Dark" or "Light" are other available options. -->
<Application.Styles>
<StyleInclude Source="avares://Semi.Avalonia/Themes/Index.axaml" />
<StyleInclude Source="avares://Semi.Avalonia.TreeDataGrid/Index.axaml" />
</Application.Styles>
</Application>
@@ -1,10 +1,8 @@
using Avalonia;
using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Markup.Xaml;
using Avalonia.Styling;
using Semi.Avalonia.Demo.Views;
namespace Semi.Avalonia.Demo.Desktop;
namespace Semi.Avalonia.TreeDataGrid.Demo;
public partial class App : Application
{
@@ -19,6 +17,7 @@ public partial class App : Application
{
desktop.MainWindow = new MainWindow();
}
base.OnFrameworkInitializationCompleted();
}
}
@@ -0,0 +1,28 @@
using System;
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;
public class FileIconConverter: IMultiValueConverter
{
[Content]
public Dictionary<string, PathGeometry> Items { get; set; } = new Dictionary<string, PathGeometry>();
public object? Convert(IList<object?> values, Type targetType, object? parameter, CultureInfo culture)
{
if (values[0] is bool isDirectory && values[1] is bool isOpen)
{
if (!isDirectory)
{
return Items["file"];
}
return isOpen ? Items["folderOpen"] : Items["folderClosed"];
}
return AvaloniaProperty.UnsetValue;
}
}
@@ -0,0 +1,138 @@
<Window
x:Class="Semi.Avalonia.TreeDataGrid.Demo.MainWindow"
xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:converters="clr-namespace:Semi.Avalonia.TreeDataGrid.Demo.Converters"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:vm="clr-namespace:Semi.Avalonia.TreeDataGrid.Demo.ViewModels;assembly=Semi.Avalonia.TreeDataGrid.Demo"
Title="Semi.Avalonia.TreeDataGrid.Demo"
d:DesignHeight="450"
d:DesignWidth="800"
x:DataType="vm:MainViewModel"
mc:Ignorable="d">
<Window.Resources>
<converters:FileIconConverter x:Key="FileIconConverter">
<PathGeometry x:Key="file">M14,2H6A2,2 0 0,0 4,4V20A2,2 0 0,0 6,22H18A2,2 0 0,0 20,20V8L14,2M18,20H6V4H13V9H18V20Z</PathGeometry>
<PathGeometry x:Key="folderOpen">M6.1,10L4,18V8H21A2,2 0 0,0 19,6H12L10,4H4A2,2 0 0,0 2,6V18A2,2 0 0,0 4,20H19C19.9,20 20.7,19.4 20.9,18.5L23.2,10H6.1M19,18H6L7.6,12H20.6L19,18Z</PathGeometry>
<PathGeometry x:Key="folderClosed">M20,18H4V8H20M20,6H12L10,4H4C2.89,4 2,4.89 2,6V18A2,2 0 0,0 4,20H20A2,2 0 0,0 22,18V8C22,6.89 21.1,6 20,6Z</PathGeometry>
</converters:FileIconConverter>
</Window.Resources>
<Grid RowDefinitions="Auto, *">
<Button
HorizontalAlignment="Right"
Click="Button_OnClick"
Content="Theme" />
<TabControl Grid.Row="1">
<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="#20808080" />
</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
Width="16"
Height="16"
Margin="8,0"
VerticalAlignment="Center">
<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="#20808080" />
</Style>
</TreeDataGrid.Styles>
</TreeDataGrid>
</Grid>
</TabItem>
</TabControl>
</Grid>
</Window>

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