mirror of
https://gitcode.com/gh_mirrors/se/Semi.Avalonia
synced 2026-04-11 03:36:36 +08:00
Compare commits
111 Commits
v11.2.1.9
...
12.0.0-pre
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
01e213d741 | ||
|
|
87fed4febd | ||
|
|
646272dc21 | ||
|
|
672560643b | ||
|
|
d6d03133b4 | ||
|
|
1d59cff87d | ||
|
|
141eeefd2e | ||
|
|
c84c8a3c90 | ||
|
|
dd5f5182fa | ||
|
|
d865f2aeb4 | ||
|
|
44152ef731 | ||
|
|
25f75d605c | ||
|
|
c144056ab0 | ||
|
|
65e4d0d4a4 | ||
|
|
de3ffc97b6 | ||
|
|
7da8a03f84 | ||
|
|
ab03be1aea | ||
|
|
4ec2d0cf86 | ||
|
|
757f91a140 | ||
|
|
f6d068b722 | ||
|
|
3a6452cccd | ||
|
|
5ea834d57e | ||
|
|
1d9fe693a3 | ||
|
|
2b867f9c6f | ||
|
|
5ea42844ea | ||
|
|
f819531465 | ||
|
|
8f24b2f332 | ||
|
|
a309729c11 | ||
|
|
d57c843032 | ||
|
|
a56b1e374a | ||
|
|
664d05db45 | ||
|
|
fdbfd91b8f | ||
|
|
3b0b007a40 | ||
|
|
c1eff9ddf8 | ||
|
|
4285e6e227 | ||
|
|
edacd88fa7 | ||
|
|
136d577667 | ||
|
|
4ef1520e64 | ||
|
|
5e751ccdbb | ||
|
|
13dcdbdd07 | ||
|
|
185fe8c984 | ||
|
|
622c8c23b7 | ||
|
|
104ba2f1f4 | ||
|
|
4895d2f51b | ||
|
|
414736443d | ||
|
|
65d2f88cab | ||
|
|
0a622772f4 | ||
|
|
5ef8f7ddaf | ||
|
|
ba9dd0a574 | ||
|
|
f784a2c927 | ||
|
|
69cc9b9ca3 | ||
|
|
9226858cda | ||
|
|
7f81aa3bde | ||
|
|
bc37be16ac | ||
|
|
7a831d35f7 | ||
|
|
5f8357ecbc | ||
|
|
4c7caa6dbf | ||
|
|
445b31893e | ||
|
|
301a4e954c | ||
|
|
dc80578c53 | ||
|
|
6c8825b3df | ||
|
|
aa105337fa | ||
|
|
f92b5f4373 | ||
|
|
bbff875d9c | ||
|
|
df75863ac5 | ||
|
|
c04e5e8579 | ||
|
|
9fca51b30d | ||
|
|
0ea632437d | ||
|
|
c0277a7004 | ||
|
|
2c527dc598 | ||
|
|
ab2cef9dc4 | ||
|
|
86daf6b428 | ||
|
|
8f7cdf52b4 | ||
|
|
176430f95f | ||
|
|
1062175204 | ||
|
|
0dda40d322 | ||
|
|
37feb8a9a7 | ||
|
|
c632c6c1f5 | ||
|
|
be2b25a94b | ||
|
|
47c6899b94 | ||
|
|
975d14a36f | ||
|
|
7a13de00a6 | ||
|
|
f7ce4aef30 | ||
|
|
f9a85734d1 | ||
|
|
9dd846f6be | ||
|
|
5384de7b23 | ||
|
|
7ccb6fd41a | ||
|
|
521ed1bd0f | ||
|
|
55d472300e | ||
|
|
a45f50005c | ||
|
|
cd9daf11da | ||
|
|
1c69f53c3c | ||
|
|
8da2e44d4c | ||
|
|
6f2129639a | ||
|
|
865b453b65 | ||
|
|
5622069446 | ||
|
|
76a3d4207f | ||
|
|
513bbba154 | ||
|
|
727fedaedf | ||
|
|
3082ef9ad0 | ||
|
|
985ad0c637 | ||
|
|
59576d4cfd | ||
|
|
c2a072041d | ||
|
|
a62655d25a | ||
|
|
2d2f2afec1 | ||
|
|
1f02f28f8b | ||
|
|
ec2202e2ef | ||
|
|
68dfaa8a57 | ||
|
|
16a8d6b37d | ||
|
|
6d0f3526a9 | ||
|
|
e5822ff6d1 |
11
.github/workflows/deploy.yml
vendored
11
.github/workflows/deploy.yml
vendored
@@ -2,7 +2,7 @@ name: Deploy to GitHub Pages
|
|||||||
|
|
||||||
env:
|
env:
|
||||||
PROJECT_PATH: demo/Semi.Avalonia.Demo.Web/Semi.Avalonia.Demo.Web.csproj
|
PROJECT_PATH: demo/Semi.Avalonia.Demo.Web/Semi.Avalonia.Demo.Web.csproj
|
||||||
OUTPUT_PATH: demo/Semi.Avalonia.Demo.Web/bin/Release/net8.0-browser/publish/wwwroot
|
OUTPUT_PATH: demo/Semi.Avalonia.Demo.Web/bin/Release/net10.0-browser/publish/wwwroot
|
||||||
on:
|
on:
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
@@ -11,12 +11,13 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4.1.1
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
- name: Setup .NET 8
|
- name: Setup dotnet
|
||||||
uses: actions/setup-dotnet@v4
|
uses: actions/setup-dotnet@v5
|
||||||
with:
|
with:
|
||||||
dotnet-version: 8.0.x
|
dotnet-version: |
|
||||||
|
10.0.x
|
||||||
|
|
||||||
- name: Install wasm-tools
|
- name: Install wasm-tools
|
||||||
run: dotnet workload install wasm-tools
|
run: dotnet workload install wasm-tools
|
||||||
|
|||||||
2
.github/workflows/pack-nightly.yml
vendored
2
.github/workflows/pack-nightly.yml
vendored
@@ -31,7 +31,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4.2.2
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
- name: Get Version
|
- name: Get Version
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
2
.github/workflows/pack.yml
vendored
2
.github/workflows/pack.yml
vendored
@@ -47,7 +47,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4.2.2
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
- name: Pack Semi.Avalonia
|
- name: Pack Semi.Avalonia
|
||||||
if: ${{ inputs.Semi_Avalonia }}
|
if: ${{ inputs.Semi_Avalonia }}
|
||||||
|
|||||||
26
.github/workflows/publish.yml
vendored
26
.github/workflows/publish.yml
vendored
@@ -75,7 +75,7 @@ jobs:
|
|||||||
runs-on: windows-latest
|
runs-on: windows-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4.2.2
|
uses: actions/checkout@v5
|
||||||
- name: Publish win-x64
|
- name: Publish win-x64
|
||||||
run: dotnet publish demo/Semi.Avalonia.Demo.Desktop -r win-x64 -c Release -o publish --sc /p:PublishSingleFile=true /p:IncludeNativeLibrariesForSelfExtract=true
|
run: dotnet publish demo/Semi.Avalonia.Demo.Desktop -r win-x64 -c Release -o publish --sc /p:PublishSingleFile=true /p:IncludeNativeLibrariesForSelfExtract=true
|
||||||
- name: Upload a Build Artifact
|
- name: Upload a Build Artifact
|
||||||
@@ -91,7 +91,7 @@ jobs:
|
|||||||
runs-on: windows-latest
|
runs-on: windows-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4.2.2
|
uses: actions/checkout@v5
|
||||||
- name: Enable Native AOT in .csproj
|
- name: Enable Native AOT in .csproj
|
||||||
run: sed -i 's#<!--<PublishAot>true</PublishAot>-->#<PublishAot>true</PublishAot>#' demo/Semi.Avalonia.Demo.Desktop/Semi.Avalonia.Demo.Desktop.csproj
|
run: sed -i 's#<!--<PublishAot>true</PublishAot>-->#<PublishAot>true</PublishAot>#' demo/Semi.Avalonia.Demo.Desktop/Semi.Avalonia.Demo.Desktop.csproj
|
||||||
- name: Publish win-x64 AOT
|
- name: Publish win-x64 AOT
|
||||||
@@ -109,7 +109,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4.2.2
|
uses: actions/checkout@v5
|
||||||
- name: Publish linux-x64
|
- name: Publish linux-x64
|
||||||
run: dotnet publish demo/Semi.Avalonia.Demo.Desktop -r linux-x64 -c Release -o publish --sc /p:PublishSingleFile=true /p:IncludeNativeLibrariesForSelfExtract=true
|
run: dotnet publish demo/Semi.Avalonia.Demo.Desktop -r linux-x64 -c Release -o publish --sc /p:PublishSingleFile=true /p:IncludeNativeLibrariesForSelfExtract=true
|
||||||
- name: Upload a Build Artifact
|
- name: Upload a Build Artifact
|
||||||
@@ -125,7 +125,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4.2.2
|
uses: actions/checkout@v5
|
||||||
- name: Enable Native AOT in .csproj
|
- name: Enable Native AOT in .csproj
|
||||||
run: sed -i 's#<!--<PublishAot>true</PublishAot>-->#<PublishAot>true</PublishAot>#' demo/Semi.Avalonia.Demo.Desktop/Semi.Avalonia.Demo.Desktop.csproj
|
run: sed -i 's#<!--<PublishAot>true</PublishAot>-->#<PublishAot>true</PublishAot>#' demo/Semi.Avalonia.Demo.Desktop/Semi.Avalonia.Demo.Desktop.csproj
|
||||||
- name: Publish linux-x64 AOT
|
- name: Publish linux-x64 AOT
|
||||||
@@ -143,7 +143,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4.2.2
|
uses: actions/checkout@v5
|
||||||
- name: Publish linux-x64 DRM
|
- name: Publish linux-x64 DRM
|
||||||
run: dotnet publish demo/Semi.Avalonia.Demo.Drm -r linux-x64 -c Release -o publish --sc /p:PublishSingleFile=true /p:IncludeNativeLibrariesForSelfExtract=true
|
run: dotnet publish demo/Semi.Avalonia.Demo.Drm -r linux-x64 -c Release -o publish --sc /p:PublishSingleFile=true /p:IncludeNativeLibrariesForSelfExtract=true
|
||||||
- name: Upload a Build Artifact
|
- name: Upload a Build Artifact
|
||||||
@@ -159,7 +159,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4.2.2
|
uses: actions/checkout@v5
|
||||||
- name: Enable Native AOT in .csproj
|
- name: Enable Native AOT in .csproj
|
||||||
run: sed -i 's#<!--<PublishAot>true</PublishAot>-->#<PublishAot>true</PublishAot>#' demo/Semi.Avalonia.Demo.Drm/Semi.Avalonia.Demo.Drm.csproj
|
run: sed -i 's#<!--<PublishAot>true</PublishAot>-->#<PublishAot>true</PublishAot>#' demo/Semi.Avalonia.Demo.Drm/Semi.Avalonia.Demo.Drm.csproj
|
||||||
- name: Publish linux-x64 AOT
|
- name: Publish linux-x64 AOT
|
||||||
@@ -177,7 +177,7 @@ jobs:
|
|||||||
runs-on: macos-latest
|
runs-on: macos-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4.2.2
|
uses: actions/checkout@v5
|
||||||
- name: Publish osx-arm64
|
- name: Publish osx-arm64
|
||||||
run: dotnet publish demo/Semi.Avalonia.Demo.Desktop -r osx-arm64 -c Release -o publish --sc /p:PublishSingleFile=true /p:IncludeNativeLibrariesForSelfExtract=true
|
run: dotnet publish demo/Semi.Avalonia.Demo.Desktop -r osx-arm64 -c Release -o publish --sc /p:PublishSingleFile=true /p:IncludeNativeLibrariesForSelfExtract=true
|
||||||
- name: Upload a Build Artifact
|
- name: Upload a Build Artifact
|
||||||
@@ -193,7 +193,7 @@ jobs:
|
|||||||
runs-on: macos-latest
|
runs-on: macos-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4.2.2
|
uses: actions/checkout@v5
|
||||||
- name: Enable Native AOT in .csproj
|
- name: Enable Native AOT in .csproj
|
||||||
run: sed -i '' 's#<!--<PublishAot>true</PublishAot>-->#<PublishAot>true</PublishAot>#' demo/Semi.Avalonia.Demo.Desktop/Semi.Avalonia.Demo.Desktop.csproj
|
run: sed -i '' 's#<!--<PublishAot>true</PublishAot>-->#<PublishAot>true</PublishAot>#' demo/Semi.Avalonia.Demo.Desktop/Semi.Avalonia.Demo.Desktop.csproj
|
||||||
- name: Publish osx-arm64 AOT
|
- name: Publish osx-arm64 AOT
|
||||||
@@ -211,13 +211,13 @@ jobs:
|
|||||||
runs-on: windows-latest
|
runs-on: windows-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4.2.2
|
uses: actions/checkout@v5
|
||||||
- name: CD Android
|
- name: Install Android workload
|
||||||
run: cd demo/Semi.Avalonia.Demo.Android
|
run: dotnet workload install android
|
||||||
- name: Restore Dependencies
|
- name: Restore Dependencies
|
||||||
run: dotnet restore
|
run: dotnet restore demo/Semi.Avalonia.Demo.Android
|
||||||
- name: Publish Android
|
- name: Publish Android
|
||||||
run: dotnet publish demo/Semi.Avalonia.Demo.Android -c Release -f net8.0-android --no-restore -o publish /p:RuntimeIdentifier=android-arm64
|
run: dotnet publish demo/Semi.Avalonia.Demo.Android -c Release -f net10.0-android --no-restore -o publish /p:RuntimeIdentifier=android-arm64
|
||||||
- name: Upload a Build Artifact
|
- name: Upload a Build Artifact
|
||||||
uses: actions/upload-artifact@v4.6.2
|
uses: actions/upload-artifact@v4.6.2
|
||||||
with:
|
with:
|
||||||
|
|||||||
6
Nuget.Config
Normal file
6
Nuget.Config
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<configuration>
|
||||||
|
<packageSources>
|
||||||
|
<add key="avalonia-nightly" value="https://nuget-feed-nightly.avaloniaui.net/v3/index.json" />
|
||||||
|
</packageSources>
|
||||||
|
</configuration>
|
||||||
13
README.md
13
README.md
@@ -75,13 +75,12 @@ We offer limited free community support for Semi Avalonia and Ursa. If you have
|
|||||||
|
|
||||||
## Version compatibility
|
## Version compatibility
|
||||||
|
|
||||||
| Semi Design Version | Avalonia Version |
|
| Semi Avalonia Version | Avalonia Version |
|
||||||
|:--------------------|:-----------------|
|
|:----------------------|:-----------------|
|
||||||
| 11.2.1 | >=11.2.1 |
|
| 11.3.7 | >=11.3.7 |
|
||||||
| 11.2.0 | 11.2.0 |
|
| 11.2.1 | >=11.2.1 |
|
||||||
| 11.1.0 | >=11.1.0 |
|
| 11.2.0 | End of Life |
|
||||||
| 11.0.7 | >=11.0.7 |
|
| 11.1.x | End of Life |
|
||||||
| 11.0.1 | <=11.0.6 |
|
|
||||||
|
|
||||||
## Credits
|
## Credits
|
||||||
|
|
||||||
|
|||||||
13
README_CN.md
13
README_CN.md
@@ -75,13 +75,12 @@ dotnet add package Semi.Avalonia.AvaloniaEdit
|
|||||||
|
|
||||||
## 版本兼容性
|
## 版本兼容性
|
||||||
|
|
||||||
| Semi Design Version | Avalonia Version |
|
| Semi Avalonia Version | Avalonia Version |
|
||||||
|:--------------------|:-----------------|
|
|:----------------------|:-----------------|
|
||||||
| 11.2.1 | >=11.2.1 |
|
| 11.3.7 | >=11.3.7 |
|
||||||
| 11.2.0 | 11.2.0 |
|
| 11.2.1 | >=11.2.1 |
|
||||||
| 11.1.0 | >=11.1.0 |
|
| 11.2.0 | End of Life |
|
||||||
| 11.0.7 | >=11.0.7 |
|
| 11.1.x | End of Life |
|
||||||
| 11.0.1 | <=11.0.6 |
|
|
||||||
|
|
||||||
## 致谢
|
## 致谢
|
||||||
|
|
||||||
|
|||||||
@@ -1,99 +0,0 @@
|
|||||||
|
|
||||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
|
||||||
# Visual Studio Version 17
|
|
||||||
VisualStudioVersion = 17.3.32929.385
|
|
||||||
MinimumVisualStudioVersion = 10.0.40219.1
|
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Semi.Avalonia", "src\Semi.Avalonia\Semi.Avalonia.csproj", "{90D0B063-BC64-40AB-A56C-AC11909CF410}"
|
|
||||||
EndProject
|
|
||||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Files", "Solution Files", "{B1E6A7D4-0AFB-4D32-9969-5FBDAC0CFF3E}"
|
|
||||||
ProjectSection(SolutionItems) = preProject
|
|
||||||
demo\Directory.Build.props = demo\Directory.Build.props
|
|
||||||
demo\global.json = demo\global.json
|
|
||||||
src\Package.props = src\Package.props
|
|
||||||
EndProjectSection
|
|
||||||
EndProject
|
|
||||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "GitHub Action", "GitHub Action", "{318534A1-1CC3-40FB-B4AE-736F94465232}"
|
|
||||||
ProjectSection(SolutionItems) = preProject
|
|
||||||
.github\workflows\deploy.yml = .github\workflows\deploy.yml
|
|
||||||
.github\workflows\pack.yml = .github\workflows\pack.yml
|
|
||||||
.github\workflows\pack-nightly.yml = .github\workflows\pack-nightly.yml
|
|
||||||
.github\workflows\publish.yml = .github\workflows\publish.yml
|
|
||||||
.github\workflows\release-tag.yml = .github\workflows\release-tag.yml
|
|
||||||
EndProjectSection
|
|
||||||
EndProject
|
|
||||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Demo", "Demo", "{43091528-9509-43CB-A003-9C5C11E96DD6}"
|
|
||||||
EndProject
|
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Semi.Avalonia.Demo.Desktop", "demo\Semi.Avalonia.Demo.Desktop\Semi.Avalonia.Demo.Desktop.csproj", "{2ADCA724-2B6D-46EC-87F7-604D7918B89A}"
|
|
||||||
EndProject
|
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Semi.Avalonia.Demo.Web", "demo\Semi.Avalonia.Demo.Web\Semi.Avalonia.Demo.Web.csproj", "{69A2C77D-6DB7-4AE4-B179-D1F5CF5E2DF0}"
|
|
||||||
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("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Semi.Avalonia.DataGrid", "src\Semi.Avalonia.DataGrid\Semi.Avalonia.DataGrid.csproj", "{8A90C292-8761-4F70-8E1F-EFC097FEADB3}"
|
|
||||||
EndProject
|
|
||||||
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
|
|
||||||
Global
|
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
|
||||||
Debug|Any CPU = Debug|Any CPU
|
|
||||||
Release|Any CPU = Release|Any CPU
|
|
||||||
EndGlobalSection
|
|
||||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
|
||||||
{90D0B063-BC64-40AB-A56C-AC11909CF410}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
|
||||||
{90D0B063-BC64-40AB-A56C-AC11909CF410}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
|
||||||
{90D0B063-BC64-40AB-A56C-AC11909CF410}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
|
||||||
{90D0B063-BC64-40AB-A56C-AC11909CF410}.Release|Any CPU.Build.0 = Release|Any CPU
|
|
||||||
{2ADCA724-2B6D-46EC-87F7-604D7918B89A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
|
||||||
{2ADCA724-2B6D-46EC-87F7-604D7918B89A}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
|
||||||
{2ADCA724-2B6D-46EC-87F7-604D7918B89A}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
|
||||||
{2ADCA724-2B6D-46EC-87F7-604D7918B89A}.Release|Any CPU.Build.0 = Release|Any CPU
|
|
||||||
{69A2C77D-6DB7-4AE4-B179-D1F5CF5E2DF0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
|
||||||
{69A2C77D-6DB7-4AE4-B179-D1F5CF5E2DF0}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
|
||||||
{69A2C77D-6DB7-4AE4-B179-D1F5CF5E2DF0}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
|
||||||
{69A2C77D-6DB7-4AE4-B179-D1F5CF5E2DF0}.Release|Any CPU.Build.0 = Release|Any CPU
|
|
||||||
{D789AEDB-EBDF-4450-8E8E-B4A03FB257B0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
|
||||||
{D789AEDB-EBDF-4450-8E8E-B4A03FB257B0}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
|
||||||
{D789AEDB-EBDF-4450-8E8E-B4A03FB257B0}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
|
||||||
{D789AEDB-EBDF-4450-8E8E-B4A03FB257B0}.Release|Any CPU.Build.0 = Release|Any CPU
|
|
||||||
{8A90C292-8761-4F70-8E1F-EFC097FEADB3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
|
||||||
{8A90C292-8761-4F70-8E1F-EFC097FEADB3}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
|
||||||
{8A90C292-8761-4F70-8E1F-EFC097FEADB3}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
|
||||||
{8A90C292-8761-4F70-8E1F-EFC097FEADB3}.Release|Any CPU.Build.0 = Release|Any CPU
|
|
||||||
{0B64C2F2-FDCD-48E4-AB9D-7CCC63B006CA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
|
||||||
{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
|
|
||||||
EndGlobalSection
|
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
|
||||||
HideSolutionNode = FALSE
|
|
||||||
EndGlobalSection
|
|
||||||
GlobalSection(NestedProjects) = preSolution
|
|
||||||
{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}
|
|
||||||
EndGlobalSection
|
|
||||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
|
||||||
SolutionGuid = {7CA41ED3-2CED-40CC-AA21-28C3B42B1E86}
|
|
||||||
EndGlobalSection
|
|
||||||
EndGlobal
|
|
||||||
28
Semi.Avalonia.slnx
Normal file
28
Semi.Avalonia.slnx
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
<Solution>
|
||||||
|
<Folder Name="/Demo/">
|
||||||
|
<Project Path="demo/Semi.Avalonia.Demo.Android/Semi.Avalonia.Demo.Android.csproj"/>
|
||||||
|
<Project Path="demo/Semi.Avalonia.Demo.Desktop/Semi.Avalonia.Demo.Desktop.csproj"/>
|
||||||
|
<Project Path="demo/Semi.Avalonia.Demo.Drm/Semi.Avalonia.Demo.Drm.csproj"/>
|
||||||
|
<Project Path="demo/Semi.Avalonia.Demo.Web/Semi.Avalonia.Demo.Web.csproj"/>
|
||||||
|
<Project Path="demo/Semi.Avalonia.Demo/Semi.Avalonia.Demo.csproj"/>
|
||||||
|
</Folder>
|
||||||
|
<Folder Name="/GitHub Action/">
|
||||||
|
<File Path=".github/workflows/deploy.yml"/>
|
||||||
|
<File Path=".github/workflows/pack-nightly.yml"/>
|
||||||
|
<File Path=".github/workflows/pack.yml"/>
|
||||||
|
<File Path=".github/workflows/publish.yml"/>
|
||||||
|
<File Path=".github/workflows/release-tag.yml"/>
|
||||||
|
</Folder>
|
||||||
|
<Folder Name="/Solution Items/Demo/">
|
||||||
|
<File Path="demo/Directory.Packages.props"/>
|
||||||
|
<File Path="demo/global.json"/>
|
||||||
|
</Folder>
|
||||||
|
<Folder Name="/Solution Items/Package/">
|
||||||
|
<File Path="src/Directory.Packages.props"/>
|
||||||
|
<File Path="src/Directory.Build.props"/>
|
||||||
|
</Folder>
|
||||||
|
<Project Path="src/Semi.Avalonia.ColorPicker/Semi.Avalonia.ColorPicker.csproj"/>
|
||||||
|
<Project Path="src/Semi.Avalonia.DataGrid/Semi.Avalonia.DataGrid.csproj"/>
|
||||||
|
<Project Path="src/Semi.Avalonia.TreeDataGrid/Semi.Avalonia.TreeDataGrid.csproj"/>
|
||||||
|
<Project Path="src/Semi.Avalonia/Semi.Avalonia.csproj"/>
|
||||||
|
</Solution>
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
<Project>
|
|
||||||
<PropertyGroup>
|
|
||||||
<AvaloniaVersion>11.3.0</AvaloniaVersion>
|
|
||||||
<DataGridVersion>11.3.0</DataGridVersion>
|
|
||||||
<CommunityToolkitVersion>8.4.0</CommunityToolkitVersion>
|
|
||||||
</PropertyGroup>
|
|
||||||
</Project>
|
|
||||||
27
demo/Directory.Packages.props
Normal file
27
demo/Directory.Packages.props
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
<Project>
|
||||||
|
<PropertyGroup>
|
||||||
|
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
|
||||||
|
<AvaloniaVersion>12.0.0-preview2</AvaloniaVersion>
|
||||||
|
<DataGridVersion>12.0.0-preview2-2</DataGridVersion>
|
||||||
|
<SkiaSharpVersion>3.119.1</SkiaSharpVersion>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageVersion Include="Avalonia" Version="$(AvaloniaVersion)"/>
|
||||||
|
<PackageVersion Include="AvaloniaUI.DiagnosticsSupport" Version="2.2.0-beta3"/>
|
||||||
|
<PackageVersion Include="Avalonia.Desktop" Version="$(AvaloniaVersion)" />
|
||||||
|
<PackageVersion Include="Avalonia.LinuxFramebuffer" Version="$(AvaloniaVersion)"/>
|
||||||
|
<PackageVersion Include="Avalonia.iOS" Version="$(AvaloniaVersion)" />
|
||||||
|
<PackageVersion Include="Avalonia.Browser" Version="$(AvaloniaVersion)" />
|
||||||
|
<PackageVersion Include="Avalonia.Android" Version="$(AvaloniaVersion)" />
|
||||||
|
<PackageVersion Include="Avalonia.Controls.ColorPicker" Version="$(AvaloniaVersion)"/>
|
||||||
|
<PackageVersion Include="Avalonia.Controls.DataGrid" Version="$(DataGridVersion)"/>
|
||||||
|
|
||||||
|
<PackageVersion Include="SkiaSharp" Version="$(SkiaSharpVersion)"/>
|
||||||
|
<PackageVersion Include="SkiaSharp.NativeAssets.WebAssembly" Version="$(SkiaSharpVersion)"/>
|
||||||
|
|
||||||
|
<PackageVersion Include="Xamarin.AndroidX.Core.SplashScreen" Version="1.2.0"/>
|
||||||
|
|
||||||
|
<PackageVersion Include="CommunityToolkit.Mvvm" Version="8.4.0"/>
|
||||||
|
<PackageVersion Include="Irihi.Avalonia.Shared" Version="0.3.1"/>
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
||||||
20
demo/Semi.Avalonia.Demo.Android/Application.cs
Normal file
20
demo/Semi.Avalonia.Demo.Android/Application.cs
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
using Android.App;
|
||||||
|
using Android.Runtime;
|
||||||
|
using Avalonia;
|
||||||
|
using Avalonia.Android;
|
||||||
|
|
||||||
|
namespace Semi.Avalonia.Demo.Android;
|
||||||
|
|
||||||
|
[Application]
|
||||||
|
public class Application : AvaloniaAndroidApplication<App>
|
||||||
|
{
|
||||||
|
protected Application(nint javaReference, JniHandleOwnership transfer) : base(javaReference, transfer)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override AppBuilder CustomizeAppBuilder(AppBuilder builder)
|
||||||
|
{
|
||||||
|
return base.CustomizeAppBuilder(builder)
|
||||||
|
.WithSourceHanSansCNFont();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
using Avalonia;
|
||||||
|
using Avalonia.Media;
|
||||||
|
|
||||||
|
namespace Semi.Avalonia.Demo.Android;
|
||||||
|
|
||||||
|
public static class AvaloniaAppBuilderExtensions
|
||||||
|
{
|
||||||
|
private static string DefaultFontFamily => "avares://Semi.Avalonia.Demo.Android/Assets#Source Han Sans CN";
|
||||||
|
|
||||||
|
public static AppBuilder WithSourceHanSansCNFont(this AppBuilder builder) =>
|
||||||
|
builder.With(new FontManagerOptions
|
||||||
|
{
|
||||||
|
DefaultFamilyName = DefaultFontFamily,
|
||||||
|
FontFallbacks = [new FontFallback { FontFamily = new FontFamily(DefaultFontFamily) }]
|
||||||
|
});
|
||||||
|
}
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 7.1 KiB After Width: | Height: | Size: 717 B |
@@ -11,6 +11,4 @@ namespace Semi.Avalonia.Demo.Android;
|
|||||||
MainLauncher = true,
|
MainLauncher = true,
|
||||||
LaunchMode = LaunchMode.SingleTop,
|
LaunchMode = LaunchMode.SingleTop,
|
||||||
ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.ScreenSize | ConfigChanges.UiMode)]
|
ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.ScreenSize | ConfigChanges.UiMode)]
|
||||||
public class MainActivity : AvaloniaMainActivity<App>
|
public class MainActivity : AvaloniaMainActivity;
|
||||||
{
|
|
||||||
}
|
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<OutputType>Exe</OutputType>
|
<OutputType>Exe</OutputType>
|
||||||
<TargetFramework>net8.0-android</TargetFramework>
|
<TargetFramework>net10.0-android</TargetFramework>
|
||||||
<SupportedOSPlatformVersion>21</SupportedOSPlatformVersion>
|
<SupportedOSPlatformVersion>23</SupportedOSPlatformVersion>
|
||||||
<Nullable>enable</Nullable>
|
<Nullable>enable</Nullable>
|
||||||
<ApplicationId>com.irihitech.Semi.Avalonia</ApplicationId>
|
<ApplicationId>com.irihitech.Semi.Avalonia</ApplicationId>
|
||||||
<ApplicationVersion>1</ApplicationVersion>
|
<ApplicationVersion>1</ApplicationVersion>
|
||||||
@@ -13,15 +13,20 @@
|
|||||||
<RootNamespace>Semi.Avalonia.Demo.Android</RootNamespace>
|
<RootNamespace>Semi.Avalonia.Demo.Android</RootNamespace>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<!-- Use CoreCLR on Android -->
|
||||||
|
<PropertyGroup Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'android'">
|
||||||
|
<UseMonoRuntime>false</UseMonoRuntime>
|
||||||
|
<PublishReadyToRun>true</PublishReadyToRun>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<AndroidResource Include="Icon.png">
|
<AndroidResource Include="Icon.png" Link="Resources\drawable\Icon.png"/>
|
||||||
<Link>Resources\drawable\Icon.png</Link>
|
<AvaloniaResource Include="..\Fonts\*" Link="Assets\Fonts\%(Filename)%(Extension)" />
|
||||||
</AndroidResource>
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Avalonia.Android" Version="$(AvaloniaVersion)"/>
|
<PackageReference Include="Avalonia.Android"/>
|
||||||
<PackageReference Include="Xamarin.AndroidX.Core.SplashScreen" Version="1.0.1.1"/>
|
<PackageReference Include="Xamarin.AndroidX.Core.SplashScreen"/>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
<TargetFramework>net8.0</TargetFramework>
|
<TargetFramework>net8.0</TargetFramework>
|
||||||
<Nullable>enable</Nullable>
|
<Nullable>enable</Nullable>
|
||||||
<BuiltInComInteropSupport>true</BuiltInComInteropSupport>
|
<BuiltInComInteropSupport>true</BuiltInComInteropSupport>
|
||||||
|
<ApplicationIcon>..\Semi.Avalonia.Demo\Assets\irihi.ico</ApplicationIcon>
|
||||||
<!-- Uncomment below to enable Native AOT compilation-->
|
<!-- Uncomment below to enable Native AOT compilation-->
|
||||||
<!--<PublishAot>true</PublishAot>-->
|
<!--<PublishAot>true</PublishAot>-->
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
@@ -22,7 +23,7 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Avalonia.Desktop" Version="$(AvaloniaVersion)"/>
|
<PackageReference Include="Avalonia.Desktop"/>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
<TargetFramework>net8.0</TargetFramework>
|
<TargetFramework>net8.0</TargetFramework>
|
||||||
<Nullable>enable</Nullable>
|
<Nullable>enable</Nullable>
|
||||||
<BuiltInComInteropSupport>true</BuiltInComInteropSupport>
|
<BuiltInComInteropSupport>true</BuiltInComInteropSupport>
|
||||||
|
<ApplicationIcon>..\Semi.Avalonia.Demo\Assets\irihi.ico</ApplicationIcon>
|
||||||
<!-- Uncomment below to enable Native AOT compilation-->
|
<!-- Uncomment below to enable Native AOT compilation-->
|
||||||
<!--<PublishAot>true</PublishAot>-->
|
<!--<PublishAot>true</PublishAot>-->
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
@@ -22,8 +23,8 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Avalonia.Desktop" Version="$(AvaloniaVersion)"/>
|
<PackageReference Include="Avalonia.Desktop"/>
|
||||||
<PackageReference Include="Avalonia.LinuxFramebuffer" Version="$(AvaloniaVersion)"/>
|
<PackageReference Include="Avalonia.LinuxFramebuffer"/>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
@@ -1,17 +1,19 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk.WebAssembly">
|
<Project Sdk="Microsoft.NET.Sdk.WebAssembly">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>net8.0-browser</TargetFramework>
|
<TargetFramework>net10.0-browser</TargetFramework>
|
||||||
<OutputType>Exe</OutputType>
|
<OutputType>Exe</OutputType>
|
||||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||||
<Nullable>enable</Nullable>
|
<Nullable>enable</Nullable>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<AvaloniaResource Include="Assets\**"/>
|
<AvaloniaResource Include="..\Fonts\*" Link="Assets\Fonts\%(Filename)%(Extension)" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Avalonia.Browser" Version="$(AvaloniaVersion)"/>
|
<PackageReference Include="Avalonia.Browser"/>
|
||||||
|
<PackageReference Include="SkiaSharp"/>
|
||||||
|
<PackageReference Include="SkiaSharp.NativeAssets.WebAssembly"/>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
@@ -1,17 +1,17 @@
|
|||||||
<Application
|
<Application
|
||||||
|
Name="Semi Avalonia Demo"
|
||||||
x:Class="Semi.Avalonia.Demo.App"
|
x:Class="Semi.Avalonia.Demo.App"
|
||||||
xmlns="https://github.com/avaloniaui"
|
xmlns="https://github.com/avaloniaui"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
x:CompileBindings="True"
|
|
||||||
x:DataType="viewModels:ApplicationViewModel"
|
|
||||||
xmlns:semi="https://irihi.tech/semi"
|
xmlns:semi="https://irihi.tech/semi"
|
||||||
xmlns:viewModels="clr-namespace:Semi.Avalonia.Demo.ViewModels">
|
xmlns:vm="clr-namespace:Semi.Avalonia.Demo.ViewModels"
|
||||||
|
x:DataType="vm:ApplicationViewModel">
|
||||||
<Application.Styles>
|
<Application.Styles>
|
||||||
<semi:SemiTheme Locale="zh-CN" />
|
<semi:SemiTheme Locale="zh-CN" />
|
||||||
<semi:SemiPopupAnimations />
|
<semi:SemiPopupAnimations />
|
||||||
<semi:ColorPickerSemiTheme />
|
<semi:ColorPickerSemiTheme />
|
||||||
<semi:DataGridSemiTheme />
|
<semi:DataGridSemiTheme />
|
||||||
<semi:TreeDataGridSemiTheme />
|
<!-- <semi:TreeDataGridSemiTheme /> -->
|
||||||
</Application.Styles>
|
</Application.Styles>
|
||||||
<Application.Resources>
|
<Application.Resources>
|
||||||
<ResourceDictionary>
|
<ResourceDictionary>
|
||||||
@@ -20,12 +20,30 @@
|
|||||||
</ResourceDictionary.MergedDictionaries>
|
</ResourceDictionary.MergedDictionaries>
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
</Application.Resources>
|
</Application.Resources>
|
||||||
|
<NativeMenu.Menu>
|
||||||
|
<NativeMenu>
|
||||||
|
<NativeMenuItem
|
||||||
|
Header="About Us"
|
||||||
|
Command="{Binding JumpToCommand}"
|
||||||
|
CommandParameter="{Binding $self.Header}" />
|
||||||
|
</NativeMenu>
|
||||||
|
</NativeMenu.Menu>
|
||||||
<TrayIcon.Icons>
|
<TrayIcon.Icons>
|
||||||
<TrayIcons>
|
<TrayIcons>
|
||||||
<TrayIcon Icon="/Assets/irihi.ico" MacOSProperties.IsTemplateIcon="true" ToolTipText="Semi Avalonia Demo">
|
<TrayIcon
|
||||||
|
Icon="{OnPlatform Default=/Assets/irihi.ico, macOS=/Assets/irihi2.ico}"
|
||||||
|
MacOSProperties.IsTemplateIcon="true"
|
||||||
|
Command="{Binding ActivateCommand}"
|
||||||
|
ToolTipText="Semi Avalonia Demo">
|
||||||
<TrayIcon.Menu>
|
<TrayIcon.Menu>
|
||||||
<NativeMenu>
|
<NativeMenu>
|
||||||
<NativeMenuItem Header="Exit" Command="{Binding ExitCommand}" />
|
<NativeMenuItem
|
||||||
|
Header="About Us"
|
||||||
|
Command="{Binding JumpToCommand}"
|
||||||
|
CommandParameter="{Binding $self.Header}" />
|
||||||
|
<NativeMenuItem
|
||||||
|
Header="Exit"
|
||||||
|
Command="{Binding ExitCommand}" />
|
||||||
</NativeMenu>
|
</NativeMenu>
|
||||||
</TrayIcon.Menu>
|
</TrayIcon.Menu>
|
||||||
</TrayIcon>
|
</TrayIcon>
|
||||||
|
|||||||
@@ -12,6 +12,9 @@ public partial class App : Application
|
|||||||
public override void Initialize()
|
public override void Initialize()
|
||||||
{
|
{
|
||||||
AvaloniaXamlLoader.Load(this);
|
AvaloniaXamlLoader.Load(this);
|
||||||
|
#if DEBUG
|
||||||
|
this.AttachDeveloperTools();
|
||||||
|
#endif
|
||||||
this.DataContext = new ApplicationViewModel();
|
this.DataContext = new ApplicationViewModel();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -22,7 +25,7 @@ public partial class App : Application
|
|||||||
case IClassicDesktopStyleApplicationLifetime desktop:
|
case IClassicDesktopStyleApplicationLifetime desktop:
|
||||||
// Line below is needed to remove Avalonia data validation.
|
// Line below is needed to remove Avalonia data validation.
|
||||||
// Without this line you will get duplicate validations from both Avalonia and CT
|
// Without this line you will get duplicate validations from both Avalonia and CT
|
||||||
BindingPlugins.DataValidators.RemoveAt(0);
|
// BindingPlugins.DataValidators.RemoveAt(0);
|
||||||
desktop.MainWindow = new MainWindow();
|
desktop.MainWindow = new MainWindow();
|
||||||
break;
|
break;
|
||||||
case ISingleViewApplicationLifetime singleView:
|
case ISingleViewApplicationLifetime singleView:
|
||||||
|
|||||||
BIN
demo/Semi.Avalonia.Demo/Assets/irihi2.ico
Normal file
BIN
demo/Semi.Avalonia.Demo/Assets/irihi2.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 948 B |
@@ -79,6 +79,32 @@ public static class ColorTokens
|
|||||||
new("SemiColorDangerLightActive", "Danger Light Active")
|
new("SemiColorDangerLightActive", "Danger Light Active")
|
||||||
];
|
];
|
||||||
|
|
||||||
|
public static IReadOnlyList<Tuple<string, string>> AIGeneralTokens { get; } =
|
||||||
|
[
|
||||||
|
new("SemiColorAIGeneral", "AI General"),
|
||||||
|
new("SemiColorAIGeneralPointerover", "AI General Pointerover"),
|
||||||
|
new("SemiColorAIGeneralActive", "AI General Active"),
|
||||||
|
new("SemiColorAIGeneralDisabled", "AI General Disabled")
|
||||||
|
];
|
||||||
|
|
||||||
|
public static IReadOnlyList<Tuple<string, string>> AIPurpleTokens { get; } =
|
||||||
|
[
|
||||||
|
new("SemiColorAIPurple", "AI Purple"),
|
||||||
|
new("SemiColorAIPurplePointerover", "AI Purple Pointerover"),
|
||||||
|
new("SemiColorAIPurpleActive", "AI Purple Active"),
|
||||||
|
new("SemiColorAIPurpleDisabled", "AI Purple Disabled")
|
||||||
|
];
|
||||||
|
|
||||||
|
public static IReadOnlyList<Tuple<string, string>> AIBackgroundTokens { get; } =
|
||||||
|
[
|
||||||
|
new("SemiColorAIBackgroundBottom", "AI Bottom Background"),
|
||||||
|
new("SemiColorAIBackgroundBottomPointerover", "AI Bottom Background Pointerover"),
|
||||||
|
new("SemiColorAIBackgroundBottomActive", "AI Bottom Background Active"),
|
||||||
|
new("SemiColorAIBackgroundTop", "AI Top Background"),
|
||||||
|
new("SemiColorAIBackgroundTopPointerover", "AI Top Background Pointerover"),
|
||||||
|
new("SemiColorAIBackgroundTopActive", "AI Top Background Active"),
|
||||||
|
];
|
||||||
|
|
||||||
public static IReadOnlyList<Tuple<string, string>> TextTokens { get; } =
|
public static IReadOnlyList<Tuple<string, string>> TextTokens { get; } =
|
||||||
[
|
[
|
||||||
new("SemiColorText0", "Text 0"),
|
new("SemiColorText0", "Text 0"),
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ using System.Threading.Tasks;
|
|||||||
using Avalonia;
|
using Avalonia;
|
||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
using Avalonia.Controls.Primitives;
|
using Avalonia.Controls.Primitives;
|
||||||
|
using Avalonia.Input.Platform;
|
||||||
using Avalonia.Media;
|
using Avalonia.Media;
|
||||||
using Semi.Avalonia.Demo.Converters;
|
using Semi.Avalonia.Demo.Converters;
|
||||||
|
|
||||||
@@ -92,6 +93,12 @@ public class ColorDetailControl : TemplatedControl
|
|||||||
Hex2 = hex2 as string;
|
Hex2 = hex2 as string;
|
||||||
OpacityNumber = brush.Opacity.ToString(CultureInfo.InvariantCulture);
|
OpacityNumber = brush.Opacity.ToString(CultureInfo.InvariantCulture);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Hex = null;
|
||||||
|
Hex2 = null;
|
||||||
|
OpacityNumber = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task Copy(object o)
|
public async Task Copy(object o)
|
||||||
|
|||||||
@@ -8,7 +8,6 @@
|
|||||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
xmlns:vm="clr-namespace:Semi.Avalonia.Demo.ViewModels"
|
xmlns:vm="clr-namespace:Semi.Avalonia.Demo.ViewModels"
|
||||||
x:DataType="vm:AboutUsViewModel"
|
x:DataType="vm:AboutUsViewModel"
|
||||||
x:CompileBindings="True"
|
|
||||||
d:DesignHeight="450"
|
d:DesignHeight="450"
|
||||||
d:DesignWidth="800"
|
d:DesignWidth="800"
|
||||||
mc:Ignorable="d">
|
mc:Ignorable="d">
|
||||||
|
|||||||
@@ -7,7 +7,6 @@
|
|||||||
xmlns:vm="clr-namespace:Semi.Avalonia.Demo.ViewModels"
|
xmlns:vm="clr-namespace:Semi.Avalonia.Demo.ViewModels"
|
||||||
d:DesignHeight="450"
|
d:DesignHeight="450"
|
||||||
d:DesignWidth="800"
|
d:DesignWidth="800"
|
||||||
x:CompileBindings="False"
|
|
||||||
x:DataType="vm:AutoCompleteBoxDemoViewModel"
|
x:DataType="vm:AutoCompleteBoxDemoViewModel"
|
||||||
mc:Ignorable="d">
|
mc:Ignorable="d">
|
||||||
<Design.DataContext>
|
<Design.DataContext>
|
||||||
@@ -29,59 +28,59 @@
|
|||||||
</StackPanel.Styles>
|
</StackPanel.Styles>
|
||||||
|
|
||||||
<AutoCompleteBox
|
<AutoCompleteBox
|
||||||
Watermark="Please select a State"
|
PlaceholderText="Please select a State"
|
||||||
ValueMemberBinding="{Binding Name}" />
|
ValueMemberBinding="{Binding Name,DataType=vm:StateData}" />
|
||||||
<AutoCompleteBox
|
<AutoCompleteBox
|
||||||
Classes="Large"
|
Classes="Large"
|
||||||
ValueMemberBinding="{ReflectionBinding Name}" />
|
ValueMemberBinding="{Binding Name,DataType=vm:StateData}" />
|
||||||
<AutoCompleteBox
|
<AutoCompleteBox
|
||||||
Classes="Small"
|
Classes="Small"
|
||||||
ValueMemberBinding="{ReflectionBinding Name}" />
|
ValueMemberBinding="{Binding Name,DataType=vm:StateData}" />
|
||||||
<AutoCompleteBox
|
<AutoCompleteBox
|
||||||
Classes="Bordered"
|
Classes="Bordered"
|
||||||
ValueMemberBinding="{ReflectionBinding Name}" />
|
ValueMemberBinding="{Binding Name,DataType=vm:StateData}" />
|
||||||
<AutoCompleteBox
|
<AutoCompleteBox
|
||||||
IsEnabled="False"
|
IsEnabled="False"
|
||||||
Watermark="Disabled"
|
PlaceholderText="Disabled"
|
||||||
ValueMemberBinding="{ReflectionBinding Name}" />
|
ValueMemberBinding="{Binding Name,DataType=vm:StateData}" />
|
||||||
<AutoCompleteBox
|
<AutoCompleteBox
|
||||||
InnerLeftContent="https://"
|
InnerLeftContent="https://"
|
||||||
InnerRightContent=".com"
|
InnerRightContent=".com"
|
||||||
ValueMemberBinding="{ReflectionBinding Name}" />
|
ValueMemberBinding="{Binding Name,DataType=vm:StateData}" />
|
||||||
|
|
||||||
<StackPanel Orientation="Horizontal">
|
<StackPanel Orientation="Horizontal">
|
||||||
<AutoCompleteBox
|
<AutoCompleteBox
|
||||||
Width="100"
|
Width="100"
|
||||||
Classes="Large"
|
Classes="Large"
|
||||||
Watermark="Large"
|
PlaceholderText="Large"
|
||||||
ValueMemberBinding="{ReflectionBinding Name}" />
|
ValueMemberBinding="{Binding Name,DataType=vm:StateData}" />
|
||||||
<AutoCompleteBox
|
<AutoCompleteBox
|
||||||
Width="100"
|
Width="100"
|
||||||
Watermark="Default"
|
PlaceholderText="Default"
|
||||||
ValueMemberBinding="{ReflectionBinding Name}" />
|
ValueMemberBinding="{Binding Name,DataType=vm:StateData}" />
|
||||||
<AutoCompleteBox
|
<AutoCompleteBox
|
||||||
Width="100"
|
Width="100"
|
||||||
Classes="Small"
|
Classes="Small"
|
||||||
Watermark="Small"
|
PlaceholderText="Small"
|
||||||
ValueMemberBinding="{ReflectionBinding Name}" />
|
ValueMemberBinding="{Binding Name,DataType=vm:StateData}" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
<StackPanel Orientation="Horizontal">
|
<StackPanel Orientation="Horizontal">
|
||||||
<AutoCompleteBox
|
<AutoCompleteBox
|
||||||
Width="100"
|
Width="100"
|
||||||
IsEnabled="False"
|
IsEnabled="False"
|
||||||
Watermark="Disabled"
|
PlaceholderText="Disabled"
|
||||||
ValueMemberBinding="{ReflectionBinding Name}" />
|
ValueMemberBinding="{Binding Name,DataType=vm:StateData}" />
|
||||||
<AutoCompleteBox
|
<AutoCompleteBox
|
||||||
Width="100"
|
Width="100"
|
||||||
Classes="Bordered"
|
Classes="Bordered"
|
||||||
Watermark="Bordered"
|
PlaceholderText="Bordered"
|
||||||
ValueMemberBinding="{ReflectionBinding Name}" />
|
ValueMemberBinding="{Binding Name,DataType=vm:StateData}" />
|
||||||
<AutoCompleteBox
|
<AutoCompleteBox
|
||||||
Width="100"
|
Width="100"
|
||||||
Classes="Bordered"
|
Classes="Bordered"
|
||||||
IsEnabled="False"
|
IsEnabled="False"
|
||||||
ValueMemberBinding="{ReflectionBinding Name}" />
|
ValueMemberBinding="{Binding Name,DataType=vm:StateData}" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|||||||
@@ -6,174 +6,369 @@
|
|||||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
mc:Ignorable="d">
|
mc:Ignorable="d">
|
||||||
<ScrollViewer>
|
<ScrollViewer>
|
||||||
<StackPanel HorizontalAlignment="Left" Spacing="20">
|
<StackPanel HorizontalAlignment="Left" Spacing="8">
|
||||||
<StackPanel.Styles>
|
<StackPanel.Styles>
|
||||||
<Style Selector="SplitButton">
|
<Style Selector="SplitButton,DropDownButton,ToggleSplitButton">
|
||||||
<Setter Property="Flyout">
|
<Setter Property="Button.Flyout">
|
||||||
<MenuFlyout Placement="BottomEdgeAlignedRight">
|
<MenuFlyout>
|
||||||
<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 All" />
|
||||||
<MenuItem Header="Submit Updated" />
|
<MenuItem Header="Submit Updated" />
|
||||||
</MenuFlyout>
|
</MenuFlyout>
|
||||||
</Setter>
|
</Setter>
|
||||||
</Style>
|
</Style>
|
||||||
</StackPanel.Styles>
|
</StackPanel.Styles>
|
||||||
|
<HeaderedContentControl
|
||||||
|
Theme="{StaticResource GroupBox}">
|
||||||
|
<HeaderedContentControl.Header>
|
||||||
|
<StackPanel Spacing="8">
|
||||||
|
<TextBlock Text="Button/RepeatButton Theme" />
|
||||||
|
<WrapPanel ItemSpacing="4">
|
||||||
|
<TextBlock Text="Theme:" />
|
||||||
|
<Label Theme="{StaticResource TagLabel}" Classes="Blue Solid" Content="Light" />
|
||||||
|
<Label Theme="{StaticResource TagLabel}" Classes="Blue Solid" Content="Solid" />
|
||||||
|
<Label Theme="{StaticResource TagLabel}" Classes="Blue Solid" Content="Outline" />
|
||||||
|
<Label Theme="{StaticResource TagLabel}" Classes="Blue Solid" Content="Borderless" />
|
||||||
|
</WrapPanel>
|
||||||
|
<WrapPanel ItemSpacing="4">
|
||||||
|
<TextBlock Text="Classes:" />
|
||||||
|
<Label Theme="{StaticResource TagLabel}" Classes="Blue" Content="Primary" />
|
||||||
|
<Label Theme="{StaticResource TagLabel}" Classes="Blue" Content="Secondary" />
|
||||||
|
<Label Theme="{StaticResource TagLabel}" Classes="Blue" Content="Tertiary" />
|
||||||
|
<Label Theme="{StaticResource TagLabel}" Classes="Blue" Content="Success" />
|
||||||
|
<Label Theme="{StaticResource TagLabel}" Classes="Blue" Content="Warning" />
|
||||||
|
<Label Theme="{StaticResource TagLabel}" Classes="Blue" Content="Danger" />
|
||||||
|
</WrapPanel>
|
||||||
|
</StackPanel>
|
||||||
|
</HeaderedContentControl.Header>
|
||||||
|
<StackPanel HorizontalAlignment="Left" Spacing="16">
|
||||||
|
<WrapPanel ItemSpacing="16" LineSpacing="16">
|
||||||
|
<Button Content="Default" />
|
||||||
|
<Button Content="Primary" Classes="Primary" />
|
||||||
|
<Button Content="Secondary" Classes="Secondary" />
|
||||||
|
<Button Content="Tertiary" Classes="Tertiary" />
|
||||||
|
<Button Content="Success" Classes="Success" />
|
||||||
|
<Button Content="Warning" Classes="Warning" />
|
||||||
|
<Button Content="Danger" Classes="Danger" />
|
||||||
|
</WrapPanel>
|
||||||
|
<WrapPanel ItemSpacing="16" LineSpacing="16">
|
||||||
|
<Button Content="Default" Theme="{StaticResource SolidButton}" />
|
||||||
|
<Button Content="Primary" Classes="Primary" Theme="{StaticResource SolidButton}" />
|
||||||
|
<Button Content="Secondary" Classes="Secondary" Theme="{StaticResource SolidButton}" />
|
||||||
|
<Button Content="Tertiary" Classes="Tertiary" Theme="{StaticResource SolidButton}" />
|
||||||
|
<Button Content="Success" Classes="Success" Theme="{StaticResource SolidButton}" />
|
||||||
|
<Button Content="Warning" Classes="Warning" Theme="{StaticResource SolidButton}" />
|
||||||
|
<Button Content="Danger" Classes="Danger" Theme="{StaticResource SolidButton}" />
|
||||||
|
</WrapPanel>
|
||||||
|
<WrapPanel ItemSpacing="16" LineSpacing="16">
|
||||||
|
<Button Content="Default" Theme="{StaticResource OutlineButton}" />
|
||||||
|
<Button Content="Primary" Classes="Primary" Theme="{StaticResource OutlineButton}" />
|
||||||
|
<Button Content="Secondary" Classes="Secondary" Theme="{StaticResource OutlineButton}" />
|
||||||
|
<Button Content="Tertiary" Classes="Tertiary" Theme="{StaticResource OutlineButton}" />
|
||||||
|
<Button Content="Success" Classes="Success" Theme="{StaticResource OutlineButton}" />
|
||||||
|
<Button Content="Warning" Classes="Warning" Theme="{StaticResource OutlineButton}" />
|
||||||
|
<Button Content="Danger" Classes="Danger" Theme="{StaticResource OutlineButton}" />
|
||||||
|
</WrapPanel>
|
||||||
|
<WrapPanel ItemSpacing="16" LineSpacing="16">
|
||||||
|
<Button Content="Default" Theme="{StaticResource BorderlessButton}" />
|
||||||
|
<Button Content="Primary" Classes="Primary" Theme="{StaticResource BorderlessButton}" />
|
||||||
|
<Button Content="Secondary" Classes="Secondary" Theme="{StaticResource BorderlessButton}" />
|
||||||
|
<Button Content="Tertiary" Classes="Tertiary" Theme="{StaticResource BorderlessButton}" />
|
||||||
|
<Button Content="Success" Classes="Success" Theme="{StaticResource BorderlessButton}" />
|
||||||
|
<Button Content="Warning" Classes="Warning" Theme="{StaticResource BorderlessButton}" />
|
||||||
|
<Button Content="Danger" Classes="Danger" Theme="{StaticResource BorderlessButton}" />
|
||||||
|
</WrapPanel>
|
||||||
|
</StackPanel>
|
||||||
|
</HeaderedContentControl>
|
||||||
|
|
||||||
<TextBlock>Light (Default)</TextBlock>
|
<HeaderedContentControl
|
||||||
<StackPanel Orientation="Horizontal" Spacing="20">
|
Theme="{StaticResource GroupBox}"
|
||||||
<Button Classes="Primary">Primary</Button>
|
Header="Prohibited Status">
|
||||||
<Button Classes="Secondary">Secondary</Button>
|
<WrapPanel ItemSpacing="16" LineSpacing="16">
|
||||||
<Button Classes="Tertiary">Tertiary</Button>
|
<Button Content="Light" IsEnabled="False" />
|
||||||
<Button Classes="Success">Success</Button>
|
<Button Content="Solid" IsEnabled="False" Theme="{StaticResource SolidButton}" />
|
||||||
<Button Classes="Warning">Warning</Button>
|
<Button Content="Outline" IsEnabled="False" Theme="{StaticResource OutlineButton}" />
|
||||||
<Button Classes="Danger">Danger</Button>
|
<Button Content="Borderless" IsEnabled="False" Theme="{StaticResource BorderlessButton}" />
|
||||||
<Button Classes="Danger" IsEnabled="False">Disabled</Button>
|
</WrapPanel>
|
||||||
</StackPanel>
|
</HeaderedContentControl>
|
||||||
<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>Outline</TextBlock>
|
|
||||||
<StackPanel Orientation="Horizontal" Spacing="20">
|
|
||||||
<Button Classes="Primary" Theme="{DynamicResource OutlineButton}">Primary</Button>
|
|
||||||
<Button Classes="Secondary" Theme="{DynamicResource OutlineButton}">Secondary</Button>
|
|
||||||
<Button Classes="Tertiary" Theme="{DynamicResource OutlineButton}">Tertiary</Button>
|
|
||||||
<Button Classes="Success" Theme="{DynamicResource OutlineButton}">Success</Button>
|
|
||||||
<Button Classes="Warning" Theme="{DynamicResource OutlineButton}">Warning</Button>
|
|
||||||
<Button Classes="Danger" Theme="{DynamicResource OutlineButton}">Danger</Button>
|
|
||||||
<Button Classes="Danger" Theme="{DynamicResource OutlineButton}" IsEnabled="False">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>Disabled</TextBlock>
|
|
||||||
<StackPanel Background="{DynamicResource SemiColorBackground1}" Orientation="Horizontal" Spacing="20">
|
|
||||||
<Button IsEnabled="False">Light</Button>
|
|
||||||
<Button IsEnabled="False" Theme="{DynamicResource SolidButton}">Solid</Button>
|
|
||||||
<Button IsEnabled="False" Theme="{DynamicResource OutlineButton}">Outline</Button>
|
|
||||||
<Button IsEnabled="False" Theme="{DynamicResource BorderlessButton}">Borderless</Button>
|
|
||||||
</StackPanel>
|
|
||||||
<TextBlock>Size Classes</TextBlock>
|
|
||||||
<StackPanel Orientation="Horizontal" Spacing="20">
|
|
||||||
<Button Classes="Primary Small">Small</Button>
|
|
||||||
<Button Classes="Primary">Default</Button>
|
|
||||||
<Button Classes="Primary Large">Large</Button>
|
|
||||||
</StackPanel>
|
|
||||||
|
|
||||||
<TextBlock>DropDownButton</TextBlock>
|
<HeaderedContentControl
|
||||||
<StackPanel Orientation="Horizontal" Spacing="8">
|
Theme="{StaticResource GroupBox}">
|
||||||
<DropDownButton Content="Primary" />
|
<HeaderedContentControl.Header>
|
||||||
<DropDownButton Classes="Secondary" Content="Secondary" />
|
<StackPanel Spacing="8">
|
||||||
<DropDownButton Classes="Tertiary" Content="Tertiary" />
|
<WrapPanel ItemSpacing="4">
|
||||||
<DropDownButton Classes="Success" Content="Success" />
|
<TextBlock Text="Size Classes:" />
|
||||||
<DropDownButton Classes="Warning" Content="Warning" />
|
<Label Theme="{StaticResource TagLabel}" Classes="Blue" Content="Large" />
|
||||||
<DropDownButton Classes="Danger" Content="Danger" />
|
<Label Theme="{StaticResource TagLabel}" Classes="Blue" Content="Small" />
|
||||||
<DropDownButton
|
</WrapPanel>
|
||||||
Classes="Danger"
|
</StackPanel>
|
||||||
Content="Disabled"
|
</HeaderedContentControl.Header>
|
||||||
IsEnabled="False" />
|
<WrapPanel ItemSpacing="16" LineSpacing="16">
|
||||||
</StackPanel>
|
<Button Content="Large" Classes="Large" />
|
||||||
<StackPanel Orientation="Horizontal" Spacing="8">
|
<Button Content="Default" />
|
||||||
<DropDownButton Content="Default" Classes="Success" />
|
<Button Content="Small" Classes="Small" />
|
||||||
<DropDownButton Content="Solid" Theme="{DynamicResource SolidDropDownButton}" Classes="Success" />
|
</WrapPanel>
|
||||||
<DropDownButton Content="Outline" Theme="{DynamicResource OutlineDropDownButton}" Classes="Success" />
|
</HeaderedContentControl>
|
||||||
<DropDownButton Content="Borderless" Theme="{DynamicResource BorderlessDropDownButton}" Classes="Success" />
|
|
||||||
<DropDownButton Content="Default" Classes="Success" IsEnabled="False" />
|
|
||||||
<DropDownButton Content="Solid" Theme="{DynamicResource SolidDropDownButton}" Classes="Success" IsEnabled="False" />
|
|
||||||
<DropDownButton Content="Outline" Theme="{DynamicResource OutlineDropDownButton}" Classes="Success" IsEnabled="False" />
|
|
||||||
<DropDownButton Content="Borderless" Theme="{DynamicResource BorderlessDropDownButton}" Classes="Success" IsEnabled="False" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal" Spacing="8">
|
|
||||||
<DropDownButton Classes="Small" Content="Small" />
|
|
||||||
<DropDownButton Content="Default" />
|
|
||||||
<DropDownButton Classes="Large" Content="Large" />
|
|
||||||
</StackPanel>
|
|
||||||
|
|
||||||
<TextBlock>SplitButton</TextBlock>
|
<HeaderedContentControl
|
||||||
<StackPanel Orientation="Horizontal" Spacing="8">
|
Theme="{StaticResource GroupBox}">
|
||||||
<SplitButton Content="Primary" />
|
<HeaderedContentControl.Header>
|
||||||
<SplitButton Classes="Secondary" Content="Secondary" />
|
<StackPanel Spacing="8">
|
||||||
<SplitButton Classes="Tertiary" Content="Tertiary" />
|
<TextBlock Text="AI style - Colorful Button" />
|
||||||
<SplitButton Classes="Success" Content="Success" />
|
<WrapPanel ItemSpacing="4">
|
||||||
<SplitButton Classes="Warning" Content="Warning" />
|
<TextBlock Text="Theme:" />
|
||||||
<SplitButton Classes="Danger" Content="Danger" />
|
<Label Theme="{StaticResource TagLabel}" Classes="Colorful Gradient Solid" Content="Light" />
|
||||||
<SplitButton Classes="Danger" Content="Disabled" IsEnabled="False" />
|
<Label Theme="{StaticResource TagLabel}" Classes="Colorful Gradient Solid" Content="Solid" />
|
||||||
</StackPanel>
|
<Label Theme="{StaticResource TagLabel}" Classes="Colorful Gradient Solid" Content="Outline" />
|
||||||
<StackPanel Orientation="Horizontal" Spacing="8">
|
<Label Theme="{StaticResource TagLabel}" Classes="Colorful Gradient Solid" Content="Borderless" />
|
||||||
<SplitButton Content="Default" Classes="Success" />
|
</WrapPanel>
|
||||||
<SplitButton Content="Solid" Theme="{DynamicResource SolidSplitButton}" Classes="Success" />
|
<WrapPanel ItemSpacing="4">
|
||||||
<SplitButton Content="Outline" Theme="{DynamicResource OutlineSplitButton}" Classes="Success" />
|
<TextBlock Text="Classes:" />
|
||||||
<SplitButton Content="Borderless" Theme="{DynamicResource BorderlessSplitButton}" Classes="Success" />
|
<Label Theme="{StaticResource TagLabel}" Classes="Colorful Gradient" Content="Colorful Primary" />
|
||||||
<SplitButton Content="Default" Classes="Success" IsEnabled="False" />
|
<Label Theme="{StaticResource TagLabel}" Classes="Colorful Gradient" Content="Colorful Tertiary" />
|
||||||
<SplitButton Content="Solid" Theme="{DynamicResource SolidSplitButton}" Classes="Success" IsEnabled="False" />
|
</WrapPanel>
|
||||||
<SplitButton Content="Outline" Theme="{DynamicResource OutlineSplitButton}" Classes="Success" IsEnabled="False" />
|
</StackPanel>
|
||||||
<SplitButton Content="Borderless" Theme="{DynamicResource BorderlessSplitButton}" Classes="Success" IsEnabled="False" />
|
</HeaderedContentControl.Header>
|
||||||
</StackPanel>
|
<StackPanel HorizontalAlignment="Left" Spacing="16">
|
||||||
<StackPanel Orientation="Horizontal" Spacing="8">
|
<WrapPanel ItemSpacing="16" LineSpacing="16">
|
||||||
<SplitButton Classes="Small" Content="Small" />
|
<Button Content="Primary" Classes="Colorful Primary" />
|
||||||
<SplitButton Content="Default" />
|
<Button Content="Tertiary" Classes="Colorful Tertiary" />
|
||||||
<SplitButton Classes="Large" Content="Large" />
|
<Button Content="Disabled" Classes="Colorful Primary" IsEnabled="False" />
|
||||||
</StackPanel>
|
</WrapPanel>
|
||||||
|
<WrapPanel ItemSpacing="16" LineSpacing="16">
|
||||||
|
<Button Content="Primary" Classes="Colorful Primary" Theme="{StaticResource SolidButton}" />
|
||||||
|
<Button Content="Tertiary" Classes="Colorful Tertiary" Theme="{StaticResource SolidButton}" />
|
||||||
|
<Button Content="Disabled" Classes="Colorful Primary" Theme="{StaticResource SolidButton}" IsEnabled="False" />
|
||||||
|
</WrapPanel>
|
||||||
|
<WrapPanel ItemSpacing="16" LineSpacing="16">
|
||||||
|
<Button Content="Primary" Classes="Colorful Primary" Theme="{StaticResource OutlineButton}" />
|
||||||
|
<Button Content="Tertiary" Classes="Colorful Tertiary" Theme="{StaticResource OutlineButton}" />
|
||||||
|
<Button Content="Disabled" Classes="Colorful Primary" Theme="{StaticResource OutlineButton}" IsEnabled="False" />
|
||||||
|
</WrapPanel>
|
||||||
|
<WrapPanel ItemSpacing="16" LineSpacing="16">
|
||||||
|
<Button Content="Primary" Classes="Colorful Primary" Theme="{StaticResource BorderlessButton}" />
|
||||||
|
<Button Content="Tertiary" Classes="Colorful Tertiary" Theme="{StaticResource BorderlessButton}" />
|
||||||
|
<Button Content="Disabled" Classes="Colorful Primary" Theme="{StaticResource BorderlessButton}" IsEnabled="False" />
|
||||||
|
</WrapPanel>
|
||||||
|
</StackPanel>
|
||||||
|
</HeaderedContentControl>
|
||||||
|
|
||||||
<TextBlock>ToggleSplitButton</TextBlock>
|
<HeaderedContentControl
|
||||||
<StackPanel Orientation="Horizontal" Spacing="8">
|
Theme="{StaticResource GroupBox}" Header="DropDownButton">
|
||||||
<ToggleSplitButton Content="Primary" />
|
<StackPanel HorizontalAlignment="Left" Spacing="16">
|
||||||
<ToggleSplitButton Classes="Secondary" Content="Secondary" />
|
<WrapPanel ItemSpacing="16" LineSpacing="16">
|
||||||
<ToggleSplitButton Classes="Tertiary" Content="Tertiary" />
|
<DropDownButton Content="Default" />
|
||||||
<ToggleSplitButton Classes="Success" Content="Success" />
|
<DropDownButton Content="Primary" Classes="Primary" />
|
||||||
<ToggleSplitButton Classes="Warning" Content="Warning" />
|
<DropDownButton Content="Secondary" Classes="Secondary" />
|
||||||
<ToggleSplitButton Classes="Danger" Content="Danger" />
|
<DropDownButton Content="Tertiary" Classes="Tertiary" />
|
||||||
<ToggleSplitButton Classes="Danger" Content="Disabled" IsEnabled="False" />
|
<DropDownButton Content="Success" Classes="Success" />
|
||||||
</StackPanel>
|
<DropDownButton Content="Warning" Classes="Warning" />
|
||||||
<StackPanel Orientation="Horizontal" Spacing="8">
|
<DropDownButton Content="Danger" Classes="Danger" />
|
||||||
<ToggleSplitButton Content="Default" Classes="Success" />
|
</WrapPanel>
|
||||||
<ToggleSplitButton Content="Checked" Classes="Success" IsChecked="True" />
|
<WrapPanel ItemSpacing="16" LineSpacing="16">
|
||||||
<ToggleSplitButton Content="Default" Classes="Success" IsEnabled="False" />
|
<DropDownButton Content="Default" Theme="{StaticResource SolidDropDownButton}" />
|
||||||
<ToggleSplitButton Content="Checked" Classes="Success" IsChecked="True" IsEnabled="False" />
|
<DropDownButton Content="Primary" Classes="Primary" Theme="{StaticResource SolidDropDownButton}" />
|
||||||
</StackPanel>
|
<DropDownButton Content="Secondary" Classes="Secondary" Theme="{StaticResource SolidDropDownButton}" />
|
||||||
<StackPanel Orientation="Horizontal" Spacing="8">
|
<DropDownButton Content="Tertiary" Classes="Tertiary" Theme="{StaticResource SolidDropDownButton}" />
|
||||||
<ToggleSplitButton Classes="Small" Content="Small" />
|
<DropDownButton Content="Success" Classes="Success" Theme="{StaticResource SolidDropDownButton}" />
|
||||||
<ToggleSplitButton Content="Default" />
|
<DropDownButton Content="Warning" Classes="Warning" Theme="{StaticResource SolidDropDownButton}" />
|
||||||
<ToggleSplitButton Classes="Large" Content="Large" />
|
<DropDownButton Content="Danger" Classes="Danger" Theme="{StaticResource SolidDropDownButton}" />
|
||||||
</StackPanel>
|
</WrapPanel>
|
||||||
|
<WrapPanel ItemSpacing="16" LineSpacing="16">
|
||||||
|
<DropDownButton Content="Default" Theme="{StaticResource OutlineDropDownButton}" />
|
||||||
|
<DropDownButton Content="Primary" Classes="Primary" Theme="{StaticResource OutlineDropDownButton}" />
|
||||||
|
<DropDownButton Content="Secondary" Classes="Secondary" Theme="{StaticResource OutlineDropDownButton}" />
|
||||||
|
<DropDownButton Content="Tertiary" Classes="Tertiary" Theme="{StaticResource OutlineDropDownButton}" />
|
||||||
|
<DropDownButton Content="Success" Classes="Success" Theme="{StaticResource OutlineDropDownButton}" />
|
||||||
|
<DropDownButton Content="Warning" Classes="Warning" Theme="{StaticResource OutlineDropDownButton}" />
|
||||||
|
<DropDownButton Content="Danger" Classes="Danger" Theme="{StaticResource OutlineDropDownButton}" />
|
||||||
|
</WrapPanel>
|
||||||
|
<WrapPanel ItemSpacing="16" LineSpacing="16">
|
||||||
|
<DropDownButton Content="Default" Theme="{StaticResource BorderlessDropDownButton}" />
|
||||||
|
<DropDownButton Content="Primary" Classes="Primary" Theme="{StaticResource BorderlessDropDownButton}" />
|
||||||
|
<DropDownButton Content="Secondary" Classes="Secondary" Theme="{StaticResource BorderlessDropDownButton}" />
|
||||||
|
<DropDownButton Content="Tertiary" Classes="Tertiary" Theme="{StaticResource BorderlessDropDownButton}" />
|
||||||
|
<DropDownButton Content="Success" Classes="Success" Theme="{StaticResource BorderlessDropDownButton}" />
|
||||||
|
<DropDownButton Content="Warning" Classes="Warning" Theme="{StaticResource BorderlessDropDownButton}" />
|
||||||
|
<DropDownButton Content="Danger" Classes="Danger" Theme="{StaticResource BorderlessDropDownButton}" />
|
||||||
|
</WrapPanel>
|
||||||
|
<WrapPanel ItemSpacing="16" LineSpacing="16">
|
||||||
|
<DropDownButton Content="Light" IsEnabled="False" />
|
||||||
|
<DropDownButton Content="Solid" IsEnabled="False" Theme="{StaticResource SolidDropDownButton}" />
|
||||||
|
<DropDownButton Content="Outline" IsEnabled="False" Theme="{StaticResource OutlineDropDownButton}" />
|
||||||
|
<DropDownButton Content="Borderless" IsEnabled="False" Theme="{StaticResource BorderlessDropDownButton}" />
|
||||||
|
</WrapPanel>
|
||||||
|
<WrapPanel ItemSpacing="16" LineSpacing="16">
|
||||||
|
<DropDownButton Content="Large" Classes="Large" />
|
||||||
|
<DropDownButton Content="Default" />
|
||||||
|
<DropDownButton Content="Small" Classes="Small" />
|
||||||
|
</WrapPanel>
|
||||||
|
<WrapPanel ItemSpacing="16" LineSpacing="16">
|
||||||
|
<DropDownButton Content="Primary" Classes="Colorful Primary" />
|
||||||
|
<DropDownButton Content="Tertiary" Classes="Colorful Tertiary" />
|
||||||
|
<DropDownButton Content="Disabled" Classes="Colorful Primary" IsEnabled="False" />
|
||||||
|
</WrapPanel>
|
||||||
|
<WrapPanel ItemSpacing="16" LineSpacing="16">
|
||||||
|
<DropDownButton Content="Primary" Classes="Colorful Primary" Theme="{StaticResource SolidDropDownButton}" />
|
||||||
|
<DropDownButton Content="Tertiary" Classes="Colorful Tertiary" Theme="{StaticResource SolidDropDownButton}" />
|
||||||
|
<DropDownButton Content="Disabled" Classes="Colorful Primary" Theme="{StaticResource SolidDropDownButton}" IsEnabled="False" />
|
||||||
|
</WrapPanel>
|
||||||
|
<WrapPanel ItemSpacing="16" LineSpacing="16">
|
||||||
|
<DropDownButton Content="Primary" Classes="Colorful Primary" Theme="{StaticResource OutlineDropDownButton}" />
|
||||||
|
<DropDownButton Content="Tertiary" Classes="Colorful Tertiary" Theme="{StaticResource OutlineDropDownButton}" />
|
||||||
|
<DropDownButton Content="Disabled" Classes="Colorful Primary" Theme="{StaticResource OutlineDropDownButton}" IsEnabled="False" />
|
||||||
|
</WrapPanel>
|
||||||
|
<WrapPanel ItemSpacing="16" LineSpacing="16">
|
||||||
|
<DropDownButton Content="Primary" Classes="Colorful Primary" Theme="{StaticResource BorderlessDropDownButton}" />
|
||||||
|
<DropDownButton Content="Tertiary" Classes="Colorful Tertiary" Theme="{StaticResource BorderlessDropDownButton}" />
|
||||||
|
<DropDownButton Content="Disabled" Classes="Colorful Primary" Theme="{StaticResource BorderlessDropDownButton}" IsEnabled="False" />
|
||||||
|
</WrapPanel>
|
||||||
|
</StackPanel>
|
||||||
|
</HeaderedContentControl>
|
||||||
|
|
||||||
|
<HeaderedContentControl
|
||||||
|
Theme="{StaticResource GroupBox}" Header="SplitButton">
|
||||||
|
<StackPanel HorizontalAlignment="Left" Spacing="16">
|
||||||
|
<WrapPanel ItemSpacing="16" LineSpacing="16">
|
||||||
|
<SplitButton Content="Default" />
|
||||||
|
<SplitButton Content="Primary" Classes="Primary" />
|
||||||
|
<SplitButton Content="Secondary" Classes="Secondary" />
|
||||||
|
<SplitButton Content="Tertiary" Classes="Tertiary" />
|
||||||
|
<SplitButton Content="Success" Classes="Success" />
|
||||||
|
<SplitButton Content="Warning" Classes="Warning" />
|
||||||
|
<SplitButton Content="Danger" Classes="Danger" />
|
||||||
|
</WrapPanel>
|
||||||
|
<WrapPanel ItemSpacing="16" LineSpacing="16">
|
||||||
|
<SplitButton Content="Default" Theme="{StaticResource SolidSplitButton}" />
|
||||||
|
<SplitButton Content="Primary" Classes="Primary" Theme="{StaticResource SolidSplitButton}" />
|
||||||
|
<SplitButton Content="Secondary" Classes="Secondary" Theme="{StaticResource SolidSplitButton}" />
|
||||||
|
<SplitButton Content="Tertiary" Classes="Tertiary" Theme="{StaticResource SolidSplitButton}" />
|
||||||
|
<SplitButton Content="Success" Classes="Success" Theme="{StaticResource SolidSplitButton}" />
|
||||||
|
<SplitButton Content="Warning" Classes="Warning" Theme="{StaticResource SolidSplitButton}" />
|
||||||
|
<SplitButton Content="Danger" Classes="Danger" Theme="{StaticResource SolidSplitButton}" />
|
||||||
|
</WrapPanel>
|
||||||
|
<WrapPanel ItemSpacing="16" LineSpacing="16">
|
||||||
|
<SplitButton Content="Default" Theme="{StaticResource OutlineSplitButton}" />
|
||||||
|
<SplitButton Content="Primary" Classes="Primary" Theme="{StaticResource OutlineSplitButton}" />
|
||||||
|
<SplitButton Content="Secondary" Classes="Secondary" Theme="{StaticResource OutlineSplitButton}" />
|
||||||
|
<SplitButton Content="Tertiary" Classes="Tertiary" Theme="{StaticResource OutlineSplitButton}" />
|
||||||
|
<SplitButton Content="Success" Classes="Success" Theme="{StaticResource OutlineSplitButton}" />
|
||||||
|
<SplitButton Content="Warning" Classes="Warning" Theme="{StaticResource OutlineSplitButton}" />
|
||||||
|
<SplitButton Content="Danger" Classes="Danger" Theme="{StaticResource OutlineSplitButton}" />
|
||||||
|
</WrapPanel>
|
||||||
|
<WrapPanel ItemSpacing="16" LineSpacing="16">
|
||||||
|
<SplitButton Content="Default" Theme="{StaticResource BorderlessSplitButton}" />
|
||||||
|
<SplitButton Content="Primary" Classes="Primary" Theme="{StaticResource BorderlessSplitButton}" />
|
||||||
|
<SplitButton Content="Secondary" Classes="Secondary" Theme="{StaticResource BorderlessSplitButton}" />
|
||||||
|
<SplitButton Content="Tertiary" Classes="Tertiary" Theme="{StaticResource BorderlessSplitButton}" />
|
||||||
|
<SplitButton Content="Success" Classes="Success" Theme="{StaticResource BorderlessSplitButton}" />
|
||||||
|
<SplitButton Content="Warning" Classes="Warning" Theme="{StaticResource BorderlessSplitButton}" />
|
||||||
|
<SplitButton Content="Danger" Classes="Danger" Theme="{StaticResource BorderlessSplitButton}" />
|
||||||
|
</WrapPanel>
|
||||||
|
<WrapPanel ItemSpacing="16" LineSpacing="16">
|
||||||
|
<SplitButton Content="Light" IsEnabled="False" />
|
||||||
|
<SplitButton Content="Solid" IsEnabled="False" Theme="{StaticResource SolidSplitButton}" />
|
||||||
|
<SplitButton Content="Outline" IsEnabled="False" Theme="{StaticResource OutlineSplitButton}" />
|
||||||
|
<SplitButton Content="Borderless" IsEnabled="False" Theme="{StaticResource BorderlessSplitButton}" />
|
||||||
|
</WrapPanel>
|
||||||
|
<WrapPanel ItemSpacing="16" LineSpacing="16">
|
||||||
|
<SplitButton Content="Large" Classes="Large" />
|
||||||
|
<SplitButton Content="Default" />
|
||||||
|
<SplitButton Content="Small" Classes="Small" />
|
||||||
|
</WrapPanel>
|
||||||
|
</StackPanel>
|
||||||
|
</HeaderedContentControl>
|
||||||
|
|
||||||
|
<HeaderedContentControl
|
||||||
|
Theme="{StaticResource GroupBox}"
|
||||||
|
Header="ToggleSplitButton">
|
||||||
|
<StackPanel HorizontalAlignment="Left" Spacing="24">
|
||||||
|
<WrapPanel ItemSpacing="16" LineSpacing="16">
|
||||||
|
<ToggleSplitButton Content="Default" />
|
||||||
|
<ToggleSplitButton Classes="Primary" 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" />
|
||||||
|
</WrapPanel>
|
||||||
|
<WrapPanel ItemSpacing="16" LineSpacing="16">
|
||||||
|
<ToggleSplitButton Content="Default" IsChecked="True" />
|
||||||
|
<ToggleSplitButton Classes="Primary" Content="Primary" IsChecked="True" />
|
||||||
|
<ToggleSplitButton Classes="Secondary" Content="Secondary" IsChecked="True" />
|
||||||
|
<ToggleSplitButton Classes="Tertiary" Content="Tertiary" IsChecked="True" />
|
||||||
|
<ToggleSplitButton Classes="Success" Content="Success" IsChecked="True" />
|
||||||
|
<ToggleSplitButton Classes="Warning" Content="Warning" IsChecked="True" />
|
||||||
|
<ToggleSplitButton Classes="Danger" Content="Danger" IsChecked="True" />
|
||||||
|
</WrapPanel>
|
||||||
|
<WrapPanel ItemSpacing="16" LineSpacing="16">
|
||||||
|
<ToggleSplitButton Content="Unchecked" Classes="Success" IsEnabled="False" />
|
||||||
|
<ToggleSplitButton Content="Checked" Classes="Success" IsChecked="True" IsEnabled="False" />
|
||||||
|
</WrapPanel>
|
||||||
|
<WrapPanel ItemSpacing="16" LineSpacing="16">
|
||||||
|
<ToggleSplitButton Content="Large" Classes="Large" />
|
||||||
|
<ToggleSplitButton Content="Default" />
|
||||||
|
<ToggleSplitButton Content="Small" Classes="Small" />
|
||||||
|
</WrapPanel>
|
||||||
|
</StackPanel>
|
||||||
|
</HeaderedContentControl>
|
||||||
|
|
||||||
|
<HeaderedContentControl
|
||||||
|
Theme="{StaticResource GroupBox}" Header="ToggleButton">
|
||||||
|
<StackPanel HorizontalAlignment="Left" Spacing="16">
|
||||||
|
<WrapPanel ItemSpacing="16" LineSpacing="16">
|
||||||
|
<ToggleButton Content="Default" />
|
||||||
|
<ToggleButton Content="Primary" Classes="Primary" />
|
||||||
|
<ToggleButton Content="Secondary" Classes="Secondary" />
|
||||||
|
<ToggleButton Content="Tertiary" Classes="Tertiary" />
|
||||||
|
<ToggleButton Content="Success" Classes="Success" />
|
||||||
|
<ToggleButton Content="Warning" Classes="Warning" />
|
||||||
|
<ToggleButton Content="Danger" Classes="Danger" />
|
||||||
|
</WrapPanel>
|
||||||
|
<WrapPanel ItemSpacing="16" LineSpacing="16">
|
||||||
|
<ToggleButton Content="Default" IsChecked="True" />
|
||||||
|
<ToggleButton Content="Primary" Classes="Primary" IsChecked="True" />
|
||||||
|
<ToggleButton Content="Secondary" Classes="Secondary" IsChecked="True" />
|
||||||
|
<ToggleButton Content="Tertiary" Classes="Tertiary" IsChecked="True" />
|
||||||
|
<ToggleButton Content="Success" Classes="Success" IsChecked="True" />
|
||||||
|
<ToggleButton Content="Warning" Classes="Warning" IsChecked="True" />
|
||||||
|
<ToggleButton Content="Danger" Classes="Danger" IsChecked="True" />
|
||||||
|
</WrapPanel>
|
||||||
|
<WrapPanel ItemSpacing="16" LineSpacing="16">
|
||||||
|
<ToggleButton Content="Default" IsChecked="{x:Null}" IsThreeState="True" />
|
||||||
|
<ToggleButton Content="Primary" Classes="Primary" IsChecked="{x:Null}" IsThreeState="True" />
|
||||||
|
<ToggleButton Content="Secondary" Classes="Secondary" IsChecked="{x:Null}" IsThreeState="True" />
|
||||||
|
<ToggleButton Content="Tertiary" Classes="Tertiary" IsChecked="{x:Null}" IsThreeState="True" />
|
||||||
|
<ToggleButton Content="Success" Classes="Success" IsChecked="{x:Null}" IsThreeState="True" />
|
||||||
|
<ToggleButton Content="Warning" Classes="Warning" IsChecked="{x:Null}" IsThreeState="True" />
|
||||||
|
<ToggleButton Content="Danger" Classes="Danger" IsChecked="{x:Null}" IsThreeState="True" />
|
||||||
|
</WrapPanel>
|
||||||
|
<WrapPanel ItemSpacing="16" LineSpacing="16">
|
||||||
|
<ToggleButton Content="Unchecked" IsEnabled="False" />
|
||||||
|
<ToggleButton Content="Checked" IsEnabled="False" IsChecked="True" />
|
||||||
|
<ToggleButton Content="Indeterminate" IsEnabled="False" IsChecked="{x:Null}" IsThreeState="True" />
|
||||||
|
</WrapPanel>
|
||||||
|
<WrapPanel ItemSpacing="16" LineSpacing="16">
|
||||||
|
<ToggleButton Content="Large" Classes="Large" />
|
||||||
|
<ToggleButton Content="Default" />
|
||||||
|
<ToggleButton Content="Small" Classes="Small" />
|
||||||
|
</WrapPanel>
|
||||||
|
<WrapPanel ItemSpacing="16" LineSpacing="16">
|
||||||
|
<ToggleButton Content="Primary" Classes="Colorful Primary" />
|
||||||
|
<ToggleButton Content="Tertiary" Classes="Colorful Tertiary" />
|
||||||
|
<ToggleButton Content="Disabled" Classes="Colorful Primary" IsEnabled="False" />
|
||||||
|
</WrapPanel>
|
||||||
|
<WrapPanel ItemSpacing="16" LineSpacing="16">
|
||||||
|
<ToggleButton Content="Primary" Classes="Colorful Primary" IsChecked="True" />
|
||||||
|
<ToggleButton Content="Tertiary" Classes="Colorful Tertiary" IsChecked="True" />
|
||||||
|
<ToggleButton Content="Disabled" Classes="Colorful Primary" IsChecked="True" IsEnabled="False" />
|
||||||
|
</WrapPanel>
|
||||||
|
<WrapPanel ItemSpacing="16" LineSpacing="16">
|
||||||
|
<ToggleButton Content="Primary" Classes="Colorful Primary" IsChecked="{x:Null}" IsThreeState="True" />
|
||||||
|
<ToggleButton Content="Tertiary" Classes="Colorful Tertiary" IsChecked="{x:Null}" IsThreeState="True" />
|
||||||
|
<ToggleButton Content="Disabled" Classes="Colorful Primary" IsChecked="{x:Null}" IsThreeState="True" IsEnabled="False" />
|
||||||
|
</WrapPanel>
|
||||||
|
</StackPanel>
|
||||||
|
</HeaderedContentControl>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</ScrollViewer>
|
</ScrollViewer>
|
||||||
</UserControl>
|
</UserControl>
|
||||||
@@ -8,6 +8,10 @@
|
|||||||
d:DesignWidth="800"
|
d:DesignWidth="800"
|
||||||
mc:Ignorable="d">
|
mc:Ignorable="d">
|
||||||
<StackPanel HorizontalAlignment="Left" Spacing="20">
|
<StackPanel HorizontalAlignment="Left" Spacing="20">
|
||||||
|
<StackPanel Orientation="Horizontal">
|
||||||
|
<ToggleSwitch Name="showSpinCheck" IsChecked="True" Content="Show Button Spinner" />
|
||||||
|
<ToggleSwitch Name="allowSpinCheck" IsChecked="True" Content="Allow Spin" />
|
||||||
|
</StackPanel>
|
||||||
<ButtonSpinner
|
<ButtonSpinner
|
||||||
Height="30"
|
Height="30"
|
||||||
AllowSpin="{Binding #allowSpinCheck.IsChecked}"
|
AllowSpin="{Binding #allowSpinCheck.IsChecked}"
|
||||||
|
|||||||
@@ -33,6 +33,6 @@
|
|||||||
Margin="0,0,0,8"
|
Margin="0,0,0,8"
|
||||||
CustomDateFormatString="ddd, MMM d"
|
CustomDateFormatString="ddd, MMM d"
|
||||||
SelectedDateFormat="Custom" />
|
SelectedDateFormat="Custom" />
|
||||||
<CalendarDatePicker Margin="0,0,0,8" Watermark="Watermark" />
|
<CalendarDatePicker Margin="0,0,0,8" PlaceholderText="Placeholder" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</UserControl>
|
</UserControl>
|
||||||
@@ -7,46 +7,51 @@
|
|||||||
xmlns:vm="clr-namespace:Semi.Avalonia.Demo.ViewModels"
|
xmlns:vm="clr-namespace:Semi.Avalonia.Demo.ViewModels"
|
||||||
d:DesignHeight="800"
|
d:DesignHeight="800"
|
||||||
d:DesignWidth="800"
|
d:DesignWidth="800"
|
||||||
mc:Ignorable="d">
|
mc:Ignorable="d"
|
||||||
|
x:DataType="vm:ComboBoxDemoViewModel">
|
||||||
<Design.DataContext>
|
<Design.DataContext>
|
||||||
<vm:ComboBoxDemoViewModel />
|
<vm:ComboBoxDemoViewModel />
|
||||||
</Design.DataContext>
|
</Design.DataContext>
|
||||||
<StackPanel Spacing="20">
|
<ScrollViewer>
|
||||||
<StackPanel.Styles>
|
<StackPanel Spacing="20">
|
||||||
<Style Selector="ComboBox">
|
<StackPanel.Styles>
|
||||||
<Setter Property="Width" Value="300" />
|
<Style Selector="ComboBox">
|
||||||
<Setter Property="ItemsSource" Value="{Binding Items}" />
|
<Setter Property="Width" Value="300" />
|
||||||
</Style>
|
<Setter Property="ItemsSource" Value="{Binding Items}" />
|
||||||
</StackPanel.Styles>
|
</Style>
|
||||||
|
</StackPanel.Styles>
|
||||||
|
|
||||||
<ComboBox />
|
<ComboBox />
|
||||||
<ComboBox Classes="ClearButton" />
|
<ComboBox Classes="ClearButton" />
|
||||||
<ComboBox PlaceholderText="Please Select" />
|
<ComboBox PlaceholderText="Please Select" />
|
||||||
<ComboBox IsEnabled="False" />
|
<ComboBox IsEnabled="False" />
|
||||||
<ComboBox Classes="Large" IsEnabled="False" />
|
<ComboBox Classes="Large" IsEnabled="False" />
|
||||||
<ComboBox Classes="Small" />
|
<ComboBox Classes="Small" />
|
||||||
<ComboBox Classes="Bordered" />
|
<ComboBox Classes="Bordered" />
|
||||||
<ComboBox Classes="Bordered" IsEnabled="False" />
|
<ComboBox Classes="Bordered" IsEnabled="False" />
|
||||||
<ComboBox>
|
<ComboBox>
|
||||||
<ComboBox.SelectionBoxItemTemplate>
|
<ComboBox.SelectionBoxItemTemplate>
|
||||||
<DataTemplate DataType="x:String">
|
<DataTemplate DataType="x:String">
|
||||||
<ContentControl BorderThickness="1"
|
<ContentControl BorderThickness="1"
|
||||||
BorderBrush="Gold"
|
BorderBrush="Gold"
|
||||||
Content="{Binding}" />
|
Content="{Binding}" />
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</ComboBox.SelectionBoxItemTemplate>
|
</ComboBox.SelectionBoxItemTemplate>
|
||||||
</ComboBox>
|
</ComboBox>
|
||||||
|
|
||||||
<StackPanel Orientation="Horizontal">
|
<StackPanel Orientation="Horizontal">
|
||||||
<ComboBox Width="100" Classes="Large" PlaceholderText="Large" />
|
<ComboBox Width="100" Classes="Large" PlaceholderText="Large" />
|
||||||
<ComboBox Width="100" PlaceholderText="Default" />
|
<ComboBox Width="100" PlaceholderText="Default" />
|
||||||
<ComboBox Width="100" Classes="Small" PlaceholderText="Small" />
|
<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>
|
||||||
|
<ToggleSwitch Name="toggle" IsChecked="True" Content="IsEditable" />
|
||||||
|
<ComboBox IsEditable="{Binding #toggle.IsChecked}" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
</ScrollViewer>
|
||||||
<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>
|
</UserControl>
|
||||||
94
demo/Semi.Avalonia.Demo/Pages/CommandBarDemo.axaml
Normal file
94
demo/Semi.Avalonia.Demo/Pages/CommandBarDemo.axaml
Normal file
@@ -0,0 +1,94 @@
|
|||||||
|
<UserControl
|
||||||
|
x:Class="Semi.Avalonia.Demo.Pages.CommandBarDemo"
|
||||||
|
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:collections="clr-namespace:Avalonia.Collections;assembly=Avalonia.Base"
|
||||||
|
d:DesignHeight="600"
|
||||||
|
d:DesignWidth="800"
|
||||||
|
mc:Ignorable="d">
|
||||||
|
<UserControl.Resources>
|
||||||
|
<collections:AvaloniaList x:TypeArguments="CommandBarDefaultLabelPosition" x:Key="LabelPositionList">
|
||||||
|
<CommandBarDefaultLabelPosition>Bottom</CommandBarDefaultLabelPosition>
|
||||||
|
<CommandBarDefaultLabelPosition>Collapsed</CommandBarDefaultLabelPosition>
|
||||||
|
<CommandBarDefaultLabelPosition>Right</CommandBarDefaultLabelPosition>
|
||||||
|
</collections:AvaloniaList>
|
||||||
|
<collections:AvaloniaList x:TypeArguments="CommandBarOverflowButtonVisibility" x:Key="VisibilityList">
|
||||||
|
<CommandBarOverflowButtonVisibility>Auto</CommandBarOverflowButtonVisibility>
|
||||||
|
<CommandBarOverflowButtonVisibility>Collapsed</CommandBarOverflowButtonVisibility>
|
||||||
|
<CommandBarOverflowButtonVisibility>Visible</CommandBarOverflowButtonVisibility>
|
||||||
|
</collections:AvaloniaList>
|
||||||
|
</UserControl.Resources>
|
||||||
|
<ScrollViewer>
|
||||||
|
<StackPanel Spacing="16">
|
||||||
|
<GroupBox>
|
||||||
|
<GroupBox.Header>
|
||||||
|
<Grid ColumnDefinitions="Auto,*" RowDefinitions="Auto,Auto,Auto,Auto,Auto,Auto">
|
||||||
|
|
||||||
|
<TextBlock Grid.Row="0" Grid.Column="0" Text="DefaultLabelPosition" VerticalAlignment="Center" />
|
||||||
|
<ComboBox Grid.Row="0" Grid.Column="1"
|
||||||
|
Name="lc"
|
||||||
|
ItemsSource="{DynamicResource LabelPositionList}"
|
||||||
|
SelectedValue="{x:Static CommandBarDefaultLabelPosition.Bottom}" />
|
||||||
|
|
||||||
|
<TextBlock Grid.Row="1" Grid.Column="0" Text="OverflowButtonVisibility" VerticalAlignment="Center" />
|
||||||
|
<ComboBox Grid.Row="1" Grid.Column="1"
|
||||||
|
Name="btvb"
|
||||||
|
ItemsSource="{DynamicResource VisibilityList}"
|
||||||
|
SelectedValue="{x:Static CommandBarOverflowButtonVisibility.Auto}" />
|
||||||
|
|
||||||
|
<TextBlock Grid.Row="2" Grid.Column="0" Text="IsDynamicOverflowEnabled" VerticalAlignment="Center" />
|
||||||
|
<ToggleSwitch Grid.Row="2" Grid.Column="1" Name="idfe" IsChecked="True" />
|
||||||
|
|
||||||
|
<TextBlock Grid.Row="3" Grid.Column="0" Text="IsOpen" VerticalAlignment="Center" />
|
||||||
|
<ToggleSwitch Grid.Row="3" Grid.Column="1" Name="isop" />
|
||||||
|
|
||||||
|
<TextBlock Grid.Row="4" Grid.Column="0" Text="IsSticky" VerticalAlignment="Center" />
|
||||||
|
<ToggleSwitch Grid.Row="4" Grid.Column="1" Name="isst" />
|
||||||
|
|
||||||
|
<TextBlock Grid.Row="5" Grid.Column="0" Text="Width" VerticalAlignment="Center" />
|
||||||
|
<Slider Grid.Row="5" Grid.Column="1" Name="ws" HorizontalAlignment="Left" Width="500" Minimum="0" Maximum="1000" Value="200" />
|
||||||
|
</Grid>
|
||||||
|
</GroupBox.Header>
|
||||||
|
<CommandBar
|
||||||
|
DefaultLabelPosition="{Binding #lc.SelectedValue}"
|
||||||
|
OverflowButtonVisibility="{Binding #btvb.SelectedValue}"
|
||||||
|
IsDynamicOverflowEnabled="{Binding #idfe.IsChecked}"
|
||||||
|
IsOpen="{Binding #isop.IsChecked}"
|
||||||
|
IsSticky="{Binding #isst.IsChecked}"
|
||||||
|
Width="{Binding #ws.Value}">
|
||||||
|
<AppBarButton Label="New" Icon="{DynamicResource SemiIconPlus}" />
|
||||||
|
<AppBarButton Label="Save" Icon="{DynamicResource SemiIconSave}" />
|
||||||
|
<AppBarSeparator />
|
||||||
|
<AppBarToggleButton Label="Bold" Icon="{DynamicResource SemiIconBold}" />
|
||||||
|
<AppBarToggleButton Label="Italic" Icon="{DynamicResource SemiIconItalic}" />
|
||||||
|
<AppBarToggleButton IsChecked="True" IsEnabled="False" Label="Underline" Icon="{DynamicResource SemiIconUnderline}" />
|
||||||
|
<AppBarSeparator />
|
||||||
|
<AppBarButton Label="Share" Icon="{DynamicResource SemiIconShare}" />
|
||||||
|
<AppBarButton Label="Export" Icon="{DynamicResource SemiIconExport}" />
|
||||||
|
<AppBarButton Label="Print" Icon="{DynamicResource SemiIconPrint}" />
|
||||||
|
<AppBarSeparator />
|
||||||
|
<AppBarButton Label="Delete" Icon="{DynamicResource SemiIconDelete}" />
|
||||||
|
</CommandBar>
|
||||||
|
</GroupBox>
|
||||||
|
|
||||||
|
<!-- With secondary commands (overflow) -->
|
||||||
|
<GroupBox>
|
||||||
|
<GroupBox.Header>
|
||||||
|
<TextBlock Text="CommandBar — With Secondary Commands (overflow)" />
|
||||||
|
</GroupBox.Header>
|
||||||
|
<CommandBar>
|
||||||
|
<AppBarButton Label="New" Icon="{DynamicResource SemiIconPlus}" />
|
||||||
|
<AppBarButton Label="Save" Icon="{DynamicResource SemiIconSave}" />
|
||||||
|
<AppBarButton Label="Share" Icon="{DynamicResource SemiIconShare}" />
|
||||||
|
<CommandBar.SecondaryCommands>
|
||||||
|
<AppBarButton Label="Export" Icon="{DynamicResource SemiIconExport}" />
|
||||||
|
<AppBarButton Label="Delete" Icon="{DynamicResource SemiIconDelete}" />
|
||||||
|
</CommandBar.SecondaryCommands>
|
||||||
|
</CommandBar>
|
||||||
|
</GroupBox>
|
||||||
|
|
||||||
|
</StackPanel>
|
||||||
|
</ScrollViewer>
|
||||||
|
</UserControl>
|
||||||
@@ -2,10 +2,10 @@ using Avalonia.Controls;
|
|||||||
|
|
||||||
namespace Semi.Avalonia.Demo.Pages;
|
namespace Semi.Avalonia.Demo.Pages;
|
||||||
|
|
||||||
public partial class ToggleButtonDemo : UserControl
|
public partial class CommandBarDemo : UserControl
|
||||||
{
|
{
|
||||||
public ToggleButtonDemo()
|
public CommandBarDemo()
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
54
demo/Semi.Avalonia.Demo/Pages/ContentPageDemo.axaml
Normal file
54
demo/Semi.Avalonia.Demo/Pages/ContentPageDemo.axaml
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
<UserControl
|
||||||
|
x:Class="Semi.Avalonia.Demo.Pages.ContentPageDemo"
|
||||||
|
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="600"
|
||||||
|
d:DesignWidth="800"
|
||||||
|
mc:Ignorable="d">
|
||||||
|
<DockPanel>
|
||||||
|
<ScrollViewer DockPanel.Dock="Right" Width="260">
|
||||||
|
<StackPanel Margin="12" Spacing="8">
|
||||||
|
<TextBlock Text="Configuration" FontWeight="SemiBold" FontSize="16"
|
||||||
|
Foreground="{DynamicResource SemiColorText0}" />
|
||||||
|
<TextBlock Text="ContentPage is the fundamental page type. It hosts a single piece of content and integrates with NavigationPage, TabbedPage, and CarouselPage. The Header property sets the navigation bar title."
|
||||||
|
FontSize="12" Opacity="0.7" TextWrapping="Wrap" />
|
||||||
|
|
||||||
|
<Separator />
|
||||||
|
|
||||||
|
<TextBlock Text="Navigation" FontWeight="SemiBold" />
|
||||||
|
<Button Content="Push Page" HorizontalAlignment="Stretch" Click="OnPush" />
|
||||||
|
<Button Content="Pop Page" HorizontalAlignment="Stretch" Click="OnPop" />
|
||||||
|
<Button Content="Pop to Root" HorizontalAlignment="Stretch" Click="OnPopToRoot" />
|
||||||
|
|
||||||
|
<Separator />
|
||||||
|
|
||||||
|
<TextBlock Text="Key Properties" FontWeight="SemiBold" />
|
||||||
|
<TextBlock Text="• Header: nav bar title (string or Control)" FontSize="12" Opacity="0.8" TextWrapping="Wrap" />
|
||||||
|
<TextBlock Text="• Content: any Avalonia control" FontSize="12" Opacity="0.8" TextWrapping="Wrap" />
|
||||||
|
<TextBlock Text="• Background: page background brush" FontSize="12" Opacity="0.8" TextWrapping="Wrap" />
|
||||||
|
<TextBlock Text="• HorizontalContentAlignment" FontSize="12" Opacity="0.8" />
|
||||||
|
<TextBlock Text="• VerticalContentAlignment" FontSize="12" Opacity="0.8" />
|
||||||
|
<TextBlock Text="• AutomaticallyApplySafeAreaPadding" FontSize="12" Opacity="0.8" />
|
||||||
|
|
||||||
|
<Separator />
|
||||||
|
|
||||||
|
<TextBlock Name="StatusText"
|
||||||
|
Text="Depth: 1 | Current: Root Page"
|
||||||
|
FontSize="11"
|
||||||
|
Opacity="0.7" />
|
||||||
|
</StackPanel>
|
||||||
|
</ScrollViewer>
|
||||||
|
|
||||||
|
<Border DockPanel.Dock="Right" Width="1" Background="{DynamicResource SemiColorBackground0}" />
|
||||||
|
|
||||||
|
<Border Margin="12"
|
||||||
|
BorderBrush="{DynamicResource SemiColorBorder}"
|
||||||
|
BorderThickness="1"
|
||||||
|
CornerRadius="6"
|
||||||
|
ClipToBounds="True">
|
||||||
|
<NavigationPage Name="DemoNav" />
|
||||||
|
</Border>
|
||||||
|
</DockPanel>
|
||||||
|
</UserControl>
|
||||||
93
demo/Semi.Avalonia.Demo/Pages/ContentPageDemo.axaml.cs
Normal file
93
demo/Semi.Avalonia.Demo/Pages/ContentPageDemo.axaml.cs
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
using Avalonia.Controls;
|
||||||
|
using Avalonia.Interactivity;
|
||||||
|
using Avalonia.Media;
|
||||||
|
using Avalonia.Layout;
|
||||||
|
|
||||||
|
namespace Semi.Avalonia.Demo.Pages;
|
||||||
|
|
||||||
|
public partial class ContentPageDemo : UserControl
|
||||||
|
{
|
||||||
|
private static readonly Color[] PageColors =
|
||||||
|
[
|
||||||
|
Color.FromRgb(0xE3, 0xF2, 0xFD), // blue
|
||||||
|
Color.FromRgb(0xF3, 0xE5, 0xF5), // purple
|
||||||
|
Color.FromRgb(0xE8, 0xF5, 0xE9), // green
|
||||||
|
Color.FromRgb(0xFF, 0xF8, 0xE1), // amber
|
||||||
|
Color.FromRgb(0xFB, 0xE9, 0xE7), // deep orange
|
||||||
|
];
|
||||||
|
|
||||||
|
private int _pageCount;
|
||||||
|
|
||||||
|
public ContentPageDemo()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
Loaded += OnLoaded;
|
||||||
|
}
|
||||||
|
|
||||||
|
private async void OnLoaded(object? sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
await DemoNav.PushAsync(MakePage("Root Page", "ContentPage inside a NavigationPage.\nUse the options to navigate."));
|
||||||
|
UpdateStatus();
|
||||||
|
}
|
||||||
|
|
||||||
|
private async void OnPush(object? sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
_pageCount++;
|
||||||
|
await DemoNav.PushAsync(MakePage($"Page {_pageCount}", $"ContentPage #{_pageCount}.\nNavigate back using the back button."));
|
||||||
|
UpdateStatus();
|
||||||
|
}
|
||||||
|
|
||||||
|
private async void OnPop(object? sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
await DemoNav.PopAsync();
|
||||||
|
UpdateStatus();
|
||||||
|
}
|
||||||
|
|
||||||
|
private async void OnPopToRoot(object? sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
await DemoNav.PopToRootAsync();
|
||||||
|
_pageCount = 0;
|
||||||
|
UpdateStatus();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void UpdateStatus()
|
||||||
|
{
|
||||||
|
StatusText.Text = $"Depth: {DemoNav.StackDepth} | Current: {DemoNav.CurrentPage?.Header}";
|
||||||
|
}
|
||||||
|
|
||||||
|
private ContentPage MakePage(string header, string body) =>
|
||||||
|
new ContentPage
|
||||||
|
{
|
||||||
|
Header = header,
|
||||||
|
Background = new SolidColorBrush(PageColors[_pageCount % PageColors.Length]),
|
||||||
|
Content = new StackPanel
|
||||||
|
{
|
||||||
|
HorizontalAlignment = HorizontalAlignment.Center,
|
||||||
|
VerticalAlignment = VerticalAlignment.Center,
|
||||||
|
Spacing = 10,
|
||||||
|
Children =
|
||||||
|
{
|
||||||
|
new TextBlock
|
||||||
|
{
|
||||||
|
Text = header,
|
||||||
|
FontSize = 20,
|
||||||
|
FontWeight = FontWeight.SemiBold,
|
||||||
|
HorizontalAlignment = HorizontalAlignment.Center,
|
||||||
|
Foreground = Brushes.Black,
|
||||||
|
},
|
||||||
|
new TextBlock
|
||||||
|
{
|
||||||
|
Text = body,
|
||||||
|
FontSize = 13,
|
||||||
|
Opacity = 0.7,
|
||||||
|
TextWrapping = TextWrapping.Wrap,
|
||||||
|
TextAlignment = TextAlignment.Center,
|
||||||
|
MaxWidth = 260,
|
||||||
|
Foreground = Brushes.Black,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
HorizontalContentAlignment = HorizontalAlignment.Stretch,
|
||||||
|
VerticalContentAlignment = VerticalAlignment.Stretch
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -7,7 +7,6 @@
|
|||||||
xmlns:vm="clr-namespace:Semi.Avalonia.Demo.ViewModels;assembly=Semi.Avalonia.Demo"
|
xmlns:vm="clr-namespace:Semi.Avalonia.Demo.ViewModels;assembly=Semi.Avalonia.Demo"
|
||||||
d:DesignHeight="450"
|
d:DesignHeight="450"
|
||||||
d:DesignWidth="800"
|
d:DesignWidth="800"
|
||||||
x:CompileBindings="True"
|
|
||||||
x:DataType="vm:DataGridDemoViewModel"
|
x:DataType="vm:DataGridDemoViewModel"
|
||||||
mc:Ignorable="d">
|
mc:Ignorable="d">
|
||||||
<TabControl>
|
<TabControl>
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
|
using Avalonia;
|
||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
|
using Avalonia.Markup.Xaml;
|
||||||
using Semi.Avalonia.Demo.ViewModels;
|
using Semi.Avalonia.Demo.ViewModels;
|
||||||
|
|
||||||
namespace Semi.Avalonia.Demo.Pages;
|
namespace Semi.Avalonia.Demo.Pages;
|
||||||
|
|||||||
72
demo/Semi.Avalonia.Demo/Pages/DrawerPageDemo.axaml
Normal file
72
demo/Semi.Avalonia.Demo/Pages/DrawerPageDemo.axaml
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
<UserControl
|
||||||
|
x:Class="Semi.Avalonia.Demo.Pages.DrawerPageDemo"
|
||||||
|
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="700"
|
||||||
|
d:DesignWidth="800"
|
||||||
|
mc:Ignorable="d">
|
||||||
|
<DockPanel>
|
||||||
|
<ScrollViewer DockPanel.Dock="Right" Width="260">
|
||||||
|
<StackPanel Margin="12" Spacing="8">
|
||||||
|
<TextBlock Text="Configuration" FontWeight="SemiBold" FontSize="16"
|
||||||
|
Foreground="{DynamicResource SemiColorText0}" />
|
||||||
|
|
||||||
|
<Button Content="Toggle Drawer"
|
||||||
|
HorizontalAlignment="Stretch"
|
||||||
|
Click="OnToggleDrawer" />
|
||||||
|
|
||||||
|
<Separator />
|
||||||
|
|
||||||
|
<CheckBox Name="GestureCheck"
|
||||||
|
Content="Gesture Enabled"
|
||||||
|
IsChecked="True"
|
||||||
|
IsCheckedChanged="OnGestureChanged" />
|
||||||
|
|
||||||
|
<Separator />
|
||||||
|
|
||||||
|
<TextBlock Text="Status" FontWeight="SemiBold" FontSize="14" />
|
||||||
|
<TextBlock Name="StatusText"
|
||||||
|
Text="Drawer: Closed"
|
||||||
|
Opacity="0.7"
|
||||||
|
TextWrapping="Wrap" />
|
||||||
|
</StackPanel>
|
||||||
|
</ScrollViewer>
|
||||||
|
|
||||||
|
<Border DockPanel.Dock="Right" Width="1" Background="{DynamicResource SemiColorBackground0}" />
|
||||||
|
|
||||||
|
<Border Margin="12"
|
||||||
|
BorderBrush="{DynamicResource SemiColorBorder}"
|
||||||
|
BorderThickness="1"
|
||||||
|
CornerRadius="6"
|
||||||
|
ClipToBounds="True">
|
||||||
|
<DrawerPage Name="DemoDrawer"
|
||||||
|
Header="First Look"
|
||||||
|
DrawerLength="250">
|
||||||
|
<DrawerPage.DrawerHeader>
|
||||||
|
<Border Padding="16" Background="{DynamicResource SemiColorPrimary}">
|
||||||
|
<TextBlock Text="Menu" FontSize="18" FontWeight="SemiBold" Foreground="{DynamicResource SemiColorText0}" />
|
||||||
|
</Border>
|
||||||
|
</DrawerPage.DrawerHeader>
|
||||||
|
<DrawerPage.Drawer>
|
||||||
|
<ListBox Name="DrawerMenu" SelectionChanged="OnMenuSelectionChanged">
|
||||||
|
<ListBoxItem Content="Home" />
|
||||||
|
<ListBoxItem Content="Settings" />
|
||||||
|
<ListBoxItem Content="Profile" />
|
||||||
|
<ListBoxItem Content="About" />
|
||||||
|
</ListBox>
|
||||||
|
</DrawerPage.Drawer>
|
||||||
|
<DrawerPage.Content>
|
||||||
|
<ContentPage Header="Home">
|
||||||
|
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center" Spacing="8">
|
||||||
|
<TextBlock Text="Home Page" FontSize="20" FontWeight="SemiBold" HorizontalAlignment="Center" />
|
||||||
|
<TextBlock Text="Swipe from the left edge or use the hamburger button to open the drawer."
|
||||||
|
FontSize="13" Opacity="0.7" TextWrapping="Wrap" TextAlignment="Center" MaxWidth="300" />
|
||||||
|
</StackPanel>
|
||||||
|
</ContentPage>
|
||||||
|
</DrawerPage.Content>
|
||||||
|
</DrawerPage>
|
||||||
|
</Border>
|
||||||
|
</DockPanel>
|
||||||
|
</UserControl>
|
||||||
68
demo/Semi.Avalonia.Demo/Pages/DrawerPageDemo.axaml.cs
Normal file
68
demo/Semi.Avalonia.Demo/Pages/DrawerPageDemo.axaml.cs
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
using System;
|
||||||
|
using Avalonia.Controls;
|
||||||
|
using Avalonia.Interactivity;
|
||||||
|
using Avalonia.Layout;
|
||||||
|
using Avalonia.Media;
|
||||||
|
|
||||||
|
namespace Semi.Avalonia.Demo.Pages;
|
||||||
|
|
||||||
|
public partial class DrawerPageDemo : UserControl
|
||||||
|
{
|
||||||
|
public DrawerPageDemo()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnLoaded(RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
base.OnLoaded(e);
|
||||||
|
DemoDrawer.Opened += OnDrawerStatusChanged;
|
||||||
|
DemoDrawer.Closed += OnDrawerStatusChanged;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnUnloaded(RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
base.OnUnloaded(e);
|
||||||
|
DemoDrawer.Opened -= OnDrawerStatusChanged;
|
||||||
|
DemoDrawer.Closed -= OnDrawerStatusChanged;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnDrawerStatusChanged(object? sender, EventArgs e) => UpdateStatus();
|
||||||
|
|
||||||
|
private void OnToggleDrawer(object? sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
DemoDrawer.IsOpen = !DemoDrawer.IsOpen;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnGestureChanged(object? sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
DemoDrawer.IsGestureEnabled = GestureCheck.IsChecked == true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnMenuSelectionChanged(object? sender, SelectionChangedEventArgs e)
|
||||||
|
{
|
||||||
|
if (DrawerMenu.SelectedItem is ListBoxItem item)
|
||||||
|
{
|
||||||
|
DemoDrawer.Content = new ContentPage
|
||||||
|
{
|
||||||
|
Header = item.Content?.ToString(),
|
||||||
|
Content = new TextBlock
|
||||||
|
{
|
||||||
|
Text = $"{item.Content} page content",
|
||||||
|
FontSize = 16,
|
||||||
|
HorizontalAlignment = HorizontalAlignment.Center,
|
||||||
|
VerticalAlignment = VerticalAlignment.Center,
|
||||||
|
Foreground = Brushes.Black,
|
||||||
|
},
|
||||||
|
HorizontalContentAlignment = HorizontalAlignment.Stretch,
|
||||||
|
VerticalContentAlignment = VerticalAlignment.Stretch
|
||||||
|
};
|
||||||
|
DemoDrawer.IsOpen = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void UpdateStatus()
|
||||||
|
{
|
||||||
|
StatusText.Text = $"Drawer: {(DemoDrawer.IsOpen ? "Open" : "Closed")}";
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -36,10 +36,20 @@
|
|||||||
<HyperlinkButton HorizontalAlignment="Right" Content="更多" />
|
<HyperlinkButton HorizontalAlignment="Right" Content="更多" />
|
||||||
</Panel>
|
</Panel>
|
||||||
</HeaderedContentControl.Header>
|
</HeaderedContentControl.Header>
|
||||||
<HeaderedContentControl.Content>
|
<SelectableTextBlock Text="Semi Design 是由互娱社区前端团队与 UED 团队共同设计开发并维护的设计系统。设计系统包含设计语言以及一整套可复用的前端组件,帮助设计师与开发者更容易地打造高质量的、用户体验一致的、符合设计规范的 Web 应用。" />
|
||||||
<SelectableTextBlock Text="Semi Design 是由互娱社区前端团队与 UED 团队共同设计开发并维护的设计系统。设计系统包含设计语言以及一整套可复用的前端组件,帮助设计师与开发者更容易地打造高质量的、用户体验一致的、符合设计规范的 Web 应用。" />
|
|
||||||
</HeaderedContentControl.Content>
|
|
||||||
</HeaderedContentControl>
|
</HeaderedContentControl>
|
||||||
|
<TextBlock>Real GroupBox</TextBlock>
|
||||||
|
<GroupBox
|
||||||
|
HorizontalAlignment="Left"
|
||||||
|
MaxWidth="360">
|
||||||
|
<HeaderedContentControl.Header>
|
||||||
|
<Panel>
|
||||||
|
<SelectableTextBlock Text="Semi Design" />
|
||||||
|
<HyperlinkButton HorizontalAlignment="Right" Content="更多" />
|
||||||
|
</Panel>
|
||||||
|
</HeaderedContentControl.Header>
|
||||||
|
<SelectableTextBlock Text="Semi Design 是由互娱社区前端团队与 UED 团队共同设计开发并维护的设计系统。设计系统包含设计语言以及一整套可复用的前端组件,帮助设计师与开发者更容易地打造高质量的、用户体验一致的、符合设计规范的 Web 应用。" />
|
||||||
|
</GroupBox>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</ScrollViewer>
|
</ScrollViewer>
|
||||||
</UserControl>
|
</UserControl>
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
<UserControl xmlns="https://github.com/avaloniaui"
|
<UserControl xmlns="https://github.com/avaloniaui"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
@@ -8,7 +8,6 @@
|
|||||||
xmlns:pages="clr-namespace:Semi.Avalonia.Demo.Pages"
|
xmlns:pages="clr-namespace:Semi.Avalonia.Demo.Pages"
|
||||||
mc:Ignorable="d" d:DesignWidth="1000" d:DesignHeight="1450"
|
mc:Ignorable="d" d:DesignWidth="1000" d:DesignHeight="1450"
|
||||||
x:DataType="vm:HighContrastDemoViewModel"
|
x:DataType="vm:HighContrastDemoViewModel"
|
||||||
x:CompileBindings="True"
|
|
||||||
x:Class="Semi.Avalonia.Demo.Pages.HighContrastDemo">
|
x:Class="Semi.Avalonia.Demo.Pages.HighContrastDemo">
|
||||||
<Design.DataContext>
|
<Design.DataContext>
|
||||||
<vm:HighContrastDemoViewModel />
|
<vm:HighContrastDemoViewModel />
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
|
using Avalonia.Input.Platform;
|
||||||
using Semi.Avalonia.Demo.ViewModels;
|
using Semi.Avalonia.Demo.ViewModels;
|
||||||
|
|
||||||
namespace Semi.Avalonia.Demo.Pages;
|
namespace Semi.Avalonia.Demo.Pages;
|
||||||
|
|||||||
@@ -16,80 +16,69 @@
|
|||||||
Margin="8"
|
Margin="8"
|
||||||
Classes="ClearButton"
|
Classes="ClearButton"
|
||||||
Text="{Binding SearchText}"
|
Text="{Binding SearchText}"
|
||||||
Watermark="Input Icon Name" />
|
PlaceholderText="Input Icon Name" />
|
||||||
|
|
||||||
<TabControl Grid.Row="1">
|
<TabControl
|
||||||
<TabItem Header="Filled Icons">
|
Grid.Row="1"
|
||||||
<ScrollViewer>
|
Theme="{StaticResource LineTabControl}"
|
||||||
<ItemsControl ItemsSource="{Binding FilteredFilledIcons}">
|
ItemsSource="{Binding IconTabs}">
|
||||||
<ItemsControl.ItemsPanel>
|
<TabControl.ItemTemplate>
|
||||||
<ItemsPanelTemplate>
|
<DataTemplate>
|
||||||
<WrapPanel />
|
<WrapPanel ItemSpacing="5">
|
||||||
</ItemsPanelTemplate>
|
<TextBlock Text="{Binding Header}" />
|
||||||
</ItemsControl.ItemsPanel>
|
<Label
|
||||||
<ItemsControl.ItemTemplate>
|
Theme="{StaticResource TagLabel}"
|
||||||
<DataTemplate>
|
Classes="Purple"
|
||||||
<Button Theme="{DynamicResource OutlineButton}"
|
IsVisible="{Binding Header,
|
||||||
Classes="Tertiary"
|
Converter={x:Static ObjectConverters.Equal},
|
||||||
Padding="0"
|
ConverterParameter='AI Icons'}"
|
||||||
Margin="10"
|
Content="New" />
|
||||||
Width="200"
|
</WrapPanel>
|
||||||
Height="120"
|
</DataTemplate>
|
||||||
Click="Button_Clicked">
|
</TabControl.ItemTemplate>
|
||||||
<StackPanel Spacing="8">
|
|
||||||
<PathIcon
|
|
||||||
Theme="{DynamicResource InnerPathIcon}"
|
|
||||||
HorizontalAlignment="Center"
|
|
||||||
Classes="ExtraLarge"
|
|
||||||
Data="{Binding Geometry}" />
|
|
||||||
<TextBlock
|
|
||||||
HorizontalAlignment="Center"
|
|
||||||
FontSize="12"
|
|
||||||
FontWeight="Normal"
|
|
||||||
Text="{Binding ResourceKey}" />
|
|
||||||
</StackPanel>
|
|
||||||
</Button>
|
|
||||||
</DataTemplate>
|
|
||||||
</ItemsControl.ItemTemplate>
|
|
||||||
</ItemsControl>
|
|
||||||
</ScrollViewer>
|
|
||||||
</TabItem>
|
|
||||||
|
|
||||||
<TabItem Header="Stroked Icons">
|
<TabControl.ContentTemplate>
|
||||||
<ScrollViewer>
|
<DataTemplate DataType="vm:IconTab">
|
||||||
<ItemsControl ItemsSource="{Binding FilteredStrokedIcons}">
|
<ScrollViewer>
|
||||||
<ItemsControl.ItemsPanel>
|
<ItemsControl
|
||||||
<ItemsPanelTemplate>
|
Margin="0 10"
|
||||||
<WrapPanel />
|
ItemsSource="{Binding IconItems}">
|
||||||
</ItemsPanelTemplate>
|
<ItemsControl.ItemsPanel>
|
||||||
</ItemsControl.ItemsPanel>
|
<ItemsPanelTemplate>
|
||||||
<ItemsControl.ItemTemplate>
|
<WrapPanel
|
||||||
<DataTemplate>
|
ItemWidth="200"
|
||||||
<Button Theme="{DynamicResource OutlineButton}"
|
ItemHeight="120"
|
||||||
Classes="Tertiary"
|
ItemSpacing="10"
|
||||||
Padding="0"
|
LineSpacing="10" />
|
||||||
Margin="10"
|
</ItemsPanelTemplate>
|
||||||
Width="200"
|
</ItemsControl.ItemsPanel>
|
||||||
Height="120"
|
<ItemsControl.ItemTemplate>
|
||||||
Click="Button_Clicked">
|
<DataTemplate>
|
||||||
<StackPanel Spacing="8">
|
<Button Theme="{DynamicResource OutlineButton}"
|
||||||
<PathIcon
|
Classes="Tertiary"
|
||||||
Theme="{DynamicResource InnerPathIcon}"
|
Padding="0"
|
||||||
HorizontalAlignment="Center"
|
HorizontalAlignment="Stretch"
|
||||||
Classes="ExtraLarge"
|
VerticalAlignment="Stretch"
|
||||||
Data="{Binding Geometry}" />
|
Click="Button_Clicked">
|
||||||
<TextBlock
|
<StackPanel Spacing="8">
|
||||||
HorizontalAlignment="Center"
|
<PathIcon
|
||||||
FontSize="12"
|
Theme="{DynamicResource InnerPathIcon}"
|
||||||
FontWeight="Normal"
|
HorizontalAlignment="Center"
|
||||||
Text="{Binding ResourceKey}" />
|
Classes="ExtraLarge"
|
||||||
</StackPanel>
|
Data="{Binding Geometry}" />
|
||||||
</Button>
|
<TextBlock
|
||||||
</DataTemplate>
|
HorizontalAlignment="Center"
|
||||||
</ItemsControl.ItemTemplate>
|
FontSize="12"
|
||||||
</ItemsControl>
|
FontWeight="Normal"
|
||||||
</ScrollViewer>
|
Text="{Binding ResourceKey}" />
|
||||||
</TabItem>
|
</StackPanel>
|
||||||
|
</Button>
|
||||||
|
</DataTemplate>
|
||||||
|
</ItemsControl.ItemTemplate>
|
||||||
|
</ItemsControl>
|
||||||
|
</ScrollViewer>
|
||||||
|
</DataTemplate>
|
||||||
|
</TabControl.ContentTemplate>
|
||||||
</TabControl>
|
</TabControl>
|
||||||
</Grid>
|
</Grid>
|
||||||
</UserControl>
|
</UserControl>
|
||||||
@@ -8,14 +8,11 @@
|
|||||||
d:DesignWidth="800"
|
d:DesignWidth="800"
|
||||||
mc:Ignorable="d">
|
mc:Ignorable="d">
|
||||||
<ScrollViewer>
|
<ScrollViewer>
|
||||||
<StackPanel HorizontalAlignment="Left" Spacing="20">
|
<StackPanel>
|
||||||
<StackPanel.Styles>
|
<StackPanel.Styles>
|
||||||
<Style Selector="Label">
|
<Style Selector="Grid > TextBlock,Grid > Label">
|
||||||
<Setter Property="Margin" Value="4" />
|
<Setter Property="Layoutable.VerticalAlignment" Value="Center" />
|
||||||
</Style>
|
<Setter Property="Layoutable.Margin" Value="4" />
|
||||||
<Style Selector="Grid > TextBlock">
|
|
||||||
<Setter Property="VerticalAlignment" Value="Center" />
|
|
||||||
<Setter Property="Margin" Value="4" />
|
|
||||||
</Style>
|
</Style>
|
||||||
</StackPanel.Styles>
|
</StackPanel.Styles>
|
||||||
<ScrollViewer HorizontalScrollBarVisibility="Auto">
|
<ScrollViewer HorizontalScrollBarVisibility="Auto">
|
||||||
@@ -156,69 +153,89 @@
|
|||||||
</HeaderedContentControl>
|
</HeaderedContentControl>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</ScrollViewer>
|
</ScrollViewer>
|
||||||
<WrapPanel>
|
|
||||||
<Label Theme="{StaticResource TagLabel}">Label</Label>
|
<HeaderedContentControl
|
||||||
<Label Classes="Large" Theme="{StaticResource TagLabel}">Large Label</Label>
|
Margin="16"
|
||||||
<Label Classes="Circle" Theme="{StaticResource TagLabel}">Circle Label</Label>
|
Header="Theme: TagLabel"
|
||||||
<Label Classes="Large Circle" Theme="{StaticResource TagLabel}">Large Circle Label</Label>
|
Theme="{DynamicResource GroupBox}">
|
||||||
</WrapPanel>
|
<ScrollViewer HorizontalScrollBarVisibility="Auto">
|
||||||
<WrapPanel>
|
<StackPanel Orientation="Horizontal" Spacing="8">
|
||||||
<Label Classes="Red" Theme="{StaticResource TagLabel}">Red</Label>
|
<StackPanel Spacing="4">
|
||||||
<Label Classes="Pink" Theme="{StaticResource TagLabel}">Pink</Label>
|
<Label Classes="Red" Theme="{StaticResource TagLabel}">Red</Label>
|
||||||
<Label Classes="Purple" Theme="{StaticResource TagLabel}">Purple</Label>
|
<Label Classes="Pink" Theme="{StaticResource TagLabel}">Pink</Label>
|
||||||
<Label Classes="Violet" Theme="{StaticResource TagLabel}">Violet</Label>
|
<Label Classes="Purple" Theme="{StaticResource TagLabel}">Purple</Label>
|
||||||
<Label Classes="Indigo" Theme="{StaticResource TagLabel}">Indigo</Label>
|
<Label Classes="Violet" Theme="{StaticResource TagLabel}">Violet</Label>
|
||||||
<Label Classes="Blue" Theme="{StaticResource TagLabel}">Blue</Label>
|
<Label Classes="Indigo" Theme="{StaticResource TagLabel}">Indigo</Label>
|
||||||
<Label Classes="LightBlue" Theme="{StaticResource TagLabel}">LightBlue</Label>
|
<Label Classes="Blue" Theme="{StaticResource TagLabel}">Blue</Label>
|
||||||
<Label Classes="Cyan" Theme="{StaticResource TagLabel}">Cyan</Label>
|
<Label Classes="LightBlue" Theme="{StaticResource TagLabel}">LightBlue</Label>
|
||||||
<Label Classes="Teal" Theme="{StaticResource TagLabel}">Teal</Label>
|
<Label Classes="Cyan" Theme="{StaticResource TagLabel}">Cyan</Label>
|
||||||
<Label Classes="Green" Theme="{StaticResource TagLabel}">Green</Label>
|
<Label Classes="Teal" Theme="{StaticResource TagLabel}">Teal</Label>
|
||||||
<Label Classes="LightGreen" Theme="{StaticResource TagLabel}">LightGreen</Label>
|
<Label Classes="Green" Theme="{StaticResource TagLabel}">Green</Label>
|
||||||
<Label Classes="Lime" Theme="{StaticResource TagLabel}">Lime</Label>
|
<Label Classes="LightGreen" Theme="{StaticResource TagLabel}">LightGreen</Label>
|
||||||
<Label Classes="Yellow" Theme="{StaticResource TagLabel}">Yellow</Label>
|
<Label Classes="Lime" Theme="{StaticResource TagLabel}">Lime</Label>
|
||||||
<Label Classes="Amber" Theme="{StaticResource TagLabel}">Amber</Label>
|
<Label Classes="Yellow" Theme="{StaticResource TagLabel}">Yellow</Label>
|
||||||
<Label Classes="Orange" Theme="{StaticResource TagLabel}">Orange</Label>
|
<Label Classes="Amber" Theme="{StaticResource TagLabel}">Amber</Label>
|
||||||
<Label Classes="Grey" Theme="{StaticResource TagLabel}">Grey</Label>
|
<Label Classes="Orange" Theme="{StaticResource TagLabel}">Orange</Label>
|
||||||
<Label Classes="White" Theme="{StaticResource TagLabel}">White</Label>
|
<Label Classes="Grey" Theme="{StaticResource TagLabel}">Grey</Label>
|
||||||
</WrapPanel>
|
<Label Classes="White" Theme="{StaticResource TagLabel}">White</Label>
|
||||||
<WrapPanel>
|
</StackPanel>
|
||||||
<Label Classes="Ghost Red" Theme="{StaticResource TagLabel}">Red</Label>
|
<StackPanel Spacing="4">
|
||||||
<Label Classes="Ghost Pink" Theme="{StaticResource TagLabel}">Pink</Label>
|
<Label Classes="Ghost Red" Theme="{StaticResource TagLabel}">Red</Label>
|
||||||
<Label Classes="Ghost Purple" Theme="{StaticResource TagLabel}">Purple</Label>
|
<Label Classes="Ghost Pink" Theme="{StaticResource TagLabel}">Pink</Label>
|
||||||
<Label Classes="Ghost Violet" Theme="{StaticResource TagLabel}">Violet</Label>
|
<Label Classes="Ghost Purple" Theme="{StaticResource TagLabel}">Purple</Label>
|
||||||
<Label Classes="Ghost Indigo" Theme="{StaticResource TagLabel}">Indigo</Label>
|
<Label Classes="Ghost Violet" Theme="{StaticResource TagLabel}">Violet</Label>
|
||||||
<Label Classes="Ghost Blue" Theme="{StaticResource TagLabel}">Blue</Label>
|
<Label Classes="Ghost Indigo" Theme="{StaticResource TagLabel}">Indigo</Label>
|
||||||
<Label Classes="Ghost LightBlue" Theme="{StaticResource TagLabel}">LightBlue</Label>
|
<Label Classes="Ghost Blue" Theme="{StaticResource TagLabel}">Blue</Label>
|
||||||
<Label Classes="Ghost Cyan" Theme="{StaticResource TagLabel}">Cyan</Label>
|
<Label Classes="Ghost LightBlue" Theme="{StaticResource TagLabel}">LightBlue</Label>
|
||||||
<Label Classes="Ghost Teal" Theme="{StaticResource TagLabel}">Teal</Label>
|
<Label Classes="Ghost Cyan" Theme="{StaticResource TagLabel}">Cyan</Label>
|
||||||
<Label Classes="Ghost Green" Theme="{StaticResource TagLabel}">Green</Label>
|
<Label Classes="Ghost Teal" Theme="{StaticResource TagLabel}">Teal</Label>
|
||||||
<Label Classes="Ghost LightGreen" Theme="{StaticResource TagLabel}">LightGreen</Label>
|
<Label Classes="Ghost Green" Theme="{StaticResource TagLabel}">Green</Label>
|
||||||
<Label Classes="Ghost Lime" Theme="{StaticResource TagLabel}">Lime</Label>
|
<Label Classes="Ghost LightGreen" Theme="{StaticResource TagLabel}">LightGreen</Label>
|
||||||
<Label Classes="Ghost Yellow" Theme="{StaticResource TagLabel}">Yellow</Label>
|
<Label Classes="Ghost Lime" Theme="{StaticResource TagLabel}">Lime</Label>
|
||||||
<Label Classes="Ghost Amber" Theme="{StaticResource TagLabel}">Amber</Label>
|
<Label Classes="Ghost Yellow" Theme="{StaticResource TagLabel}">Yellow</Label>
|
||||||
<Label Classes="Ghost Orange" Theme="{StaticResource TagLabel}">Orange</Label>
|
<Label Classes="Ghost Amber" Theme="{StaticResource TagLabel}">Amber</Label>
|
||||||
<Label Classes="Ghost Grey" Theme="{StaticResource TagLabel}">Grey</Label>
|
<Label Classes="Ghost Orange" Theme="{StaticResource TagLabel}">Orange</Label>
|
||||||
<Label Classes="Ghost White" Theme="{StaticResource TagLabel}">White</Label>
|
<Label Classes="Ghost Grey" Theme="{StaticResource TagLabel}">Grey</Label>
|
||||||
</WrapPanel>
|
<Label Classes="Ghost White" Theme="{StaticResource TagLabel}">White</Label>
|
||||||
<WrapPanel>
|
</StackPanel>
|
||||||
<Label Classes="Solid Red" Theme="{StaticResource TagLabel}">Red</Label>
|
<StackPanel Spacing="4">
|
||||||
<Label Classes="Solid Pink" Theme="{StaticResource TagLabel}">Pink</Label>
|
<Label Classes="Solid Red" Theme="{StaticResource TagLabel}">Red</Label>
|
||||||
<Label Classes="Solid Purple" Theme="{StaticResource TagLabel}">Purple</Label>
|
<Label Classes="Solid Pink" Theme="{StaticResource TagLabel}">Pink</Label>
|
||||||
<Label Classes="Solid Violet" Theme="{StaticResource TagLabel}">Violet</Label>
|
<Label Classes="Solid Purple" Theme="{StaticResource TagLabel}">Purple</Label>
|
||||||
<Label Classes="Solid Indigo" Theme="{StaticResource TagLabel}">Indigo</Label>
|
<Label Classes="Solid Violet" Theme="{StaticResource TagLabel}">Violet</Label>
|
||||||
<Label Classes="Solid Blue" Theme="{StaticResource TagLabel}">Blue</Label>
|
<Label Classes="Solid Indigo" Theme="{StaticResource TagLabel}">Indigo</Label>
|
||||||
<Label Classes="Solid LightBlue" Theme="{StaticResource TagLabel}">LightBlue</Label>
|
<Label Classes="Solid Blue" Theme="{StaticResource TagLabel}">Blue</Label>
|
||||||
<Label Classes="Solid Cyan" Theme="{StaticResource TagLabel}">Cyan</Label>
|
<Label Classes="Solid LightBlue" Theme="{StaticResource TagLabel}">LightBlue</Label>
|
||||||
<Label Classes="Solid Teal" Theme="{StaticResource TagLabel}">Teal</Label>
|
<Label Classes="Solid Cyan" Theme="{StaticResource TagLabel}">Cyan</Label>
|
||||||
<Label Classes="Solid Green" Theme="{StaticResource TagLabel}">Green</Label>
|
<Label Classes="Solid Teal" Theme="{StaticResource TagLabel}">Teal</Label>
|
||||||
<Label Classes="Solid LightGreen" Theme="{StaticResource TagLabel}">LightGreen</Label>
|
<Label Classes="Solid Green" Theme="{StaticResource TagLabel}">Green</Label>
|
||||||
<Label Classes="Solid Lime" Theme="{StaticResource TagLabel}">Lime</Label>
|
<Label Classes="Solid LightGreen" Theme="{StaticResource TagLabel}">LightGreen</Label>
|
||||||
<Label Classes="Solid Yellow" Theme="{StaticResource TagLabel}">Yellow</Label>
|
<Label Classes="Solid Lime" Theme="{StaticResource TagLabel}">Lime</Label>
|
||||||
<Label Classes="Solid Amber" Theme="{StaticResource TagLabel}">Amber</Label>
|
<Label Classes="Solid Yellow" Theme="{StaticResource TagLabel}">Yellow</Label>
|
||||||
<Label Classes="Solid Orange" Theme="{StaticResource TagLabel}">Orange</Label>
|
<Label Classes="Solid Amber" Theme="{StaticResource TagLabel}">Amber</Label>
|
||||||
<Label Classes="Solid Grey" Theme="{StaticResource TagLabel}">Grey</Label>
|
<Label Classes="Solid Orange" Theme="{StaticResource TagLabel}">Orange</Label>
|
||||||
<Label Classes="Solid White" Theme="{StaticResource TagLabel}">White</Label>
|
<Label Classes="Solid Grey" Theme="{StaticResource TagLabel}">Grey</Label>
|
||||||
</WrapPanel>
|
<Label Classes="Solid White" Theme="{StaticResource TagLabel}">White</Label>
|
||||||
|
</StackPanel>
|
||||||
|
<StackPanel Spacing="4">
|
||||||
|
<Label Classes="Colorful Gradient" Theme="{DynamicResource TagLabel}">Light</Label>
|
||||||
|
<Label Classes="Colorful Gradient Ghost" Theme="{DynamicResource TagLabel}">Ghost</Label>
|
||||||
|
<Label Classes="Colorful Gradient Solid" Theme="{DynamicResource TagLabel}">Solid</Label>
|
||||||
|
</StackPanel>
|
||||||
|
<StackPanel Spacing="4">
|
||||||
|
<Label Classes="Colorful" Theme="{DynamicResource TagLabel}">Light</Label>
|
||||||
|
<Label Classes="Colorful Ghost" Theme="{DynamicResource TagLabel}">Ghost</Label>
|
||||||
|
<Label Classes="Colorful Solid" Theme="{DynamicResource TagLabel}">Solid</Label>
|
||||||
|
</StackPanel>
|
||||||
|
<StackPanel Spacing="4">
|
||||||
|
<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>
|
||||||
|
</StackPanel>
|
||||||
|
</StackPanel>
|
||||||
|
</ScrollViewer>
|
||||||
|
</HeaderedContentControl>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</ScrollViewer>
|
</ScrollViewer>
|
||||||
</UserControl>
|
</UserControl>
|
||||||
66
demo/Semi.Avalonia.Demo/Pages/NavigationDemoHelper.cs
Normal file
66
demo/Semi.Avalonia.Demo/Pages/NavigationDemoHelper.cs
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
using Avalonia.Controls;
|
||||||
|
using Avalonia.Layout;
|
||||||
|
using Avalonia.Media;
|
||||||
|
|
||||||
|
namespace Semi.Avalonia.Demo.Pages;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Shared helpers for ControlCatalog demo pages.
|
||||||
|
/// </summary>
|
||||||
|
internal static class NavigationDemoHelper
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Pastel background brushes cycled by page index.
|
||||||
|
/// </summary>
|
||||||
|
internal static readonly IBrush[] PageBrushes =
|
||||||
|
[
|
||||||
|
new SolidColorBrush(Color.Parse("#BBDEFB")),
|
||||||
|
new SolidColorBrush(Color.Parse("#C8E6C9")),
|
||||||
|
new SolidColorBrush(Color.Parse("#FFE0B2")),
|
||||||
|
new SolidColorBrush(Color.Parse("#E1BEE7")),
|
||||||
|
new SolidColorBrush(Color.Parse("#FFCDD2")),
|
||||||
|
new SolidColorBrush(Color.Parse("#B2EBF2"))
|
||||||
|
];
|
||||||
|
|
||||||
|
internal static IBrush GetPageBrush(int index) =>
|
||||||
|
PageBrushes[(index % PageBrushes.Length + PageBrushes.Length) % PageBrushes.Length];
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Creates a simple demo ContentPage with a centered title and subtitle.
|
||||||
|
/// </summary>
|
||||||
|
internal static ContentPage MakePage(string header, string body, int colorIndex) =>
|
||||||
|
new()
|
||||||
|
{
|
||||||
|
Header = header,
|
||||||
|
Background = GetPageBrush(colorIndex),
|
||||||
|
Content = new StackPanel
|
||||||
|
{
|
||||||
|
HorizontalAlignment = HorizontalAlignment.Center,
|
||||||
|
VerticalAlignment = VerticalAlignment.Center,
|
||||||
|
Spacing = 8,
|
||||||
|
Children =
|
||||||
|
{
|
||||||
|
new TextBlock
|
||||||
|
{
|
||||||
|
Text = header,
|
||||||
|
FontSize = 20,
|
||||||
|
FontWeight = FontWeight.SemiBold,
|
||||||
|
HorizontalAlignment = HorizontalAlignment.Center,
|
||||||
|
Foreground = Brushes.Black,
|
||||||
|
},
|
||||||
|
new TextBlock
|
||||||
|
{
|
||||||
|
Text = body,
|
||||||
|
FontSize = 13,
|
||||||
|
Opacity = 0.7,
|
||||||
|
TextWrapping = TextWrapping.Wrap,
|
||||||
|
TextAlignment = TextAlignment.Center,
|
||||||
|
MaxWidth = 260,
|
||||||
|
Foreground = Brushes.Black,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
HorizontalContentAlignment = HorizontalAlignment.Stretch,
|
||||||
|
VerticalContentAlignment = VerticalAlignment.Stretch
|
||||||
|
};
|
||||||
|
}
|
||||||
65
demo/Semi.Avalonia.Demo/Pages/NavigationPageDemo.axaml
Normal file
65
demo/Semi.Avalonia.Demo/Pages/NavigationPageDemo.axaml
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
<UserControl
|
||||||
|
x:Class="Semi.Avalonia.Demo.Pages.NavigationPageDemo"
|
||||||
|
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="700"
|
||||||
|
d:DesignWidth="800"
|
||||||
|
mc:Ignorable="d">
|
||||||
|
<ScrollViewer>
|
||||||
|
<DockPanel>
|
||||||
|
<ScrollViewer DockPanel.Dock="Right" Width="260">
|
||||||
|
<StackPanel Margin="12" Spacing="8">
|
||||||
|
<TextBlock Text="Configuration" FontWeight="SemiBold" FontSize="16" />
|
||||||
|
<TextBlock Text="Navigation" FontWeight="SemiBold" FontSize="13" />
|
||||||
|
|
||||||
|
<Button Content="Push Page"
|
||||||
|
HorizontalAlignment="Stretch"
|
||||||
|
Click="OnPush" />
|
||||||
|
<Button Content="Pop"
|
||||||
|
HorizontalAlignment="Stretch"
|
||||||
|
Click="OnPop" />
|
||||||
|
<Button Content="Pop to Root"
|
||||||
|
HorizontalAlignment="Stretch"
|
||||||
|
Click="OnPopToRoot" />
|
||||||
|
|
||||||
|
<Separator />
|
||||||
|
|
||||||
|
<TextBlock Text="Options" FontWeight="SemiBold" FontSize="14" />
|
||||||
|
|
||||||
|
<CheckBox Name="HasNavBarCheck"
|
||||||
|
Content="Has Navigation Bar"
|
||||||
|
IsChecked="True"
|
||||||
|
IsCheckedChanged="OnHasNavBarChanged" />
|
||||||
|
<CheckBox Name="HasBackButtonCheck"
|
||||||
|
Content="Has Back Button"
|
||||||
|
IsChecked="True"
|
||||||
|
IsCheckedChanged="OnHasBackButonChanged" />
|
||||||
|
|
||||||
|
<Separator />
|
||||||
|
|
||||||
|
<TextBlock Text="Status" FontWeight="SemiBold" FontSize="14" />
|
||||||
|
<TextBlock Name="StatusText"
|
||||||
|
Text="Depth: 1"
|
||||||
|
Opacity="0.7"
|
||||||
|
TextWrapping="Wrap" />
|
||||||
|
<TextBlock Name="HeaderText"
|
||||||
|
Text="Current: Home"
|
||||||
|
Opacity="0.7"
|
||||||
|
TextWrapping="Wrap" />
|
||||||
|
</StackPanel>
|
||||||
|
</ScrollViewer>
|
||||||
|
|
||||||
|
<Border DockPanel.Dock="Right" Width="1" Background="{DynamicResource SemiColorBackground0}" />
|
||||||
|
|
||||||
|
<Border Margin="12"
|
||||||
|
BorderBrush="{DynamicResource SemiColorBorder}"
|
||||||
|
BorderThickness="1"
|
||||||
|
CornerRadius="6"
|
||||||
|
ClipToBounds="True">
|
||||||
|
<NavigationPage Name="DemoNav" />
|
||||||
|
</Border>
|
||||||
|
</DockPanel>
|
||||||
|
</ScrollViewer>
|
||||||
|
</UserControl>
|
||||||
66
demo/Semi.Avalonia.Demo/Pages/NavigationPageDemo.axaml.cs
Normal file
66
demo/Semi.Avalonia.Demo/Pages/NavigationPageDemo.axaml.cs
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
using Avalonia.Controls;
|
||||||
|
using Avalonia.Interactivity;
|
||||||
|
|
||||||
|
namespace Semi.Avalonia.Demo.Pages;
|
||||||
|
|
||||||
|
public partial class NavigationPageDemo : UserControl
|
||||||
|
{
|
||||||
|
private int _pageCount;
|
||||||
|
|
||||||
|
public NavigationPageDemo()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
Loaded += OnLoaded;
|
||||||
|
}
|
||||||
|
|
||||||
|
private async void OnLoaded(object? sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
await DemoNav.PushAsync(NavigationDemoHelper.MakePage("Home", "Welcome!\nUse the buttons to push and pop pages.", 0), null);
|
||||||
|
UpdateStatus();
|
||||||
|
}
|
||||||
|
|
||||||
|
private async void OnPush(object? sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
_pageCount++;
|
||||||
|
var page = NavigationDemoHelper.MakePage($"Page {_pageCount}", $"This is page {_pageCount}.", _pageCount);
|
||||||
|
NavigationPage.SetHasNavigationBar(page, HasNavBarCheck.IsChecked == true);
|
||||||
|
NavigationPage.SetHasBackButton(page, HasBackButtonCheck.IsChecked == true);
|
||||||
|
await DemoNav.PushAsync(page);
|
||||||
|
UpdateStatus();
|
||||||
|
}
|
||||||
|
|
||||||
|
private async void OnPop(object? sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
await DemoNav.PopAsync();
|
||||||
|
UpdateStatus();
|
||||||
|
}
|
||||||
|
|
||||||
|
private async void OnPopToRoot(object? sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
await DemoNav.PopToRootAsync();
|
||||||
|
_pageCount = 0;
|
||||||
|
UpdateStatus();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnHasNavBarChanged(object? sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
if (DemoNav == null)
|
||||||
|
return;
|
||||||
|
if (DemoNav.CurrentPage != null)
|
||||||
|
NavigationPage.SetHasNavigationBar(DemoNav.CurrentPage, HasNavBarCheck.IsChecked == true);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnHasBackButonChanged(object? sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
if (DemoNav == null)
|
||||||
|
return;
|
||||||
|
if (DemoNav.CurrentPage != null)
|
||||||
|
NavigationPage.SetHasBackButton(DemoNav.CurrentPage, HasBackButtonCheck.IsChecked == true);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void UpdateStatus()
|
||||||
|
{
|
||||||
|
StatusText.Text = $"Depth: {DemoNav.StackDepth}";
|
||||||
|
HeaderText.Text = $"Current: {DemoNav.CurrentPage?.Header ?? "(none)"}";
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -27,7 +27,8 @@ public partial class NotificationDemo : UserControl
|
|||||||
if (sender is RadioButton b && b.Content is string s)
|
if (sender is RadioButton b && b.Content is string s)
|
||||||
{
|
{
|
||||||
Enum.TryParse<NotificationPosition>(s, out var t);
|
Enum.TryParse<NotificationPosition>(s, out var t);
|
||||||
_manager.Position = t;
|
if (_manager is not null)
|
||||||
|
_manager.Position = t;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -28,15 +28,15 @@
|
|||||||
<NumericUpDown
|
<NumericUpDown
|
||||||
Width="100"
|
Width="100"
|
||||||
Classes="Large"
|
Classes="Large"
|
||||||
Watermark="Large"
|
PlaceholderText="Large"
|
||||||
ButtonSpinnerLocation="Left" />
|
ButtonSpinnerLocation="Left" />
|
||||||
<NumericUpDown
|
<NumericUpDown
|
||||||
Width="100"
|
Width="100"
|
||||||
Watermark="Default"
|
PlaceholderText="Default"
|
||||||
ShowButtonSpinner="False" />
|
ShowButtonSpinner="False" />
|
||||||
<NumericUpDown
|
<NumericUpDown
|
||||||
Width="100"
|
Width="100"
|
||||||
Watermark="Small"
|
PlaceholderText="Small"
|
||||||
Classes="Small" />
|
Classes="Small" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
|
|||||||
@@ -353,12 +353,12 @@
|
|||||||
<StackPanel>
|
<StackPanel>
|
||||||
<TextBlock Text="Install via nuget: " />
|
<TextBlock Text="Install via nuget: " />
|
||||||
<Border Margin="0,16" Classes="CodeBlock">
|
<Border Margin="0,16" Classes="CodeBlock">
|
||||||
<SelectableTextBlock FontFamily="Consolas" Text="{Binding $parent[local:Overview].MainInstall}" />
|
<SelectableTextBlock Text="{Binding $parent[local:Overview].MainInstall}" />
|
||||||
</Border>
|
</Border>
|
||||||
<TextBlock Text="Reference styles: " />
|
<TextBlock Text="Reference styles: " />
|
||||||
<Border Margin="0,16" Classes="CodeBlock">
|
<Border Margin="0,16" Classes="CodeBlock">
|
||||||
<SelectableTextBlock
|
<SelectableTextBlock
|
||||||
FontFamily="Consolas"
|
|
||||||
Text="{Binding $parent[local:Overview].MainStyle}"
|
Text="{Binding $parent[local:Overview].MainStyle}"
|
||||||
TextWrapping="Wrap" />
|
TextWrapping="Wrap" />
|
||||||
</Border>
|
</Border>
|
||||||
@@ -368,12 +368,12 @@
|
|||||||
<StackPanel>
|
<StackPanel>
|
||||||
<TextBlock Text="Install via nuget: " />
|
<TextBlock Text="Install via nuget: " />
|
||||||
<Border Margin="0,16" Classes="CodeBlock">
|
<Border Margin="0,16" Classes="CodeBlock">
|
||||||
<SelectableTextBlock FontFamily="Consolas" Text="{Binding $parent[local:Overview].ColorPickerInstall}" />
|
<SelectableTextBlock Text="{Binding $parent[local:Overview].ColorPickerInstall}" />
|
||||||
</Border>
|
</Border>
|
||||||
<TextBlock Text="Reference styles: " />
|
<TextBlock Text="Reference styles: " />
|
||||||
<Border Margin="0,16" Classes="CodeBlock">
|
<Border Margin="0,16" Classes="CodeBlock">
|
||||||
<SelectableTextBlock
|
<SelectableTextBlock
|
||||||
FontFamily="Consolas"
|
|
||||||
Text="{Binding $parent[local:Overview].ColorPickerStyle}"
|
Text="{Binding $parent[local:Overview].ColorPickerStyle}"
|
||||||
TextWrapping="Wrap" />
|
TextWrapping="Wrap" />
|
||||||
</Border>
|
</Border>
|
||||||
@@ -383,12 +383,12 @@
|
|||||||
<StackPanel>
|
<StackPanel>
|
||||||
<TextBlock Text="Install via nuget: " />
|
<TextBlock Text="Install via nuget: " />
|
||||||
<Border Margin="0,16" Classes="CodeBlock">
|
<Border Margin="0,16" Classes="CodeBlock">
|
||||||
<SelectableTextBlock FontFamily="Consolas" Text="{Binding $parent[local:Overview].DataGridInstall}" />
|
<SelectableTextBlock Text="{Binding $parent[local:Overview].DataGridInstall}" />
|
||||||
</Border>
|
</Border>
|
||||||
<TextBlock Text="Reference styles: " />
|
<TextBlock Text="Reference styles: " />
|
||||||
<Border Margin="0,16" Classes="CodeBlock">
|
<Border Margin="0,16" Classes="CodeBlock">
|
||||||
<SelectableTextBlock
|
<SelectableTextBlock
|
||||||
FontFamily="Consolas"
|
|
||||||
Text="{Binding $parent[local:Overview].DataGridStyle}"
|
Text="{Binding $parent[local:Overview].DataGridStyle}"
|
||||||
TextWrapping="Wrap" />
|
TextWrapping="Wrap" />
|
||||||
</Border>
|
</Border>
|
||||||
@@ -398,12 +398,12 @@
|
|||||||
<StackPanel>
|
<StackPanel>
|
||||||
<TextBlock Text="Install via nuget: " />
|
<TextBlock Text="Install via nuget: " />
|
||||||
<Border Margin="0,16" Classes="CodeBlock">
|
<Border Margin="0,16" Classes="CodeBlock">
|
||||||
<SelectableTextBlock FontFamily="Consolas" Text="{Binding $parent[local:Overview].TreeDataGridInstall}" />
|
<SelectableTextBlock Text="{Binding $parent[local:Overview].TreeDataGridInstall}" />
|
||||||
</Border>
|
</Border>
|
||||||
<TextBlock Text="Reference styles: " />
|
<TextBlock Text="Reference styles: " />
|
||||||
<Border Margin="0,16" Classes="CodeBlock">
|
<Border Margin="0,16" Classes="CodeBlock">
|
||||||
<SelectableTextBlock
|
<SelectableTextBlock
|
||||||
FontFamily="Consolas"
|
|
||||||
Text="{Binding $parent[local:Overview].TreeDataGridStyle}"
|
Text="{Binding $parent[local:Overview].TreeDataGridStyle}"
|
||||||
TextWrapping="Wrap" />
|
TextWrapping="Wrap" />
|
||||||
</Border>
|
</Border>
|
||||||
@@ -413,12 +413,12 @@
|
|||||||
<StackPanel>
|
<StackPanel>
|
||||||
<TextBlock Text="Install via nuget: " />
|
<TextBlock Text="Install via nuget: " />
|
||||||
<Border Margin="0,16" Classes="CodeBlock">
|
<Border Margin="0,16" Classes="CodeBlock">
|
||||||
<SelectableTextBlock FontFamily="Consolas" Text="{Binding $parent[local:Overview].DockInstall}" />
|
<SelectableTextBlock Text="{Binding $parent[local:Overview].DockInstall}" />
|
||||||
</Border>
|
</Border>
|
||||||
<TextBlock Text="Reference styles: " />
|
<TextBlock Text="Reference styles: " />
|
||||||
<Border Margin="0,16" Classes="CodeBlock">
|
<Border Margin="0,16" Classes="CodeBlock">
|
||||||
<SelectableTextBlock
|
<SelectableTextBlock
|
||||||
FontFamily="Consolas"
|
|
||||||
Text="{Binding $parent[local:Overview].DockStyle}"
|
Text="{Binding $parent[local:Overview].DockStyle}"
|
||||||
TextWrapping="Wrap" />
|
TextWrapping="Wrap" />
|
||||||
</Border>
|
</Border>
|
||||||
@@ -428,12 +428,12 @@
|
|||||||
<StackPanel>
|
<StackPanel>
|
||||||
<TextBlock Text="Install via nuget: " />
|
<TextBlock Text="Install via nuget: " />
|
||||||
<Border Margin="0,16" Classes="CodeBlock">
|
<Border Margin="0,16" Classes="CodeBlock">
|
||||||
<SelectableTextBlock FontFamily="Consolas" Text="{Binding $parent[local:Overview].TabaloniaInstall}" />
|
<SelectableTextBlock Text="{Binding $parent[local:Overview].TabaloniaInstall}" />
|
||||||
</Border>
|
</Border>
|
||||||
<TextBlock Text="Reference styles: " />
|
<TextBlock Text="Reference styles: " />
|
||||||
<Border Margin="0,16" Classes="CodeBlock">
|
<Border Margin="0,16" Classes="CodeBlock">
|
||||||
<SelectableTextBlock
|
<SelectableTextBlock
|
||||||
FontFamily="Consolas"
|
|
||||||
Text="{Binding $parent[local:Overview].TabaloniaStyle}"
|
Text="{Binding $parent[local:Overview].TabaloniaStyle}"
|
||||||
TextWrapping="Wrap" />
|
TextWrapping="Wrap" />
|
||||||
</Border>
|
</Border>
|
||||||
@@ -443,12 +443,12 @@
|
|||||||
<StackPanel>
|
<StackPanel>
|
||||||
<TextBlock Text="Install via nuget: " />
|
<TextBlock Text="Install via nuget: " />
|
||||||
<Border Margin="0,16" Classes="CodeBlock">
|
<Border Margin="0,16" Classes="CodeBlock">
|
||||||
<SelectableTextBlock FontFamily="Consolas" Text="{Binding $parent[local:Overview].AvaloniaEditInstall}" />
|
<SelectableTextBlock Text="{Binding $parent[local:Overview].AvaloniaEditInstall}" />
|
||||||
</Border>
|
</Border>
|
||||||
<TextBlock Text="Reference styles: " />
|
<TextBlock Text="Reference styles: " />
|
||||||
<Border Margin="0,16" Classes="CodeBlock">
|
<Border Margin="0,16" Classes="CodeBlock">
|
||||||
<SelectableTextBlock
|
<SelectableTextBlock
|
||||||
FontFamily="Consolas"
|
|
||||||
Text="{Binding $parent[local:Overview].AvaloniaEditStyle}"
|
Text="{Binding $parent[local:Overview].AvaloniaEditStyle}"
|
||||||
TextWrapping="Wrap" />
|
TextWrapping="Wrap" />
|
||||||
</Border>
|
</Border>
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ public partial class Overview : UserControl
|
|||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
}
|
}
|
||||||
|
|
||||||
public string MainInstall { get; set; } = "dotnet add package Semi.Avalonia --version 11.2.1.9";
|
public string MainInstall { get; set; } = "dotnet add package Semi.Avalonia";
|
||||||
|
|
||||||
public string MainStyle { get; set; } =
|
public string MainStyle { get; set; } =
|
||||||
"""
|
"""
|
||||||
@@ -18,7 +18,7 @@ public partial class Overview : UserControl
|
|||||||
</Application.Styles>
|
</Application.Styles>
|
||||||
""";
|
""";
|
||||||
|
|
||||||
public string ColorPickerInstall { get; set; } = "dotnet add package Semi.Avalonia.ColorPicker --version 11.2.1.9";
|
public string ColorPickerInstall { get; set; } = "dotnet add package Semi.Avalonia.ColorPicker";
|
||||||
|
|
||||||
public string ColorPickerStyle { get; set; } =
|
public string ColorPickerStyle { get; set; } =
|
||||||
"""
|
"""
|
||||||
@@ -27,7 +27,7 @@ public partial class Overview : UserControl
|
|||||||
</Application.Styles>
|
</Application.Styles>
|
||||||
""";
|
""";
|
||||||
|
|
||||||
public string DataGridInstall { get; set; } = "dotnet add package Semi.Avalonia.DataGrid --version 11.2.1.9";
|
public string DataGridInstall { get; set; } = "dotnet add package Semi.Avalonia.DataGrid";
|
||||||
|
|
||||||
public string DataGridStyle { get; set; } =
|
public string DataGridStyle { get; set; } =
|
||||||
"""
|
"""
|
||||||
@@ -36,7 +36,7 @@ public partial class Overview : UserControl
|
|||||||
</Application.Styles>
|
</Application.Styles>
|
||||||
""";
|
""";
|
||||||
|
|
||||||
public string TreeDataGridInstall { get; set; } = "dotnet add package Semi.Avalonia.TreeDataGrid --version 11.0.10.4";
|
public string TreeDataGridInstall { get; set; } = "dotnet add package Semi.Avalonia.TreeDataGrid";
|
||||||
|
|
||||||
public string TreeDataGridStyle { get; set; } =
|
public string TreeDataGridStyle { get; set; } =
|
||||||
"""
|
"""
|
||||||
@@ -45,7 +45,7 @@ public partial class Overview : UserControl
|
|||||||
</Application.Styles>
|
</Application.Styles>
|
||||||
""";
|
""";
|
||||||
|
|
||||||
public string DockInstall { get; set; } = "dotnet add package Semi.Avalonia.Dock --version 11.3.0";
|
public string DockInstall { get; set; } = "dotnet add package Semi.Avalonia.Dock";
|
||||||
|
|
||||||
public string DockStyle { get; set; } =
|
public string DockStyle { get; set; } =
|
||||||
"""
|
"""
|
||||||
@@ -54,7 +54,7 @@ public partial class Overview : UserControl
|
|||||||
</Application.Styles>
|
</Application.Styles>
|
||||||
""";
|
""";
|
||||||
|
|
||||||
public string TabaloniaInstall { get; set; } = "dotnet add package Semi.Avalonia.Tabalonia --version 11.0.0-beta1";
|
public string TabaloniaInstall { get; set; } = "dotnet add package Semi.Avalonia.Tabalonia";
|
||||||
|
|
||||||
public string TabaloniaStyle { get; set; } =
|
public string TabaloniaStyle { get; set; } =
|
||||||
"""
|
"""
|
||||||
@@ -63,7 +63,7 @@ public partial class Overview : UserControl
|
|||||||
</Application.Styles>
|
</Application.Styles>
|
||||||
""";
|
""";
|
||||||
|
|
||||||
public string AvaloniaEditInstall { get; set; } = "dotnet add package Semi.Avalonia.AvaloniaEdit --version 11.2.0";
|
public string AvaloniaEditInstall { get; set; } = "dotnet add package Semi.Avalonia.AvaloniaEdit";
|
||||||
|
|
||||||
public string AvaloniaEditStyle { get; set; } =
|
public string AvaloniaEditStyle { get; set; } =
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -8,7 +8,6 @@
|
|||||||
xmlns:viewModels="clr-namespace:Semi.Avalonia.Demo.ViewModels"
|
xmlns:viewModels="clr-namespace:Semi.Avalonia.Demo.ViewModels"
|
||||||
d:DesignHeight="450"
|
d:DesignHeight="450"
|
||||||
d:DesignWidth="800"
|
d:DesignWidth="800"
|
||||||
x:CompileBindings="True"
|
|
||||||
x:DataType="viewModels:PaletteDemoViewModel"
|
x:DataType="viewModels:PaletteDemoViewModel"
|
||||||
mc:Ignorable="d">
|
mc:Ignorable="d">
|
||||||
<Design.DataContext>
|
<Design.DataContext>
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
using Avalonia.Controls.Primitives;
|
using Avalonia.Controls.Primitives;
|
||||||
|
using Avalonia.Input.Platform;
|
||||||
using Avalonia.Threading;
|
using Avalonia.Threading;
|
||||||
using Semi.Avalonia.Demo.ViewModels;
|
using Semi.Avalonia.Demo.ViewModels;
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,6 @@
|
|||||||
d:DesignHeight="450"
|
d:DesignHeight="450"
|
||||||
d:DesignWidth="800"
|
d:DesignWidth="800"
|
||||||
x:DataType="vm:RefreshContainerDemoViewModel"
|
x:DataType="vm:RefreshContainerDemoViewModel"
|
||||||
x:CompileBindings="True"
|
|
||||||
mc:Ignorable="d">
|
mc:Ignorable="d">
|
||||||
<DockPanel HorizontalAlignment="Stretch" VerticalAlignment="Top">
|
<DockPanel HorizontalAlignment="Stretch" VerticalAlignment="Top">
|
||||||
<Label DockPanel.Dock="Top">A control that supports pull to refresh</Label>
|
<Label DockPanel.Dock="Top">A control that supports pull to refresh</Label>
|
||||||
|
|||||||
@@ -1,80 +0,0 @@
|
|||||||
<UserControl
|
|
||||||
x:Class="Semi.Avalonia.Demo.Pages.RepeatButtonDemo"
|
|
||||||
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" Spacing="20">
|
|
||||||
<TextBlock>Light (Default)</TextBlock>
|
|
||||||
<StackPanel Orientation="Horizontal" Spacing="20">
|
|
||||||
<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="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="Danger"
|
|
||||||
IsEnabled="False"
|
|
||||||
Theme="{DynamicResource SolidRepeatButton}">
|
|
||||||
Disabled
|
|
||||||
</RepeatButton>
|
|
||||||
</StackPanel>
|
|
||||||
<TextBlock>Outline</TextBlock>
|
|
||||||
<StackPanel Orientation="Horizontal" Spacing="20">
|
|
||||||
<RepeatButton Classes="Primary" Theme="{DynamicResource OutlineRepeatButton}">Primary</RepeatButton>
|
|
||||||
<RepeatButton Classes="Secondary" Theme="{DynamicResource OutlineRepeatButton}">Secondary</RepeatButton>
|
|
||||||
<RepeatButton Classes="Tertiary" Theme="{DynamicResource OutlineRepeatButton}">Tertiary</RepeatButton>
|
|
||||||
<RepeatButton Classes="Success" Theme="{DynamicResource OutlineRepeatButton}">Success</RepeatButton>
|
|
||||||
<RepeatButton Classes="Warning" Theme="{DynamicResource OutlineRepeatButton}">Warning</RepeatButton>
|
|
||||||
<RepeatButton Classes="Danger" Theme="{DynamicResource OutlineRepeatButton}">Danger</RepeatButton>
|
|
||||||
<RepeatButton
|
|
||||||
Classes="Danger"
|
|
||||||
IsEnabled="False"
|
|
||||||
Theme="{DynamicResource OutlineRepeatButton}">
|
|
||||||
Disabled
|
|
||||||
</RepeatButton>
|
|
||||||
</StackPanel>
|
|
||||||
<TextBlock>Borderless</TextBlock>
|
|
||||||
<StackPanel Orientation="Horizontal" Spacing="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="Danger"
|
|
||||||
IsEnabled="False"
|
|
||||||
Theme="{DynamicResource BorderlessRepeatButton}">
|
|
||||||
Disabled
|
|
||||||
</RepeatButton>
|
|
||||||
</StackPanel>
|
|
||||||
<TextBlock>Disabled</TextBlock>
|
|
||||||
<StackPanel Background="{DynamicResource SemiColorBackground1}" Orientation="Horizontal" Spacing="20">
|
|
||||||
<Button IsEnabled="False">Light</Button>
|
|
||||||
<Button IsEnabled="False" Theme="{DynamicResource SolidButton}">Solid</Button>
|
|
||||||
<Button IsEnabled="False" Theme="{DynamicResource OutlineButton}">Outline</Button>
|
|
||||||
<Button IsEnabled="False" Theme="{DynamicResource BorderlessButton}">Borderless</Button>
|
|
||||||
</StackPanel>
|
|
||||||
<TextBlock>Size Classes</TextBlock>
|
|
||||||
<StackPanel Orientation="Horizontal" Spacing="20">
|
|
||||||
<RepeatButton Classes="Small">Small</RepeatButton>
|
|
||||||
<RepeatButton>Default</RepeatButton>
|
|
||||||
<RepeatButton Classes="Large">Large</RepeatButton>
|
|
||||||
</StackPanel>
|
|
||||||
</StackPanel>
|
|
||||||
</UserControl>
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
using Avalonia.Controls;
|
|
||||||
|
|
||||||
namespace Semi.Avalonia.Demo.Pages;
|
|
||||||
|
|
||||||
public partial class RepeatButtonDemo : UserControl
|
|
||||||
{
|
|
||||||
public RepeatButtonDemo()
|
|
||||||
{
|
|
||||||
InitializeComponent();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -22,6 +22,15 @@
|
|||||||
TickFrequency="10"
|
TickFrequency="10"
|
||||||
TickPlacement="Outside"
|
TickPlacement="Outside"
|
||||||
Value="0" />
|
Value="0" />
|
||||||
|
<Slider
|
||||||
|
Value="0"
|
||||||
|
Minimum="0"
|
||||||
|
Maximum="100"
|
||||||
|
TickPlacement="BottomRight"
|
||||||
|
IsSnapToTickEnabled="True"
|
||||||
|
IsDirectionReversed="True"
|
||||||
|
Ticks="0,20,25,40,75,100"
|
||||||
|
Width="300" />
|
||||||
<Slider
|
<Slider
|
||||||
Width="300"
|
Width="300"
|
||||||
Classes="ToolTip"
|
Classes="ToolTip"
|
||||||
|
|||||||
@@ -7,276 +7,187 @@
|
|||||||
xmlns:vm="clr-namespace:Semi.Avalonia.Demo.ViewModels"
|
xmlns:vm="clr-namespace:Semi.Avalonia.Demo.ViewModels"
|
||||||
d:DesignHeight="1000"
|
d:DesignHeight="1000"
|
||||||
d:DesignWidth="800"
|
d:DesignWidth="800"
|
||||||
|
x:DataType="vm:SplitViewDemoViewModel"
|
||||||
mc:Ignorable="d">
|
mc:Ignorable="d">
|
||||||
<Design.DataContext>
|
<Design.DataContext>
|
||||||
<vm:SplitViewDemoViewModel />
|
<vm:SplitViewDemoViewModel />
|
||||||
</Design.DataContext>
|
</Design.DataContext>
|
||||||
<Border>
|
<Border>
|
||||||
<Grid ColumnDefinitions="*,400">
|
<Grid ColumnDefinitions="*,400">
|
||||||
<Border Grid.Column="1" VerticalAlignment="Top" Margin="10 0 0 0">
|
<Border
|
||||||
<Grid RowDefinitions="*, *, *, *, *, *" ColumnDefinitions="Auto, *">
|
Grid.Column="1"
|
||||||
|
Margin="10,0,0,0"
|
||||||
|
VerticalAlignment="Top">
|
||||||
|
<Grid ColumnDefinitions="Auto, *" RowDefinitions="*, *, *, *, *, *">
|
||||||
<Label
|
<Label
|
||||||
Grid.Row="0" Grid.Column="0"
|
Grid.Row="0"
|
||||||
|
Grid.Column="0"
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center"
|
||||||
Content="IsPaneOpen" />
|
Content="IsPaneOpen" />
|
||||||
<ToggleSwitch
|
<ToggleSwitch
|
||||||
Grid.Row="0" Grid.Column="1"
|
Name="PaneOpenButton"
|
||||||
Name="PaneOpenButton" />
|
Grid.Row="0"
|
||||||
|
Grid.Column="1" />
|
||||||
|
|
||||||
<Label
|
<Label
|
||||||
Grid.Row="1" Grid.Column="0"
|
Grid.Row="1"
|
||||||
|
Grid.Column="0"
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center"
|
||||||
Content="UseLightDismissOverlayMode" />
|
Content="UseLightDismissOverlayMode" />
|
||||||
<ToggleSwitch
|
<ToggleSwitch
|
||||||
Grid.Row="1" Grid.Column="1"
|
Name="UseLightDismissOverlayModeButton"
|
||||||
Name="UseLightDismissOverlayModeButton" />
|
Grid.Row="1"
|
||||||
|
Grid.Column="1" />
|
||||||
|
|
||||||
<Label
|
<Label
|
||||||
Grid.Row="2" Grid.Column="0"
|
Grid.Row="2"
|
||||||
|
Grid.Column="0"
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center"
|
||||||
Content="Placement" />
|
Content="Placement" />
|
||||||
<ToggleSwitch
|
<ComboBox
|
||||||
Grid.Row="2" Grid.Column="1"
|
Grid.Row="2"
|
||||||
Name="PanePlacementButton"
|
Grid.Column="1"
|
||||||
OffContent="Left"
|
Name="PanelPlacementSelector"
|
||||||
OnContent="Right" />
|
HorizontalAlignment="Stretch"
|
||||||
|
ItemsSource="{x:Static vm:SplitViewDemoViewModel.Placements}"
|
||||||
|
SelectedItem="{x:Static SplitViewPanePlacement.Left}"
|
||||||
|
/>
|
||||||
<Label
|
<Label
|
||||||
Grid.Row="3" Grid.Column="0"
|
Grid.Row="3"
|
||||||
|
Grid.Column="0"
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center"
|
||||||
Content="DisplayMode" />
|
Content="DisplayMode" />
|
||||||
<ComboBox
|
<ComboBox
|
||||||
Grid.Row="3" Grid.Column="1"
|
|
||||||
Name="DisplayModeSelector"
|
Name="DisplayModeSelector"
|
||||||
|
Grid.Row="3"
|
||||||
|
Grid.Column="1"
|
||||||
HorizontalAlignment="Stretch"
|
HorizontalAlignment="Stretch"
|
||||||
ItemsSource="{x:Static vm:SplitViewDemoViewModel.DisplayModes}"
|
ItemsSource="{x:Static vm:SplitViewDemoViewModel.DisplayModes}"
|
||||||
SelectedItem="{x:Static SplitViewDisplayMode.CompactInline}" />
|
SelectedItem="{x:Static SplitViewDisplayMode.CompactInline}" />
|
||||||
|
|
||||||
<Label
|
<Label
|
||||||
Grid.Row="4" Grid.Column="0"
|
Grid.Row="4"
|
||||||
|
Grid.Column="0"
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center"
|
||||||
Content="{Binding #CompactPaneLengthSlider.Value, StringFormat='{}CompactPaneLength: {0}'}" />
|
Content="{Binding #CompactPaneLengthSlider.Value, StringFormat='{}CompactPaneLength: {0}'}" />
|
||||||
<Slider
|
<Slider
|
||||||
Grid.Row="4" Grid.Column="1"
|
|
||||||
Name="CompactPaneLengthSlider"
|
Name="CompactPaneLengthSlider"
|
||||||
|
Grid.Row="4"
|
||||||
|
Grid.Column="1"
|
||||||
|
IsSnapToTickEnabled="True"
|
||||||
Maximum="128"
|
Maximum="128"
|
||||||
Minimum="0"
|
Minimum="0"
|
||||||
TickFrequency="1"
|
TickFrequency="1"
|
||||||
IsSnapToTickEnabled="True"
|
|
||||||
Value="48" />
|
Value="48" />
|
||||||
|
|
||||||
<Label
|
<Label
|
||||||
Grid.Row="5" Grid.Column="0"
|
Grid.Row="5"
|
||||||
|
Grid.Column="0"
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center"
|
||||||
Content="{Binding #OpenPaneLengthSlider.Value,StringFormat='{}OpenPaneLength: {0}'}" />
|
Content="{Binding #OpenPaneLengthSlider.Value, StringFormat='{}OpenPaneLength: {0}'}" />
|
||||||
<Slider
|
<Slider
|
||||||
Grid.Row="5" Grid.Column="1"
|
|
||||||
Name="OpenPaneLengthSlider"
|
Name="OpenPaneLengthSlider"
|
||||||
|
Grid.Row="5"
|
||||||
|
Grid.Column="1"
|
||||||
|
IsSnapToTickEnabled="True"
|
||||||
Maximum="500"
|
Maximum="500"
|
||||||
Minimum="128"
|
Minimum="128"
|
||||||
TickFrequency="1"
|
TickFrequency="1"
|
||||||
IsSnapToTickEnabled="True"
|
|
||||||
Value="256" />
|
Value="256" />
|
||||||
</Grid>
|
</Grid>
|
||||||
</Border>
|
</Border>
|
||||||
<TabControl Grid.Column="0">
|
<SplitView
|
||||||
<TabItem Header="Default">
|
Grid.Column="0"
|
||||||
<Border
|
Name="SplitView"
|
||||||
BorderBrush="{DynamicResource SemiGrey1}"
|
CompactPaneLength="{Binding #CompactPaneLengthSlider.Value}"
|
||||||
BorderThickness="1">
|
DisplayMode="{Binding #DisplayModeSelector.SelectedItem}"
|
||||||
<SplitView
|
IsPaneOpen="{Binding #PaneOpenButton.IsChecked, Mode=TwoWay}"
|
||||||
Name="SplitView"
|
OpenPaneLength="{Binding #OpenPaneLengthSlider.Value}"
|
||||||
IsPaneOpen="{Binding #PaneOpenButton.IsChecked,Mode=TwoWay}"
|
PanePlacement="{Binding #PanelPlacementSelector.SelectedItem}"
|
||||||
UseLightDismissOverlayMode="{Binding #UseLightDismissOverlayModeButton.IsChecked}"
|
UseLightDismissOverlayMode="{Binding #UseLightDismissOverlayModeButton.IsChecked}">
|
||||||
PanePlacement="{Binding #PanePlacementButton.IsChecked}"
|
<SplitView.Background>
|
||||||
DisplayMode="{Binding #DisplayModeSelector.SelectedItem}"
|
<LinearGradientBrush StartPoint="0%,0%" EndPoint="0%,100%">
|
||||||
CompactPaneLength="{Binding #CompactPaneLengthSlider.Value}"
|
<GradientStop Offset="0" Color="#6b4c1b" />
|
||||||
OpenPaneLength="{Binding #OpenPaneLengthSlider.Value}">
|
<GradientStop Offset="1" Color="#291e10" />
|
||||||
<SplitView.Background>
|
</LinearGradientBrush>
|
||||||
<LinearGradientBrush StartPoint="0%,0%" EndPoint="0%,100%">
|
</SplitView.Background>
|
||||||
<GradientStop Color="#6b4c1b" Offset="0" />
|
<SplitView.Pane>
|
||||||
<GradientStop Color="#291e10" Offset="1" />
|
<Grid RowDefinitions="Auto,*,Auto">
|
||||||
</LinearGradientBrush>
|
<StackPanel Grid.Row="0" Orientation="Horizontal" Margin="8 12">
|
||||||
</SplitView.Background>
|
<ToggleSwitch
|
||||||
<SplitView.Pane>
|
Content="{StaticResource SemiIconSidebar}"
|
||||||
<Grid RowDefinitions="Auto,*,Auto">
|
IsChecked="{Binding #SplitView.IsPaneOpen}"
|
||||||
<TextBlock
|
Theme="{DynamicResource IconBorderlessToggleSwitch}" />
|
||||||
Grid.Row="0"
|
<TextBlock
|
||||||
Name="PaneHeader"
|
Name="PaneHeader"
|
||||||
Margin="8,12"
|
VerticalAlignment="Center"
|
||||||
FontWeight="Bold"
|
Margin="8 0"
|
||||||
Text="Playlist" />
|
FontWeight="Bold"
|
||||||
<ListBox
|
Text="Playlist" />
|
||||||
Grid.Row="1"
|
</StackPanel>
|
||||||
ItemsSource="{Binding Songs}" />
|
|
||||||
<ToggleSwitch
|
<ListBox Grid.Row="1" ItemsSource="{Binding Songs}" />
|
||||||
Grid.Row="2"
|
|
||||||
Theme="{DynamicResource IconBorderlessToggleSwitch}"
|
</Grid>
|
||||||
Content="{StaticResource SemiIconSidebar}"
|
</SplitView.Pane>
|
||||||
HorizontalAlignment="Left"
|
|
||||||
IsChecked="{Binding #SplitView.IsPaneOpen}" />
|
|
||||||
</Grid>
|
|
||||||
</SplitView.Pane>
|
|
||||||
|
|
||||||
<Panel>
|
<Panel>
|
||||||
<Panel.Styles>
|
<Panel.Styles>
|
||||||
<Style Selector="Image#AlbumCover">
|
<Style Selector="Image#AlbumCover">
|
||||||
<Style.Animations>
|
<Style.Animations>
|
||||||
<Animation IterationCount="Infinite" Duration="0:0:40">
|
<Animation IterationCount="Infinite" Duration="0:0:40">
|
||||||
<KeyFrame Cue="0%">
|
<KeyFrame Cue="0%">
|
||||||
<Setter Property="RotateTransform.Angle" Value="0" />
|
<Setter Property="RotateTransform.Angle" Value="0" />
|
||||||
</KeyFrame>
|
</KeyFrame>
|
||||||
<KeyFrame Cue="100%">
|
<KeyFrame Cue="100%">
|
||||||
<Setter Property="RotateTransform.Angle" Value="360" />
|
<Setter Property="RotateTransform.Angle" Value="360" />
|
||||||
</KeyFrame>
|
</KeyFrame>
|
||||||
</Animation>
|
</Animation>
|
||||||
</Style.Animations>
|
</Style.Animations>
|
||||||
</Style>
|
</Style>
|
||||||
</Panel.Styles>
|
</Panel.Styles>
|
||||||
<Image
|
<Image
|
||||||
Source="/Assets/WORLD.png"
|
Name="AlbumCover"
|
||||||
Name="AlbumCover"
|
Width="200"
|
||||||
Width="200"
|
Height="200"
|
||||||
Height="200" />
|
Source="/Assets/WORLD.png" />
|
||||||
<Arc
|
<Arc
|
||||||
Width="290"
|
Width="290"
|
||||||
Height="290"
|
Height="290"
|
||||||
StartAngle="0"
|
StartAngle="0"
|
||||||
SweepAngle="360"
|
StrokeJoin="Round"
|
||||||
StrokeJoin="Round"
|
StrokeLineCap="Round"
|
||||||
StrokeLineCap="Round"
|
StrokeThickness="45"
|
||||||
StrokeThickness="45">
|
SweepAngle="360">
|
||||||
<Arc.Stroke>
|
<Arc.Stroke>
|
||||||
<LinearGradientBrush StartPoint="0%,0%" EndPoint="100%,0%">
|
<LinearGradientBrush StartPoint="0%,0%" EndPoint="100%,0%">
|
||||||
<GradientStop Color="#010101" Offset="0" />
|
<GradientStop Offset="0" Color="#010101" />
|
||||||
<GradientStop Color="#363636" Offset="0.5" />
|
<GradientStop Offset="0.5" Color="#363636" />
|
||||||
<GradientStop Color="#010101" Offset="1" />
|
<GradientStop Offset="1" Color="#010101" />
|
||||||
</LinearGradientBrush>
|
</LinearGradientBrush>
|
||||||
</Arc.Stroke>
|
</Arc.Stroke>
|
||||||
</Arc>
|
</Arc>
|
||||||
<Arc
|
<Arc
|
||||||
Width="294"
|
Width="294"
|
||||||
Height="294"
|
Height="294"
|
||||||
StartAngle="0"
|
StartAngle="0"
|
||||||
SweepAngle="360"
|
Stroke="Black"
|
||||||
StrokeJoin="Round"
|
StrokeJoin="Round"
|
||||||
StrokeLineCap="Round"
|
StrokeLineCap="Round"
|
||||||
StrokeThickness="4"
|
StrokeThickness="4"
|
||||||
Stroke="Black" />
|
SweepAngle="360" />
|
||||||
<Arc
|
<Arc
|
||||||
Width="310"
|
Width="310"
|
||||||
Height="310"
|
Height="310"
|
||||||
StartAngle="0"
|
Opacity="0.1"
|
||||||
SweepAngle="360"
|
StartAngle="0"
|
||||||
StrokeJoin="Round"
|
Stroke="#C6CACD"
|
||||||
StrokeLineCap="Round"
|
StrokeJoin="Round"
|
||||||
StrokeThickness="10"
|
StrokeLineCap="Round"
|
||||||
Stroke="#C6CACD"
|
StrokeThickness="10"
|
||||||
Opacity="0.1" />
|
SweepAngle="360" />
|
||||||
</Panel>
|
</Panel>
|
||||||
|
</SplitView>
|
||||||
</SplitView>
|
|
||||||
</Border>
|
|
||||||
</TabItem>
|
|
||||||
<TabItem Header="VerticalSplitView">
|
|
||||||
<Border
|
|
||||||
BorderBrush="{DynamicResource SemiGrey1}"
|
|
||||||
BorderThickness="1">
|
|
||||||
<SplitView
|
|
||||||
Name="SplitView2"
|
|
||||||
Theme="{DynamicResource VerticalSplitView}"
|
|
||||||
IsPaneOpen="{Binding #PaneOpenButton.IsChecked,Mode=TwoWay}"
|
|
||||||
UseLightDismissOverlayMode="{Binding #UseLightDismissOverlayModeButton.IsChecked}"
|
|
||||||
PanePlacement="{Binding #PanePlacementButton.IsChecked}"
|
|
||||||
DisplayMode="{Binding #DisplayModeSelector.SelectedItem}"
|
|
||||||
CompactPaneLength="{Binding #CompactPaneLengthSlider.Value}"
|
|
||||||
OpenPaneLength="{Binding #OpenPaneLengthSlider.Value}">
|
|
||||||
<SplitView.Background>
|
|
||||||
<LinearGradientBrush StartPoint="0%,0%" EndPoint="0%,100%">
|
|
||||||
<GradientStop Color="#6b4c1b" Offset="0" />
|
|
||||||
<GradientStop Color="#291e10" Offset="1" />
|
|
||||||
</LinearGradientBrush>
|
|
||||||
</SplitView.Background>
|
|
||||||
<SplitView.Pane>
|
|
||||||
<Grid RowDefinitions="Auto,Auto,*">
|
|
||||||
<ToggleSwitch
|
|
||||||
Grid.Row="0"
|
|
||||||
Theme="{DynamicResource IconBorderlessToggleSwitch}"
|
|
||||||
Content="{StaticResource SemiIconSidebar}"
|
|
||||||
HorizontalAlignment="Left"
|
|
||||||
IsChecked="{Binding #SplitView2.IsPaneOpen}" />
|
|
||||||
<TextBlock
|
|
||||||
Grid.Row="1"
|
|
||||||
Margin="8,12"
|
|
||||||
FontWeight="Bold"
|
|
||||||
Text="Playlist" />
|
|
||||||
<ListBox
|
|
||||||
Grid.Row="2"
|
|
||||||
ItemsSource="{Binding Songs}" />
|
|
||||||
</Grid>
|
|
||||||
</SplitView.Pane>
|
|
||||||
|
|
||||||
<Panel>
|
|
||||||
<Panel.Styles>
|
|
||||||
<Style Selector="Image#AlbumCover2">
|
|
||||||
<Style.Animations>
|
|
||||||
<Animation IterationCount="Infinite" Duration="0:0:40">
|
|
||||||
<KeyFrame Cue="0%">
|
|
||||||
<Setter Property="RotateTransform.Angle" Value="0" />
|
|
||||||
</KeyFrame>
|
|
||||||
<KeyFrame Cue="100%">
|
|
||||||
<Setter Property="RotateTransform.Angle" Value="360" />
|
|
||||||
</KeyFrame>
|
|
||||||
</Animation>
|
|
||||||
</Style.Animations>
|
|
||||||
</Style>
|
|
||||||
</Panel.Styles>
|
|
||||||
<Image
|
|
||||||
Source="/Assets/WORLD.png"
|
|
||||||
Name="AlbumCover2"
|
|
||||||
Width="200"
|
|
||||||
Height="200" />
|
|
||||||
<Arc
|
|
||||||
Width="290"
|
|
||||||
Height="290"
|
|
||||||
StartAngle="0"
|
|
||||||
SweepAngle="360"
|
|
||||||
StrokeJoin="Round"
|
|
||||||
StrokeLineCap="Round"
|
|
||||||
StrokeThickness="45">
|
|
||||||
<Arc.Stroke>
|
|
||||||
<LinearGradientBrush StartPoint="0%,0%" EndPoint="100%,0%">
|
|
||||||
<GradientStop Color="#010101" Offset="0" />
|
|
||||||
<GradientStop Color="#363636" Offset="0.5" />
|
|
||||||
<GradientStop Color="#010101" Offset="1" />
|
|
||||||
</LinearGradientBrush>
|
|
||||||
</Arc.Stroke>
|
|
||||||
</Arc>
|
|
||||||
<Arc
|
|
||||||
Width="294"
|
|
||||||
Height="294"
|
|
||||||
StartAngle="0"
|
|
||||||
SweepAngle="360"
|
|
||||||
StrokeJoin="Round"
|
|
||||||
StrokeLineCap="Round"
|
|
||||||
StrokeThickness="4"
|
|
||||||
Stroke="Black" />
|
|
||||||
<Arc
|
|
||||||
Width="310"
|
|
||||||
Height="310"
|
|
||||||
StartAngle="0"
|
|
||||||
SweepAngle="360"
|
|
||||||
StrokeJoin="Round"
|
|
||||||
StrokeLineCap="Round"
|
|
||||||
StrokeThickness="10"
|
|
||||||
Stroke="#C6CACD"
|
|
||||||
Opacity="0.1" />
|
|
||||||
</Panel>
|
|
||||||
|
|
||||||
</SplitView>
|
|
||||||
</Border>
|
|
||||||
</TabItem>
|
|
||||||
</TabControl>
|
|
||||||
</Grid>
|
</Grid>
|
||||||
</Border>
|
</Border>
|
||||||
</UserControl>
|
</UserControl>
|
||||||
@@ -7,7 +7,6 @@
|
|||||||
xmlns:vm="clr-namespace:Semi.Avalonia.Demo.ViewModels;assembly=Semi.Avalonia.Demo"
|
xmlns:vm="clr-namespace:Semi.Avalonia.Demo.ViewModels;assembly=Semi.Avalonia.Demo"
|
||||||
d:DesignHeight="450"
|
d:DesignHeight="450"
|
||||||
d:DesignWidth="800"
|
d:DesignWidth="800"
|
||||||
x:CompileBindings="True"
|
|
||||||
x:DataType="vm:TabControlDemoViewModel"
|
x:DataType="vm:TabControlDemoViewModel"
|
||||||
mc:Ignorable="d">
|
mc:Ignorable="d">
|
||||||
<ScrollViewer>
|
<ScrollViewer>
|
||||||
|
|||||||
@@ -5,7 +5,6 @@
|
|||||||
xmlns:vm="clr-namespace:Semi.Avalonia.Demo.ViewModels"
|
xmlns:vm="clr-namespace:Semi.Avalonia.Demo.ViewModels"
|
||||||
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
|
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
|
||||||
x:Class="Semi.Avalonia.Demo.Pages.TabStripDemo"
|
x:Class="Semi.Avalonia.Demo.Pages.TabStripDemo"
|
||||||
x:CompileBindings="True"
|
|
||||||
x:DataType="vm:TabStripDemoViewModel">
|
x:DataType="vm:TabStripDemoViewModel">
|
||||||
<Design.DataContext>
|
<Design.DataContext>
|
||||||
<vm:TabStripDemoViewModel />
|
<vm:TabStripDemoViewModel />
|
||||||
|
|||||||
80
demo/Semi.Avalonia.Demo/Pages/TabbedPageDemo.axaml
Normal file
80
demo/Semi.Avalonia.Demo/Pages/TabbedPageDemo.axaml
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
<UserControl
|
||||||
|
x:Class="Semi.Avalonia.Demo.Pages.TabbedPageDemo"
|
||||||
|
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="600"
|
||||||
|
d:DesignWidth="800"
|
||||||
|
mc:Ignorable="d">
|
||||||
|
<DockPanel>
|
||||||
|
<ScrollViewer DockPanel.Dock="Right" Width="260">
|
||||||
|
<StackPanel Margin="12" Spacing="8">
|
||||||
|
<TextBlock Text="Configuration" FontWeight="SemiBold" FontSize="16"
|
||||||
|
Foreground="{DynamicResource SemiColorText0}" />
|
||||||
|
|
||||||
|
<TextBlock Text="Tab Management" FontWeight="SemiBold" FontSize="13" />
|
||||||
|
<StackPanel Spacing="6">
|
||||||
|
<Button Content="Add Tab" Click="OnAddTab" HorizontalAlignment="Stretch" />
|
||||||
|
<Button Content="Remove Latest Tab" Click="OnRemoveTab" HorizontalAlignment="Stretch" />
|
||||||
|
</StackPanel>
|
||||||
|
|
||||||
|
<Separator />
|
||||||
|
|
||||||
|
<TextBlock Text="Tab Placement" FontWeight="SemiBold" FontSize="13" />
|
||||||
|
<ComboBox Name="PlacementCombo" SelectedIndex="0"
|
||||||
|
SelectionChanged="OnPlacementChanged" HorizontalAlignment="Stretch">
|
||||||
|
<ComboBoxItem Content="Top" />
|
||||||
|
<ComboBoxItem Content="Bottom" />
|
||||||
|
<ComboBoxItem Content="Left" />
|
||||||
|
<ComboBoxItem Content="Right" />
|
||||||
|
</ComboBox>
|
||||||
|
|
||||||
|
<Separator />
|
||||||
|
|
||||||
|
<TextBlock Text="Status" FontWeight="SemiBold" FontSize="14" />
|
||||||
|
<TextBlock Name="StatusText"
|
||||||
|
Text="3 tabs | Selected: Home (0)"
|
||||||
|
Opacity="0.7"
|
||||||
|
TextWrapping="Wrap" />
|
||||||
|
</StackPanel>
|
||||||
|
</ScrollViewer>
|
||||||
|
|
||||||
|
<Border DockPanel.Dock="Right" Width="1" Background="{DynamicResource SemiColorBackground0}" />
|
||||||
|
|
||||||
|
<Border Margin="12"
|
||||||
|
BorderBrush="{DynamicResource SemiColorBorder}"
|
||||||
|
BorderThickness="1"
|
||||||
|
CornerRadius="6"
|
||||||
|
ClipToBounds="True">
|
||||||
|
<TabbedPage Name="DemoTabs"
|
||||||
|
TabPlacement="Top"
|
||||||
|
SelectionChanged="OnSelectionChanged">
|
||||||
|
<ContentPage Header="Home">
|
||||||
|
<StackPanel Margin="16" Spacing="8">
|
||||||
|
<TextBlock Text="Home Tab" FontSize="24" FontWeight="Bold" />
|
||||||
|
<TextBlock Text="Welcome to the Home tab. This is a TabbedPage sample."
|
||||||
|
TextWrapping="Wrap" />
|
||||||
|
<TextBlock Text="Use the panel on the right to add or remove tabs dynamically."
|
||||||
|
TextWrapping="Wrap" Opacity="0.7" />
|
||||||
|
</StackPanel>
|
||||||
|
</ContentPage>
|
||||||
|
<ContentPage Header="Search">
|
||||||
|
<StackPanel Margin="16" Spacing="8">
|
||||||
|
<TextBlock Text="Search Tab" FontSize="24" FontWeight="Bold" />
|
||||||
|
<TextBox PlaceholderText="Type to search..." />
|
||||||
|
<TextBlock Text="Search results will appear here." Opacity="0.7" />
|
||||||
|
</StackPanel>
|
||||||
|
</ContentPage>
|
||||||
|
<ContentPage Header="Settings">
|
||||||
|
<StackPanel Margin="16" Spacing="8">
|
||||||
|
<TextBlock Text="Settings Tab" FontSize="24" FontWeight="Bold" />
|
||||||
|
<CheckBox Content="Enable notifications" />
|
||||||
|
<CheckBox Content="Dark mode" />
|
||||||
|
<CheckBox Content="Auto-save" IsChecked="True" />
|
||||||
|
</StackPanel>
|
||||||
|
</ContentPage>
|
||||||
|
</TabbedPage>
|
||||||
|
</Border>
|
||||||
|
</DockPanel>
|
||||||
|
</UserControl>
|
||||||
84
demo/Semi.Avalonia.Demo/Pages/TabbedPageDemo.axaml.cs
Normal file
84
demo/Semi.Avalonia.Demo/Pages/TabbedPageDemo.axaml.cs
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
using System.Collections;
|
||||||
|
using Avalonia;
|
||||||
|
using Avalonia.Controls;
|
||||||
|
using Avalonia.Interactivity;
|
||||||
|
using Avalonia.Media;
|
||||||
|
|
||||||
|
namespace Semi.Avalonia.Demo.Pages;
|
||||||
|
|
||||||
|
public partial class TabbedPageDemo : UserControl
|
||||||
|
{
|
||||||
|
private int _tabCounter = 3;
|
||||||
|
|
||||||
|
public TabbedPageDemo()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnAddTab(object? sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
var idx = ++_tabCounter;
|
||||||
|
var page = new ContentPage
|
||||||
|
{
|
||||||
|
Header = $"Tab {idx}",
|
||||||
|
Content = new StackPanel
|
||||||
|
{
|
||||||
|
Margin = new Thickness(16),
|
||||||
|
Spacing = 8,
|
||||||
|
Children =
|
||||||
|
{
|
||||||
|
new TextBlock
|
||||||
|
{
|
||||||
|
Text = $"Tab {idx}",
|
||||||
|
FontSize = 24,
|
||||||
|
FontWeight = FontWeight.Bold,
|
||||||
|
},
|
||||||
|
new TextBlock
|
||||||
|
{
|
||||||
|
Text = $"This tab was added dynamically (tab #{idx}).",
|
||||||
|
Opacity = 0.7,
|
||||||
|
TextWrapping = TextWrapping.Wrap,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
((IList)DemoTabs.Pages!).Add(page);
|
||||||
|
UpdateStatus();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnRemoveTab(object? sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
var pages = (IList)DemoTabs.Pages!;
|
||||||
|
if (pages.Count > 1)
|
||||||
|
{
|
||||||
|
pages.RemoveAt(pages.Count - 1);
|
||||||
|
UpdateStatus();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnPlacementChanged(object? sender, SelectionChangedEventArgs e)
|
||||||
|
{
|
||||||
|
if (DemoTabs == null) return;
|
||||||
|
DemoTabs.TabPlacement = PlacementCombo.SelectedIndex switch
|
||||||
|
{
|
||||||
|
1 => TabPlacement.Bottom,
|
||||||
|
2 => TabPlacement.Left,
|
||||||
|
3 => TabPlacement.Right,
|
||||||
|
_ => TabPlacement.Top
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnSelectionChanged(object? sender, PageSelectionChangedEventArgs e)
|
||||||
|
{
|
||||||
|
UpdateStatus();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void UpdateStatus()
|
||||||
|
{
|
||||||
|
if (StatusText == null) return;
|
||||||
|
var pages = (IList)DemoTabs.Pages!;
|
||||||
|
var pageName = (DemoTabs.SelectedPage as ContentPage)?.Header?.ToString() ?? "—";
|
||||||
|
StatusText.Text = $"{pages.Count} tab{(pages.Count != 1 ? "s" : "")} | Selected: {pageName} ({DemoTabs.SelectedIndex})";
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -23,35 +23,36 @@
|
|||||||
<TextBox
|
<TextBox
|
||||||
Width="100"
|
Width="100"
|
||||||
Classes="Large"
|
Classes="Large"
|
||||||
Watermark="Large" />
|
PlaceholderText="Large" />
|
||||||
<TextBox
|
<TextBox
|
||||||
Width="100"
|
Width="100"
|
||||||
Watermark="Default" />
|
PlaceholderText="Default" />
|
||||||
<TextBox
|
<TextBox
|
||||||
Width="100"
|
Width="100"
|
||||||
Classes="Small"
|
Classes="Small"
|
||||||
Watermark="Small" />
|
PlaceholderText="Small" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
<StackPanel Orientation="Horizontal">
|
<StackPanel Orientation="Horizontal">
|
||||||
<TextBox
|
<TextBox
|
||||||
Width="100"
|
Width="100"
|
||||||
IsEnabled="False"
|
IsEnabled="False"
|
||||||
Watermark="Disabled" />
|
PlaceholderText="Disabled" />
|
||||||
<TextBox
|
<TextBox
|
||||||
Width="100"
|
Width="100"
|
||||||
Classes="Bordered"
|
Classes="Bordered"
|
||||||
Watermark="Bordered" />
|
PlaceholderText="Bordered" />
|
||||||
<TextBox
|
<TextBox
|
||||||
Width="100"
|
Width="100"
|
||||||
Classes="Bordered"
|
Classes="Bordered"
|
||||||
IsEnabled="False" />
|
IsEnabled="False" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<TextBox Width="300" Classes="TextArea" Watermark="TextArea TextBox" />
|
<TextBox Width="300" Classes="TextArea" PlaceholderText="TextArea TextBox" />
|
||||||
|
<TextBox Width="300" Classes="TextArea ClearButton" Text="TextArea with ClearButton - text should be clearable" />
|
||||||
<TextBox
|
<TextBox
|
||||||
Width="300"
|
Width="300"
|
||||||
Theme="{StaticResource LooklessTextBox}"
|
Theme="{StaticResource LooklessTextBox}"
|
||||||
Watermark="Lookless TextBox"
|
PlaceholderText="Lookless TextBox"
|
||||||
InnerLeftContent="https://"
|
InnerLeftContent="https://"
|
||||||
InnerRightContent=".com" />
|
InnerRightContent=".com" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|||||||
@@ -1,98 +0,0 @@
|
|||||||
<UserControl
|
|
||||||
x:Class="Semi.Avalonia.Demo.Pages.ToggleButtonDemo"
|
|
||||||
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 Spacing="20">
|
|
||||||
<TextBlock Text="Toggle Button (Default)" />
|
|
||||||
<StackPanel Orientation="Horizontal" Spacing="20">
|
|
||||||
<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="Danger">Danger</ToggleButton>
|
|
||||||
<ToggleButton Classes="Danger" IsEnabled="False">Disabled</ToggleButton>
|
|
||||||
</StackPanel>
|
|
||||||
<TextBlock Text="Toggle Button Checked State" />
|
|
||||||
<StackPanel Orientation="Horizontal" Spacing="20">
|
|
||||||
<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>
|
|
||||||
<TextBlock Text="Toggle Button Disabled State" />
|
|
||||||
<StackPanel Background="{DynamicResource SemiColorBackground1}" Orientation="Horizontal" Spacing="20">
|
|
||||||
<ToggleButton IsThreeState="True" IsEnabled="False">Default</ToggleButton>
|
|
||||||
<ToggleButton IsThreeState="True" IsEnabled="False" IsChecked="True">Checked</ToggleButton>
|
|
||||||
<ToggleButton IsThreeState="True" IsEnabled="False" IsChecked="{x:Null}">Indeterminate</ToggleButton>
|
|
||||||
</StackPanel>
|
|
||||||
<TextBlock Text="Toggle Button Size" />
|
|
||||||
<StackPanel Orientation="Horizontal" Spacing="20">
|
|
||||||
<ToggleButton Classes="Small" IsThreeState="True">Small</ToggleButton>
|
|
||||||
<ToggleButton IsThreeState="True">Default</ToggleButton>
|
|
||||||
<ToggleButton Classes="Large" IsThreeState="True">Large</ToggleButton>
|
|
||||||
</StackPanel>
|
|
||||||
</StackPanel>
|
|
||||||
</UserControl>
|
|
||||||
@@ -1,127 +0,0 @@
|
|||||||
<UserControl xmlns="https://github.com/avaloniaui"
|
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
|
||||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
|
||||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
|
||||||
xmlns:vm="clr-namespace:Semi.Avalonia.Demo.ViewModels"
|
|
||||||
xmlns:converters="clr-namespace:Semi.Avalonia.Demo.Converters"
|
|
||||||
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
|
|
||||||
x:Class="Semi.Avalonia.Demo.Pages.TreeDataGridDemo"
|
|
||||||
x:CompileBindings="True"
|
|
||||||
x:DataType="vm:TreeDataGridDemoViewModel">
|
|
||||||
<UserControl.Resources>
|
|
||||||
<converters:FileIconConverter x:Key="FileIconConverter">
|
|
||||||
<StaticResource x:Key="file" ResourceKey="SemiIconFile" />
|
|
||||||
<StaticResource x:Key="folderOpen" ResourceKey="SemiIconFolderOpen" />
|
|
||||||
<StaticResource x:Key="folderClosed" ResourceKey="SemiIconFolder" />
|
|
||||||
</converters:FileIconConverter>
|
|
||||||
</UserControl.Resources>
|
|
||||||
<TabControl>
|
|
||||||
<TabItem Header="Songs">
|
|
||||||
<TreeDataGrid
|
|
||||||
AutoDragDropRows="True"
|
|
||||||
DataContext="{Binding SongsContext}"
|
|
||||||
Source="{Binding Songs}">
|
|
||||||
<TreeDataGrid.Resources>
|
|
||||||
<DataTemplate x:Key="AlbumCell" DataType="vm:SongViewModel">
|
|
||||||
<TextBlock
|
|
||||||
HorizontalAlignment="Stretch"
|
|
||||||
VerticalAlignment="Center"
|
|
||||||
Background="Transparent"
|
|
||||||
Text="{Binding Album}" />
|
|
||||||
</DataTemplate>
|
|
||||||
<DataTemplate x:Key="AlbumEditCell" DataType="vm:SongViewModel">
|
|
||||||
<ComboBox
|
|
||||||
VerticalAlignment="Center"
|
|
||||||
Classes="Small"
|
|
||||||
ItemsSource="{x:Static vm:Song.Albums}"
|
|
||||||
SelectedItem="{Binding Album}" />
|
|
||||||
</DataTemplate>
|
|
||||||
<DataTemplate x:Key="CommentsCell" DataType="vm:SongViewModel">
|
|
||||||
<TextBlock VerticalAlignment="Center" Text="{Binding CountOfComment}" />
|
|
||||||
</DataTemplate>
|
|
||||||
<DataTemplate x:Key="CommentsEditCell" DataType="vm:SongViewModel">
|
|
||||||
<NumericUpDown
|
|
||||||
Width="100"
|
|
||||||
HorizontalAlignment="Left"
|
|
||||||
VerticalAlignment="Center"
|
|
||||||
Classes="Small"
|
|
||||||
Value="{Binding CountOfComment}" />
|
|
||||||
</DataTemplate>
|
|
||||||
</TreeDataGrid.Resources>
|
|
||||||
<TreeDataGrid.Styles>
|
|
||||||
<Style Selector="TreeDataGrid TreeDataGridRow:nth-last-child(2n)">
|
|
||||||
<Setter Property="Background" Value="{DynamicResource SemiColorFill0}" />
|
|
||||||
</Style>
|
|
||||||
</TreeDataGrid.Styles>
|
|
||||||
</TreeDataGrid>
|
|
||||||
</TabItem>
|
|
||||||
<TabItem Header="Files">
|
|
||||||
<Grid DataContext="{Binding FilesContext}" RowDefinitions="Auto, *">
|
|
||||||
<DockPanel Margin="0,4" DockPanel.Dock="Top">
|
|
||||||
<ComboBox
|
|
||||||
DockPanel.Dock="Left"
|
|
||||||
ItemsSource="{Binding Drives}"
|
|
||||||
SelectedItem="{Binding SelectedDrive}" />
|
|
||||||
<TextBox
|
|
||||||
Margin="4,0,0,0"
|
|
||||||
VerticalContentAlignment="Center"
|
|
||||||
KeyDown="SelectedPath_KeyDown"
|
|
||||||
Text="{Binding SelectedPath, Mode=OneWay}" />
|
|
||||||
</DockPanel>
|
|
||||||
<TreeDataGrid
|
|
||||||
Name="fileViewer"
|
|
||||||
Grid.Row="1"
|
|
||||||
Source="{Binding Source}">
|
|
||||||
<TreeDataGrid.Resources>
|
|
||||||
|
|
||||||
<!-- Template for Name column cells -->
|
|
||||||
<DataTemplate x:Key="FileNameCell" DataType="vm:FileNodeViewModel">
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<PathIcon
|
|
||||||
Theme="{StaticResource InnerPathIcon}"
|
|
||||||
Margin="8,0">
|
|
||||||
<PathIcon.Data>
|
|
||||||
<MultiBinding Converter="{StaticResource FileIconConverter}">
|
|
||||||
<Binding Path="IsDirectory" />
|
|
||||||
<Binding Path="IsExpanded" />
|
|
||||||
</MultiBinding>
|
|
||||||
</PathIcon.Data>
|
|
||||||
</PathIcon>
|
|
||||||
<TextBlock VerticalAlignment="Center" Text="{Binding Name}" />
|
|
||||||
</StackPanel>
|
|
||||||
</DataTemplate>
|
|
||||||
|
|
||||||
<!-- Edit template for Name column cells -->
|
|
||||||
<DataTemplate x:Key="FileNameEditCell" DataType="vm:FileNodeViewModel">
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<Image Margin="0,0,4,0" VerticalAlignment="Center">
|
|
||||||
<Image.Source>
|
|
||||||
<MultiBinding Converter="{StaticResource FileIconConverter}">
|
|
||||||
<Binding Path="IsDirectory" />
|
|
||||||
<Binding Path="IsExpanded" />
|
|
||||||
</MultiBinding>
|
|
||||||
</Image.Source>
|
|
||||||
</Image>
|
|
||||||
<TextBox
|
|
||||||
VerticalAlignment="Center"
|
|
||||||
Classes="Small"
|
|
||||||
Text="{Binding Name}">
|
|
||||||
<TextBox.Styles>
|
|
||||||
<Style Selector="DataValidationErrors">
|
|
||||||
<Setter Property="Theme" Value="{DynamicResource TooltipDataValidationErrors}" />
|
|
||||||
</Style>
|
|
||||||
</TextBox.Styles>
|
|
||||||
</TextBox>
|
|
||||||
</StackPanel>
|
|
||||||
</DataTemplate>
|
|
||||||
</TreeDataGrid.Resources>
|
|
||||||
<TreeDataGrid.Styles>
|
|
||||||
<Style Selector="TreeDataGrid TreeDataGridRow:nth-child(2n)">
|
|
||||||
<Setter Property="Background" Value="{DynamicResource SemiColorFill0}" />
|
|
||||||
</Style>
|
|
||||||
</TreeDataGrid.Styles>
|
|
||||||
</TreeDataGrid>
|
|
||||||
</Grid>
|
|
||||||
</TabItem>
|
|
||||||
</TabControl>
|
|
||||||
</UserControl>
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
using Avalonia.Controls;
|
|
||||||
using Avalonia.Input;
|
|
||||||
using Semi.Avalonia.Demo.ViewModels;
|
|
||||||
|
|
||||||
namespace Semi.Avalonia.Demo.Pages;
|
|
||||||
|
|
||||||
public partial class TreeDataGridDemo : UserControl
|
|
||||||
{
|
|
||||||
public TreeDataGridDemo()
|
|
||||||
{
|
|
||||||
InitializeComponent();
|
|
||||||
this.DataContext = new TreeDataGridDemoViewModel();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void SelectedPath_KeyDown(object? sender, KeyEventArgs e)
|
|
||||||
{
|
|
||||||
if (e.Key == Key.Enter)
|
|
||||||
{
|
|
||||||
var vm = DataContext as TreeDataGridDemoViewModel;
|
|
||||||
vm.FilesContext.SelectedPath = (sender as TextBox)!.Text;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -8,7 +8,6 @@
|
|||||||
xmlns:vm="clr-namespace:Semi.Avalonia.Demo.Pages"
|
xmlns:vm="clr-namespace:Semi.Avalonia.Demo.Pages"
|
||||||
d:DesignHeight="450"
|
d:DesignHeight="450"
|
||||||
d:DesignWidth="800"
|
d:DesignWidth="800"
|
||||||
x:CompileBindings="True"
|
|
||||||
x:DataType="vm:TreeViewVm"
|
x:DataType="vm:TreeViewVm"
|
||||||
mc:Ignorable="d">
|
mc:Ignorable="d">
|
||||||
|
|
||||||
|
|||||||
@@ -21,33 +21,40 @@ public class TreeViewVm : ObservableObject
|
|||||||
|
|
||||||
public TreeViewVm()
|
public TreeViewVm()
|
||||||
{
|
{
|
||||||
Items = new ObservableCollection<TreeViewItemVm>()
|
Items =
|
||||||
{
|
[
|
||||||
new TreeViewItemVm() { Name = "Item 1", Id = "1" },
|
new TreeViewItemVm { Name = "Item 1", Id = "1" },
|
||||||
new TreeViewItemVm() { Name = "Item 2", Id = "2" },
|
new TreeViewItemVm { Name = "Item 2", Id = "2" },
|
||||||
new TreeViewItemVm()
|
new TreeViewItemVm
|
||||||
{
|
{
|
||||||
Name = "Item 3", Id = "3", Items = new ObservableCollection<TreeViewItemVm>()
|
Name = "Item 3", Id = "3", Items =
|
||||||
{
|
[
|
||||||
new TreeViewItemVm() { Name = "Item 3.1", Id = "3.1" },
|
new TreeViewItemVm { Name = "Item 3.1", Id = "3.1" },
|
||||||
new TreeViewItemVm() { Name = "Item 3.2", Id = "3.2" },
|
new TreeViewItemVm { Name = "Item 3.2", Id = "3.2" },
|
||||||
new TreeViewItemVm() { Name = "Item 3.3", Id = "3.3" },
|
new TreeViewItemVm { Name = "Item 3.3", Id = "3.3" }
|
||||||
},
|
],
|
||||||
},
|
}
|
||||||
};
|
|
||||||
|
|
||||||
MultipleLevelItems = new();
|
];
|
||||||
for (int i = 1; i < 6; i++)
|
|
||||||
|
MultipleLevelItems = [];
|
||||||
|
for (var i = 1; i < 6; i++)
|
||||||
{
|
{
|
||||||
FirstItem firstItem = new FirstItem { Id = i, Name = $"FirstItem {i}" };
|
var firstItem = new FirstItem
|
||||||
firstItem.SecondItems = new();
|
|
||||||
for (int j = 1; j < 6; j++)
|
|
||||||
{
|
{
|
||||||
SecondItem secondItem = new SecondItem { Id = j, Name = $"SecondItem {j}" };
|
Id = i, Name = $"FirstItem {i}",
|
||||||
secondItem.ThirdItemItems = new();
|
SecondItems = []
|
||||||
for (int k = 1; k < 6; k++)
|
};
|
||||||
|
for (var j = 1; j < 6; j++)
|
||||||
|
{
|
||||||
|
var secondItem = new SecondItem
|
||||||
{
|
{
|
||||||
ThirdItem thirdItem = new ThirdItem { Id = k, Name = $"ThirdItem {k}" };
|
Id = j, Name = $"SecondItem {j}",
|
||||||
|
ThirdItemItems = []
|
||||||
|
};
|
||||||
|
for (var k = 1; k < 6; k++)
|
||||||
|
{
|
||||||
|
var thirdItem = new ThirdItem { Id = k, Name = $"ThirdItem {k}" };
|
||||||
secondItem.ThirdItemItems.Add(thirdItem);
|
secondItem.ThirdItemItems.Add(thirdItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -61,9 +68,9 @@ public class TreeViewVm : ObservableObject
|
|||||||
|
|
||||||
public partial class TreeViewItemVm : ObservableObject
|
public partial class TreeViewItemVm : ObservableObject
|
||||||
{
|
{
|
||||||
public ObservableCollection<TreeViewItemVm> Items { get; set; }
|
public ObservableCollection<TreeViewItemVm> Items { get; set; } = [];
|
||||||
public string Name { get; set; }
|
public string? Name { get; set; }
|
||||||
public string Id { get; set; }
|
public string? Id { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ItemBase
|
public class ItemBase
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<UserControl xmlns="https://github.com/avaloniaui"
|
<UserControl xmlns="https://github.com/avaloniaui"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
@@ -6,89 +6,98 @@
|
|||||||
xmlns:pages="clr-namespace:Semi.Avalonia.Demo.Pages"
|
xmlns:pages="clr-namespace:Semi.Avalonia.Demo.Pages"
|
||||||
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
|
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
|
||||||
x:Class="Semi.Avalonia.Demo.Pages.VariablesDemo"
|
x:Class="Semi.Avalonia.Demo.Pages.VariablesDemo"
|
||||||
x:DataType="vm:VariablesDemoViewModel"
|
x:DataType="vm:VariablesDemoViewModel">
|
||||||
x:CompileBindings="True">
|
|
||||||
<Design.DataContext>
|
<Design.DataContext>
|
||||||
<vm:VariablesDemoViewModel />
|
<vm:VariablesDemoViewModel />
|
||||||
</Design.DataContext>
|
</Design.DataContext>
|
||||||
<DataGrid
|
<Grid RowDefinitions="Auto, *">
|
||||||
Margin="8"
|
<TextBox
|
||||||
CanUserReorderColumns="True"
|
Grid.Row="0"
|
||||||
CanUserResizeColumns="True"
|
Width="600"
|
||||||
CanUserSortColumns="True"
|
Margin="8"
|
||||||
HeadersVisibility="All"
|
Classes="ClearButton"
|
||||||
IsReadOnly="True"
|
Text="{Binding SearchText}"
|
||||||
ItemsSource="{Binding GridData}">
|
PlaceholderText="Input Variable Category/ResourceKey/Type/Value/Description" />
|
||||||
<DataGrid.Columns>
|
|
||||||
<DataGridTemplateColumn
|
<DataGrid
|
||||||
Width="300"
|
Grid.Row="1"
|
||||||
x:DataType="vm:VariableItem"
|
Margin="8"
|
||||||
Header="ResourceKey">
|
CanUserReorderColumns="True"
|
||||||
<DataGridTemplateColumn.CellTemplate>
|
CanUserResizeColumns="True"
|
||||||
<DataTemplate DataType="vm:VariableItem">
|
CanUserSortColumns="True"
|
||||||
<SelectableTextBlock
|
HeadersVisibility="All"
|
||||||
Margin="12,0"
|
IsReadOnly="True"
|
||||||
VerticalAlignment="Center"
|
ItemsSource="{Binding GridData}">
|
||||||
Text="{Binding ResourceKey}" />
|
<DataGrid.Columns>
|
||||||
</DataTemplate>
|
<DataGridTemplateColumn
|
||||||
</DataGridTemplateColumn.CellTemplate>
|
Width="300"
|
||||||
</DataGridTemplateColumn>
|
x:DataType="vm:VariableItem"
|
||||||
<DataGridTemplateColumn
|
Header="ResourceKey">
|
||||||
Width="200"
|
<DataGridTemplateColumn.CellTemplate>
|
||||||
x:DataType="vm:VariableItem"
|
<DataTemplate DataType="vm:VariableItem">
|
||||||
Header="Type">
|
<SelectableTextBlock
|
||||||
<DataGridTemplateColumn.CellTemplate>
|
Margin="12,0"
|
||||||
<DataTemplate DataType="vm:VariableItem">
|
VerticalAlignment="Center"
|
||||||
<SelectableTextBlock
|
Text="{Binding ResourceKey}" />
|
||||||
Margin="12,0"
|
</DataTemplate>
|
||||||
VerticalAlignment="Center"
|
</DataGridTemplateColumn.CellTemplate>
|
||||||
Text="{Binding Type.Name}" />
|
</DataGridTemplateColumn>
|
||||||
</DataTemplate>
|
<DataGridTemplateColumn
|
||||||
</DataGridTemplateColumn.CellTemplate>
|
Width="200"
|
||||||
</DataGridTemplateColumn>
|
x:DataType="vm:VariableItem"
|
||||||
<DataGridTemplateColumn
|
Header="Type">
|
||||||
Width="200"
|
<DataGridTemplateColumn.CellTemplate>
|
||||||
x:DataType="vm:VariableItem"
|
<DataTemplate DataType="vm:VariableItem">
|
||||||
Header="Value">
|
<SelectableTextBlock
|
||||||
<DataGridTemplateColumn.CellTemplate>
|
Margin="12,0"
|
||||||
<DataTemplate DataType="vm:VariableItem">
|
VerticalAlignment="Center"
|
||||||
<SelectableTextBlock
|
Text="{Binding Type.Name}" />
|
||||||
Margin="12,0"
|
</DataTemplate>
|
||||||
VerticalAlignment="Center"
|
</DataGridTemplateColumn.CellTemplate>
|
||||||
Text="{Binding Value}"
|
</DataGridTemplateColumn>
|
||||||
TextWrapping="Wrap" />
|
<DataGridTemplateColumn
|
||||||
</DataTemplate>
|
Width="200"
|
||||||
</DataGridTemplateColumn.CellTemplate>
|
x:DataType="vm:VariableItem"
|
||||||
</DataGridTemplateColumn>
|
Header="Value">
|
||||||
<DataGridTemplateColumn
|
<DataGridTemplateColumn.CellTemplate>
|
||||||
Width="*"
|
<DataTemplate DataType="vm:VariableItem">
|
||||||
x:DataType="vm:VariableItem"
|
<SelectableTextBlock
|
||||||
Header="Description">
|
Margin="12,0"
|
||||||
<DataGridTemplateColumn.CellTemplate>
|
VerticalAlignment="Center"
|
||||||
<DataTemplate DataType="vm:VariableItem">
|
Text="{Binding Value}"
|
||||||
<SelectableTextBlock
|
TextWrapping="Wrap" />
|
||||||
Margin="12,0"
|
</DataTemplate>
|
||||||
VerticalAlignment="Center"
|
</DataGridTemplateColumn.CellTemplate>
|
||||||
Text="{Binding Description}"
|
</DataGridTemplateColumn>
|
||||||
TextWrapping="Wrap" />
|
<DataGridTemplateColumn
|
||||||
</DataTemplate>
|
Width="*"
|
||||||
</DataGridTemplateColumn.CellTemplate>
|
x:DataType="vm:VariableItem"
|
||||||
</DataGridTemplateColumn>
|
Header="Description">
|
||||||
<DataGridTemplateColumn
|
<DataGridTemplateColumn.CellTemplate>
|
||||||
Width="100"
|
<DataTemplate DataType="vm:VariableItem">
|
||||||
x:DataType="vm:VariableItem"
|
<SelectableTextBlock
|
||||||
Header="CopyText"
|
Margin="12,0"
|
||||||
SortMemberPath="Duration">
|
VerticalAlignment="Center"
|
||||||
<DataGridTemplateColumn.CellTemplate>
|
Text="{Binding Description}"
|
||||||
<DataTemplate DataType="vm:VariableItem">
|
TextWrapping="Wrap" />
|
||||||
<Button
|
</DataTemplate>
|
||||||
Command="{Binding $parent[pages:VariablesDemo].Copy}"
|
</DataGridTemplateColumn.CellTemplate>
|
||||||
CommandParameter="{Binding CopyText}"
|
</DataGridTemplateColumn>
|
||||||
Theme="{DynamicResource IconBorderlessButton}"
|
<DataGridTemplateColumn
|
||||||
Content="{StaticResource SemiIconCopy}" />
|
Width="100"
|
||||||
</DataTemplate>
|
x:DataType="vm:VariableItem"
|
||||||
</DataGridTemplateColumn.CellTemplate>
|
Header="CopyText">
|
||||||
</DataGridTemplateColumn>
|
<DataGridTemplateColumn.CellTemplate>
|
||||||
</DataGrid.Columns>
|
<DataTemplate DataType="vm:VariableItem">
|
||||||
</DataGrid>
|
<Button
|
||||||
|
Command="{Binding $parent[pages:VariablesDemo].Copy}"
|
||||||
|
CommandParameter="{Binding CopyText}"
|
||||||
|
Theme="{DynamicResource IconBorderlessButton}"
|
||||||
|
Content="{StaticResource SemiIconCopy}" />
|
||||||
|
</DataTemplate>
|
||||||
|
</DataGridTemplateColumn.CellTemplate>
|
||||||
|
</DataGridTemplateColumn>
|
||||||
|
</DataGrid.Columns>
|
||||||
|
</DataGrid>
|
||||||
|
</Grid>
|
||||||
</UserControl>
|
</UserControl>
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
|
using Avalonia.Input.Platform;
|
||||||
using Semi.Avalonia.Demo.ViewModels;
|
using Semi.Avalonia.Demo.ViewModels;
|
||||||
|
|
||||||
namespace Semi.Avalonia.Demo.Pages;
|
namespace Semi.Avalonia.Demo.Pages;
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
<TargetFramework>net8.0</TargetFramework>
|
<TargetFramework>net8.0</TargetFramework>
|
||||||
<Nullable>enable</Nullable>
|
<Nullable>enable</Nullable>
|
||||||
<LangVersion>latest</LangVersion>
|
<LangVersion>latest</LangVersion>
|
||||||
|
<AvaloniaUseCompiledBindingsByDefault>true</AvaloniaUseCompiledBindingsByDefault>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
@@ -10,22 +11,21 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Avalonia" Version="$(AvaloniaVersion)"/>
|
<PackageReference Include="Avalonia"/>
|
||||||
<PackageReference Include="Avalonia.Controls.ColorPicker" Version="$(AvaloniaVersion)"/>
|
<PackageReference Include="Avalonia.Controls.ColorPicker"/>
|
||||||
<PackageReference Include="Avalonia.Controls.DataGrid" Version="$(DataGridVersion)"/>
|
<PackageReference Include="Avalonia.Controls.DataGrid"/>
|
||||||
<!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->
|
<!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->
|
||||||
<PackageReference Include="Avalonia.Diagnostics" Version="$(AvaloniaVersion)">
|
<PackageReference Include="AvaloniaUI.DiagnosticsSupport">
|
||||||
<IncludeAssets Condition="'$(Configuration)' != 'Debug'">None</IncludeAssets>
|
<IncludeAssets Condition="'$(Configuration)' != 'Debug'">None</IncludeAssets>
|
||||||
<PrivateAssets Condition="'$(Configuration)' != 'Debug'">All</PrivateAssets>
|
<PrivateAssets Condition="'$(Configuration)' != 'Debug'">All</PrivateAssets>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
<PackageReference Include="CommunityToolkit.Mvvm" Version="$(CommunityToolkitVersion)"/>
|
<PackageReference Include="CommunityToolkit.Mvvm"/>
|
||||||
<PackageReference Include="Irihi.Avalonia.Shared" Version="0.3.0" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\..\src\Semi.Avalonia\Semi.Avalonia.csproj"/>
|
<ProjectReference Include="..\..\src\Semi.Avalonia\Semi.Avalonia.csproj"/>
|
||||||
<ProjectReference Include="..\..\src\Semi.Avalonia.ColorPicker\Semi.Avalonia.ColorPicker.csproj"/>
|
<ProjectReference Include="..\..\src\Semi.Avalonia.ColorPicker\Semi.Avalonia.ColorPicker.csproj"/>
|
||||||
<ProjectReference Include="..\..\src\Semi.Avalonia.DataGrid\Semi.Avalonia.DataGrid.csproj"/>
|
<ProjectReference Include="..\..\src\Semi.Avalonia.DataGrid\Semi.Avalonia.DataGrid.csproj"/>
|
||||||
<ProjectReference Include="..\..\src\Semi.Avalonia.TreeDataGrid\Semi.Avalonia.TreeDataGrid.csproj"/>
|
<!-- <ProjectReference Include="..\..\src\Semi.Avalonia.TreeDataGrid\Semi.Avalonia.TreeDataGrid.csproj"/>-->
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
<ResourceDictionary
|
<ResourceDictionary
|
||||||
xmlns="https://github.com/avaloniaui"
|
xmlns="https://github.com/avaloniaui"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
xmlns:controls="clr-namespace:Semi.Avalonia.Demo.Controls"
|
xmlns:controls="clr-namespace:Semi.Avalonia.Demo.Controls">
|
||||||
x:CompileBindings="True">
|
|
||||||
<ControlTheme x:Key="{x:Type controls:ColorDetailControl}" TargetType="controls:ColorDetailControl">
|
<ControlTheme x:Key="{x:Type controls:ColorDetailControl}" TargetType="controls:ColorDetailControl">
|
||||||
<Setter Property="Template">
|
<Setter Property="Template">
|
||||||
<ControlTemplate TargetType="controls:ColorDetailControl">
|
<ControlTemplate TargetType="controls:ColorDetailControl">
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
<ResourceDictionary
|
<ResourceDictionary
|
||||||
xmlns="https://github.com/avaloniaui"
|
xmlns="https://github.com/avaloniaui"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
xmlns:controls="using:Semi.Avalonia.Demo.Controls"
|
xmlns:controls="using:Semi.Avalonia.Demo.Controls">
|
||||||
x:CompileBindings="True">
|
|
||||||
<Design.PreviewWith>
|
<Design.PreviewWith>
|
||||||
<controls:ColorItemControl />
|
<controls:ColorItemControl />
|
||||||
</Design.PreviewWith>
|
</Design.PreviewWith>
|
||||||
|
|||||||
@@ -4,7 +4,6 @@
|
|||||||
xmlns:controls="clr-namespace:Semi.Avalonia.Demo.Controls"
|
xmlns:controls="clr-namespace:Semi.Avalonia.Demo.Controls"
|
||||||
xmlns:viewModels="clr-namespace:Semi.Avalonia.Demo.ViewModels"
|
xmlns:viewModels="clr-namespace:Semi.Avalonia.Demo.ViewModels"
|
||||||
xmlns:pages="clr-namespace:Semi.Avalonia.Demo.Pages"
|
xmlns:pages="clr-namespace:Semi.Avalonia.Demo.Pages"
|
||||||
x:CompileBindings="True"
|
|
||||||
x:DataType="viewModels:FunctionalColorGroupViewModel">
|
x:DataType="viewModels:FunctionalColorGroupViewModel">
|
||||||
<ControlTheme x:Key="{x:Type controls:FunctionalColorGroupControl}" TargetType="controls:FunctionalColorGroupControl">
|
<ControlTheme x:Key="{x:Type controls:FunctionalColorGroupControl}" TargetType="controls:FunctionalColorGroupControl">
|
||||||
<Setter Property="Template">
|
<Setter Property="Template">
|
||||||
|
|||||||
@@ -4,7 +4,6 @@
|
|||||||
xmlns:controls="clr-namespace:Semi.Avalonia.Demo.Controls"
|
xmlns:controls="clr-namespace:Semi.Avalonia.Demo.Controls"
|
||||||
xmlns:viewModels="clr-namespace:Semi.Avalonia.Demo.ViewModels"
|
xmlns:viewModels="clr-namespace:Semi.Avalonia.Demo.ViewModels"
|
||||||
xmlns:pages="clr-namespace:Semi.Avalonia.Demo.Pages"
|
xmlns:pages="clr-namespace:Semi.Avalonia.Demo.Pages"
|
||||||
x:CompileBindings="True"
|
|
||||||
x:DataType="viewModels:ShadowGroupViewModel">
|
x:DataType="viewModels:ShadowGroupViewModel">
|
||||||
<ControlTheme x:Key="{x:Type controls:ShadowGroupControl}" TargetType="controls:ShadowGroupControl">
|
<ControlTheme x:Key="{x:Type controls:ShadowGroupControl}" TargetType="controls:ShadowGroupControl">
|
||||||
<Setter Property="Template">
|
<Setter Property="Template">
|
||||||
|
|||||||
@@ -1,12 +1,37 @@
|
|||||||
using Avalonia;
|
using Avalonia;
|
||||||
|
using Avalonia.Controls;
|
||||||
using Avalonia.Controls.ApplicationLifetimes;
|
using Avalonia.Controls.ApplicationLifetimes;
|
||||||
using CommunityToolkit.Mvvm.ComponentModel;
|
using CommunityToolkit.Mvvm.ComponentModel;
|
||||||
using CommunityToolkit.Mvvm.Input;
|
using CommunityToolkit.Mvvm.Input;
|
||||||
|
using CommunityToolkit.Mvvm.Messaging;
|
||||||
|
|
||||||
namespace Semi.Avalonia.Demo.ViewModels;
|
namespace Semi.Avalonia.Demo.ViewModels;
|
||||||
|
|
||||||
public partial class ApplicationViewModel : ObservableObject
|
public partial class ApplicationViewModel : ObservableObject
|
||||||
{
|
{
|
||||||
|
[RelayCommand]
|
||||||
|
private void Activate()
|
||||||
|
{
|
||||||
|
if (Application.Current?.ApplicationLifetime is not IClassicDesktopStyleApplicationLifetime desktop) return;
|
||||||
|
var mainWindow = desktop.MainWindow;
|
||||||
|
if (mainWindow is not null && !mainWindow.IsActive)
|
||||||
|
{
|
||||||
|
if (mainWindow.WindowState is WindowState.Minimized)
|
||||||
|
{
|
||||||
|
mainWindow.WindowState = WindowState.Normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
mainWindow.Activate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[RelayCommand]
|
||||||
|
private void JumpTo(string header)
|
||||||
|
{
|
||||||
|
Activate();
|
||||||
|
WeakReferenceMessenger.Default.Send(header, "JumpTo");
|
||||||
|
}
|
||||||
|
|
||||||
[RelayCommand]
|
[RelayCommand]
|
||||||
private void Exit()
|
private void Exit()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using System.Collections.Generic;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.Collections.ObjectModel;
|
using System.Collections.ObjectModel;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
@@ -9,20 +10,21 @@ namespace Semi.Avalonia.Demo.ViewModels;
|
|||||||
|
|
||||||
public partial class IconDemoViewModel : ObservableObject
|
public partial class IconDemoViewModel : ObservableObject
|
||||||
{
|
{
|
||||||
private readonly IResourceDictionary? _resources = new Icons();
|
private readonly Icons _resources = new();
|
||||||
|
|
||||||
private readonly Dictionary<string, IconItem> _filledIcons = new();
|
private readonly Dictionary<string, IconItem> _fillIcons = new();
|
||||||
private readonly Dictionary<string, IconItem> _strokedIcons = new();
|
private readonly Dictionary<string, IconItem> _strokedIcons = new();
|
||||||
|
private readonly Dictionary<string, IconItem> _aiIcons = new();
|
||||||
|
|
||||||
[ObservableProperty] private string? _searchText;
|
[ObservableProperty] private string? _searchText;
|
||||||
|
|
||||||
public ObservableCollection<IconItem> FilteredFilledIcons { get; set; } = [];
|
public ObservableCollection<IconTab> IconTabs { get; } = [];
|
||||||
|
public ObservableCollection<IconItem> FilteredFillIcons { get; set; } = [];
|
||||||
public ObservableCollection<IconItem> FilteredStrokedIcons { get; set; } = [];
|
public ObservableCollection<IconItem> FilteredStrokedIcons { get; set; } = [];
|
||||||
|
public ObservableCollection<IconItem> FilteredAIIcons { get; set; } = [];
|
||||||
|
|
||||||
public void InitializeResources()
|
public void InitializeResources()
|
||||||
{
|
{
|
||||||
if (_resources is null) return;
|
|
||||||
|
|
||||||
foreach (var provider in _resources.MergedDictionaries)
|
foreach (var provider in _resources.MergedDictionaries)
|
||||||
{
|
{
|
||||||
if (provider is not ResourceDictionary dic) continue;
|
if (provider is not ResourceDictionary dic) continue;
|
||||||
@@ -30,40 +32,60 @@ public partial class IconDemoViewModel : ObservableObject
|
|||||||
foreach (var key in dic.Keys)
|
foreach (var key in dic.Keys)
|
||||||
{
|
{
|
||||||
if (dic[key] is not Geometry geometry) continue;
|
if (dic[key] is not Geometry geometry) continue;
|
||||||
|
var resourceKey = key.ToString() ?? string.Empty;
|
||||||
var icon = new IconItem
|
var icon = new IconItem
|
||||||
{
|
{
|
||||||
ResourceKey = key.ToString(),
|
ResourceKey = resourceKey,
|
||||||
Geometry = geometry
|
Geometry = geometry
|
||||||
};
|
};
|
||||||
|
|
||||||
if (key.ToString().EndsWith("Stroked"))
|
if (resourceKey.StartsWith("SemiIconAI"))
|
||||||
_strokedIcons[key.ToString().ToLowerInvariant()] = icon;
|
_aiIcons[resourceKey] = icon;
|
||||||
|
else if (resourceKey.EndsWith("Stroked", StringComparison.InvariantCultureIgnoreCase))
|
||||||
|
_strokedIcons[resourceKey] = icon;
|
||||||
else
|
else
|
||||||
_filledIcons[key.ToString().ToLowerInvariant()] = icon;
|
_fillIcons[resourceKey] = icon;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
OnSearchTextChanged(string.Empty);
|
OnSearchTextChanged(string.Empty);
|
||||||
|
|
||||||
|
IconTabs.Clear();
|
||||||
|
IconTabs.Add(new IconTab("Fill Icons", FilteredFillIcons));
|
||||||
|
IconTabs.Add(new IconTab("Stroked Icons", FilteredStrokedIcons));
|
||||||
|
IconTabs.Add(new IconTab("AI Icons", FilteredAIIcons));
|
||||||
}
|
}
|
||||||
|
|
||||||
partial void OnSearchTextChanged(string? value)
|
partial void OnSearchTextChanged(string? value)
|
||||||
{
|
{
|
||||||
var search = value?.ToLowerInvariant() ?? string.Empty;
|
var search = string.IsNullOrWhiteSpace(value) ? string.Empty : value.Trim();
|
||||||
|
|
||||||
FilteredFilledIcons.Clear();
|
FilteredFillIcons.Clear();
|
||||||
foreach (var pair in _filledIcons.Where(i => i.Key.Contains(search)))
|
foreach (var pair in _fillIcons.Where(kv => kv.Key.Contains(search, StringComparison.InvariantCultureIgnoreCase)))
|
||||||
{
|
{
|
||||||
FilteredFilledIcons.Add(pair.Value);
|
FilteredFillIcons.Add(pair.Value);
|
||||||
}
|
}
|
||||||
|
|
||||||
FilteredStrokedIcons.Clear();
|
FilteredStrokedIcons.Clear();
|
||||||
foreach (var pair in _strokedIcons.Where(i => i.Key.Contains(search)))
|
foreach (var pair in _strokedIcons.Where(kv => kv.Key.Contains(search, StringComparison.InvariantCultureIgnoreCase)))
|
||||||
{
|
{
|
||||||
FilteredStrokedIcons.Add(pair.Value);
|
FilteredStrokedIcons.Add(pair.Value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FilteredAIIcons.Clear();
|
||||||
|
foreach (var pair in _aiIcons.Where(kv => kv.Key.Contains(search, StringComparison.InvariantCultureIgnoreCase)))
|
||||||
|
{
|
||||||
|
FilteredAIIcons.Add(pair.Value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class IconTab(string header, ObservableCollection<IconItem> iconItems)
|
||||||
|
{
|
||||||
|
public string Header { get; set; } = header;
|
||||||
|
public ObservableCollection<IconItem> IconItems { get; set; } = iconItems;
|
||||||
|
}
|
||||||
|
|
||||||
public class IconItem
|
public class IconItem
|
||||||
{
|
{
|
||||||
public string? ResourceKey { get; set; }
|
public string? ResourceKey { get; set; }
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ public partial class PaletteDemoViewModel : ObservableObject
|
|||||||
"Red", "Pink", "Purple", "Violet", "Indigo",
|
"Red", "Pink", "Purple", "Violet", "Indigo",
|
||||||
"Blue", "LightBlue", "Cyan", "Teal", "Green",
|
"Blue", "LightBlue", "Cyan", "Teal", "Green",
|
||||||
"LightGreen", "Lime", "Yellow", "Amber", "Orange",
|
"LightGreen", "Lime", "Yellow", "Amber", "Orange",
|
||||||
"Grey"
|
"Grey", "AIPurple"
|
||||||
];
|
];
|
||||||
|
|
||||||
private readonly IResourceDictionary? _lightResourceDictionary;
|
private readonly IResourceDictionary? _lightResourceDictionary;
|
||||||
@@ -61,6 +61,38 @@ public partial class PaletteDemoViewModel : ObservableObject
|
|||||||
s.Initialize(_darkResourceDictionary, color, false);
|
s.Initialize(_darkResourceDictionary, color, false);
|
||||||
DarkLists.Add(s);
|
DarkLists.Add(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
InitializeAIGeneralGradients();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void InitializeAIGeneralGradients()
|
||||||
|
{
|
||||||
|
if (_lightResourceDictionary is null || _darkResourceDictionary is null) return;
|
||||||
|
|
||||||
|
ColorListViewModel lightGradients = new ColorListViewModel { SeriesName = "AI General" };
|
||||||
|
ColorListViewModel darkGradients = new ColorListViewModel { SeriesName = "AI General" };
|
||||||
|
|
||||||
|
for (var i = 0; i < 10; i++)
|
||||||
|
{
|
||||||
|
var key = $"SemiAIGeneral{i}";
|
||||||
|
|
||||||
|
if (_lightResourceDictionary.TryGetValue(key, out var lightValue) && lightValue is IBrush lightBrush)
|
||||||
|
{
|
||||||
|
var name = $"AI General {i}";
|
||||||
|
var item = new ColorItemViewModel(name, lightBrush, key, true, i);
|
||||||
|
lightGradients.Color.Add(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_darkResourceDictionary.TryGetValue(key, out var darkValue) && darkValue is IBrush darkBrush)
|
||||||
|
{
|
||||||
|
var name = $"AI General {i}";
|
||||||
|
var item = new ColorItemViewModel(name, darkBrush, key, false, i);
|
||||||
|
darkGradients.Color.Add(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
LightLists.Add(lightGradients);
|
||||||
|
DarkLists.Add(darkGradients);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void InitializeFunctionalColors()
|
private void InitializeFunctionalColors()
|
||||||
@@ -79,6 +111,12 @@ public partial class PaletteDemoViewModel : ObservableObject
|
|||||||
"Warning", _lightResourceDictionary, _darkResourceDictionary, ColorTokens.WarningTokens));
|
"Warning", _lightResourceDictionary, _darkResourceDictionary, ColorTokens.WarningTokens));
|
||||||
FunctionalColors.Add(new FunctionalColorGroupViewModel(
|
FunctionalColors.Add(new FunctionalColorGroupViewModel(
|
||||||
"Danger", _lightResourceDictionary, _darkResourceDictionary, ColorTokens.DangerTokens));
|
"Danger", _lightResourceDictionary, _darkResourceDictionary, ColorTokens.DangerTokens));
|
||||||
|
FunctionalColors.Add(new FunctionalColorGroupViewModel(
|
||||||
|
"AI General", _lightResourceDictionary, _darkResourceDictionary, ColorTokens.AIGeneralTokens));
|
||||||
|
FunctionalColors.Add(new FunctionalColorGroupViewModel(
|
||||||
|
"AI Purple", _lightResourceDictionary, _darkResourceDictionary, ColorTokens.AIPurpleTokens));
|
||||||
|
FunctionalColors.Add(new FunctionalColorGroupViewModel(
|
||||||
|
"AI Background", _lightResourceDictionary, _darkResourceDictionary, ColorTokens.AIBackgroundTokens));
|
||||||
FunctionalColors.Add(new FunctionalColorGroupViewModel(
|
FunctionalColors.Add(new FunctionalColorGroupViewModel(
|
||||||
"Text", _lightResourceDictionary, _darkResourceDictionary, ColorTokens.TextTokens));
|
"Text", _lightResourceDictionary, _darkResourceDictionary, ColorTokens.TextTokens));
|
||||||
FunctionalColors.Add(new FunctionalColorGroupViewModel(
|
FunctionalColors.Add(new FunctionalColorGroupViewModel(
|
||||||
@@ -142,14 +180,24 @@ public partial class ColorItemViewModel : ObservableObject
|
|||||||
<StaticResource x:Key="" ResourceKey="{ResourceKey}" />
|
<StaticResource x:Key="" ResourceKey="{ResourceKey}" />
|
||||||
""";
|
""";
|
||||||
|
|
||||||
public ColorItemViewModel(string colorDisplayName, ISolidColorBrush brush, string resourceKey, bool light,
|
public ColorItemViewModel(string colorDisplayName, IBrush brush, string resourceKey, bool light,
|
||||||
int index)
|
int index)
|
||||||
{
|
{
|
||||||
ColorDisplayName = colorDisplayName;
|
ColorDisplayName = colorDisplayName;
|
||||||
Brush = brush;
|
Brush = brush;
|
||||||
ResourceKey = resourceKey;
|
ResourceKey = resourceKey;
|
||||||
var hex = ColorConverter.ToHex.Convert(brush.Color, typeof(string), false, CultureInfo.InvariantCulture);
|
|
||||||
Hex = hex as string ?? string.Empty;
|
// Only calculate hex for solid color brushes
|
||||||
|
if (brush is ISolidColorBrush solidBrush)
|
||||||
|
{
|
||||||
|
var hex = ColorConverter.ToHex.Convert(solidBrush.Color, typeof(string), false, CultureInfo.InvariantCulture);
|
||||||
|
Hex = hex as string ?? string.Empty;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Hex = string.Empty;
|
||||||
|
}
|
||||||
|
|
||||||
if ((light && index < 5) || (!light && index >= 5))
|
if ((light && index < 5) || (!light && index >= 5))
|
||||||
{
|
{
|
||||||
TextBrush = Brushes.Black;
|
TextBrush = Brushes.Black;
|
||||||
@@ -175,7 +223,7 @@ public partial class FunctionalColorGroupViewModel : ObservableObject
|
|||||||
{
|
{
|
||||||
if (lightDictionary?.TryGetValue(key, out var lightValue) ?? false)
|
if (lightDictionary?.TryGetValue(key, out var lightValue) ?? false)
|
||||||
{
|
{
|
||||||
if (lightValue is ISolidColorBrush lightBrush)
|
if (lightValue is IBrush lightBrush)
|
||||||
{
|
{
|
||||||
LightColors.Add(new ColorItemViewModel(name, lightBrush, key, true, 0));
|
LightColors.Add(new ColorItemViewModel(name, lightBrush, key, true, 0));
|
||||||
}
|
}
|
||||||
@@ -183,7 +231,7 @@ public partial class FunctionalColorGroupViewModel : ObservableObject
|
|||||||
|
|
||||||
if (darkDictionary?.TryGetValue(key, out var darkValue) ?? false)
|
if (darkDictionary?.TryGetValue(key, out var darkValue) ?? false)
|
||||||
{
|
{
|
||||||
if (darkValue is ISolidColorBrush darkBrush)
|
if (darkValue is IBrush darkBrush)
|
||||||
{
|
{
|
||||||
DarkColors.Add(new ColorItemViewModel(name, darkBrush, key, true, 0));
|
DarkColors.Add(new ColorItemViewModel(name, darkBrush, key, true, 0));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,4 +26,12 @@ public class SplitViewDemoViewModel : ObservableObject
|
|||||||
SplitViewDisplayMode.Overlay,
|
SplitViewDisplayMode.Overlay,
|
||||||
SplitViewDisplayMode.CompactOverlay,
|
SplitViewDisplayMode.CompactOverlay,
|
||||||
];
|
];
|
||||||
|
|
||||||
|
public static ObservableCollection<SplitViewPanePlacement> Placements { get; set; } =
|
||||||
|
[
|
||||||
|
SplitViewPanePlacement.Left,
|
||||||
|
SplitViewPanePlacement.Right,
|
||||||
|
SplitViewPanePlacement.Top,
|
||||||
|
SplitViewPanePlacement.Bottom
|
||||||
|
];
|
||||||
}
|
}
|
||||||
@@ -1,364 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Collections.ObjectModel;
|
|
||||||
using System.ComponentModel;
|
|
||||||
using System.Diagnostics;
|
|
||||||
using System.IO;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Runtime.InteropServices;
|
|
||||||
using Avalonia.Controls;
|
|
||||||
using Avalonia.Controls.Models.TreeDataGrid;
|
|
||||||
using Avalonia.Controls.Selection;
|
|
||||||
using Avalonia.Threading;
|
|
||||||
using CommunityToolkit.Mvvm.ComponentModel;
|
|
||||||
|
|
||||||
namespace Semi.Avalonia.Demo.ViewModels;
|
|
||||||
|
|
||||||
public partial class FilesPageViewModel : ObservableObject
|
|
||||||
{
|
|
||||||
public IList<string> Drives { get; }
|
|
||||||
public HierarchicalTreeDataGridSource<FileNodeViewModel> Source { get; }
|
|
||||||
[ObservableProperty] private string _selectedDrive;
|
|
||||||
[ObservableProperty] private string? _selectedPath;
|
|
||||||
[ObservableProperty] private FileNodeViewModel? _root;
|
|
||||||
|
|
||||||
partial void OnSelectedDriveChanged(string value)
|
|
||||||
{
|
|
||||||
Root = new FileNodeViewModel(value, true, true);
|
|
||||||
if (Source is not null)
|
|
||||||
{
|
|
||||||
Source.Items = [Root];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
partial void OnSelectedPathChanged(string? value)
|
|
||||||
{
|
|
||||||
SetSelectedPath(value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public FilesPageViewModel()
|
|
||||||
{
|
|
||||||
Drives = DriveInfo.GetDrives().Select(x => x.Name).ToList();
|
|
||||||
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
|
|
||||||
{
|
|
||||||
SelectedDrive = @"C:\";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
SelectedDrive = Drives.FirstOrDefault() ?? "/";
|
|
||||||
}
|
|
||||||
|
|
||||||
Source = new HierarchicalTreeDataGridSource<FileNodeViewModel>(Array.Empty<FileNodeViewModel>())
|
|
||||||
{
|
|
||||||
Columns =
|
|
||||||
{
|
|
||||||
new CheckBoxColumn<FileNodeViewModel>(
|
|
||||||
null,
|
|
||||||
x => x.IsChecked,
|
|
||||||
(o, v) => o.IsChecked = v,
|
|
||||||
options: new CheckBoxColumnOptions<FileNodeViewModel>
|
|
||||||
{
|
|
||||||
CanUserResizeColumn = false,
|
|
||||||
}),
|
|
||||||
new HierarchicalExpanderColumn<FileNodeViewModel>(
|
|
||||||
new TemplateColumn<FileNodeViewModel>(
|
|
||||||
"Name",
|
|
||||||
"FileNameCell",
|
|
||||||
"FileNameEditCell",
|
|
||||||
new GridLength(1, GridUnitType.Star),
|
|
||||||
new TemplateColumnOptions<FileNodeViewModel>
|
|
||||||
{
|
|
||||||
CompareAscending = FileNodeViewModel.SortAscending(vm => vm.Name),
|
|
||||||
CompareDescending = FileNodeViewModel.SortDescending(vm => vm.Name),
|
|
||||||
IsTextSearchEnabled = true,
|
|
||||||
TextSearchValueSelector = vm => vm.Name
|
|
||||||
}),
|
|
||||||
vm => vm.Children,
|
|
||||||
vm => vm.HasChildren,
|
|
||||||
vm => vm.IsExpanded),
|
|
||||||
new TextColumn<FileNodeViewModel, long?>(
|
|
||||||
"Size",
|
|
||||||
vm => vm.Size,
|
|
||||||
options: new TextColumnOptions<FileNodeViewModel>
|
|
||||||
{
|
|
||||||
CompareAscending = FileNodeViewModel.SortAscending(x => x.Size),
|
|
||||||
CompareDescending = FileNodeViewModel.SortDescending(x => x.Size),
|
|
||||||
}),
|
|
||||||
new TextColumn<FileNodeViewModel, DateTimeOffset?>(
|
|
||||||
"Modified",
|
|
||||||
x => x.Modified,
|
|
||||||
options: new TextColumnOptions<FileNodeViewModel>
|
|
||||||
{
|
|
||||||
CompareAscending = FileNodeViewModel.SortAscending(x => x.Modified),
|
|
||||||
CompareDescending = FileNodeViewModel.SortDescending(x => x.Modified),
|
|
||||||
}),
|
|
||||||
}
|
|
||||||
};
|
|
||||||
Source.RowSelection!.SingleSelect = false;
|
|
||||||
Source.RowSelection.SelectionChanged += SelectionChanged;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void SelectionChanged(object? sender, TreeSelectionModelSelectionChangedEventArgs<FileNodeViewModel> e)
|
|
||||||
{
|
|
||||||
var selectedPath = Source.RowSelection?.SelectedItem?.Path;
|
|
||||||
this.SetProperty(ref _selectedPath, selectedPath, nameof(SelectedPath));
|
|
||||||
|
|
||||||
foreach (var i in e.DeselectedItems)
|
|
||||||
Trace.WriteLine($"Deselected '{i?.Path}'");
|
|
||||||
foreach (var i in e.SelectedItems)
|
|
||||||
Trace.WriteLine($"Selected '{i?.Path}'");
|
|
||||||
}
|
|
||||||
|
|
||||||
private void SetSelectedPath(string? value)
|
|
||||||
{
|
|
||||||
if (string.IsNullOrEmpty(value))
|
|
||||||
{
|
|
||||||
Source.RowSelection!.Clear();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var path = value;
|
|
||||||
var components = new Stack<string>();
|
|
||||||
DirectoryInfo? d = null;
|
|
||||||
|
|
||||||
if (File.Exists(path))
|
|
||||||
{
|
|
||||||
var f = new FileInfo(path);
|
|
||||||
components.Push(f.Name);
|
|
||||||
d = f.Directory;
|
|
||||||
}
|
|
||||||
else if (Directory.Exists(path))
|
|
||||||
{
|
|
||||||
d = new DirectoryInfo(path);
|
|
||||||
}
|
|
||||||
|
|
||||||
while (d is not null)
|
|
||||||
{
|
|
||||||
components.Push(d.Name);
|
|
||||||
d = d.Parent;
|
|
||||||
}
|
|
||||||
|
|
||||||
var index = IndexPath.Unselected;
|
|
||||||
|
|
||||||
if (components.Count > 0)
|
|
||||||
{
|
|
||||||
var drive = components.Pop();
|
|
||||||
var driveIndex = Drives.FindIndex(x => string.Equals(x, drive, StringComparison.OrdinalIgnoreCase));
|
|
||||||
|
|
||||||
if (driveIndex >= 0)
|
|
||||||
SelectedDrive = Drives[driveIndex];
|
|
||||||
|
|
||||||
FileNodeViewModel? node = _root;
|
|
||||||
index = new IndexPath(0);
|
|
||||||
|
|
||||||
while (node is not null && components.Count > 0)
|
|
||||||
{
|
|
||||||
node.IsExpanded = true;
|
|
||||||
|
|
||||||
var component = components.Pop();
|
|
||||||
var i = node.Children.FindIndex(x => string.Equals(x.Name, component, StringComparison.OrdinalIgnoreCase));
|
|
||||||
node = i >= 0 ? node.Children[i] : null;
|
|
||||||
index = i >= 0 ? index.Append(i) : default;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Source.Items = [Root];
|
|
||||||
Source.RowSelection!.SelectedIndex = index;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public partial class FileNodeViewModel : ObservableObject, IEditableObject
|
|
||||||
{
|
|
||||||
[ObservableProperty] private string _path;
|
|
||||||
[ObservableProperty] private string _name;
|
|
||||||
private string? _undoName;
|
|
||||||
[ObservableProperty] private long? _size;
|
|
||||||
[ObservableProperty] private DateTimeOffset? _modified;
|
|
||||||
private FileSystemWatcher? _watcher;
|
|
||||||
private ObservableCollection<FileNodeViewModel>? _children;
|
|
||||||
[ObservableProperty] private bool _hasChildren = true;
|
|
||||||
[ObservableProperty] private bool _isExpanded;
|
|
||||||
|
|
||||||
public FileNodeViewModel(string path, bool isDirectory, bool isRoot = false)
|
|
||||||
{
|
|
||||||
Path = path;
|
|
||||||
Name = isRoot ? path : System.IO.Path.GetFileName(Path);
|
|
||||||
IsExpanded = isRoot;
|
|
||||||
IsDirectory = isDirectory;
|
|
||||||
HasChildren = isDirectory;
|
|
||||||
|
|
||||||
if (!isDirectory)
|
|
||||||
{
|
|
||||||
var info = new FileInfo(path);
|
|
||||||
Size = info.Length;
|
|
||||||
Modified = info.LastWriteTimeUtc;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool IsChecked { get; set; }
|
|
||||||
public bool IsDirectory { get; }
|
|
||||||
public IReadOnlyList<FileNodeViewModel> Children => _children ??= LoadChildren();
|
|
||||||
|
|
||||||
private ObservableCollection<FileNodeViewModel> LoadChildren()
|
|
||||||
{
|
|
||||||
if (!IsDirectory)
|
|
||||||
{
|
|
||||||
throw new NotSupportedException();
|
|
||||||
}
|
|
||||||
|
|
||||||
var options = new EnumerationOptions { IgnoreInaccessible = true };
|
|
||||||
var result = new ObservableCollection<FileNodeViewModel>();
|
|
||||||
|
|
||||||
foreach (var d in Directory.EnumerateDirectories(Path, "*", options))
|
|
||||||
{
|
|
||||||
result.Add(new FileNodeViewModel(d, true));
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (var f in Directory.EnumerateFiles(Path, "*", options))
|
|
||||||
{
|
|
||||||
result.Add(new FileNodeViewModel(f, false));
|
|
||||||
}
|
|
||||||
|
|
||||||
_watcher = new FileSystemWatcher
|
|
||||||
{
|
|
||||||
Path = Path,
|
|
||||||
NotifyFilter = NotifyFilters.FileName | NotifyFilters.Size | NotifyFilters.LastWrite,
|
|
||||||
};
|
|
||||||
|
|
||||||
_watcher.Changed += OnChanged;
|
|
||||||
_watcher.Created += OnCreated;
|
|
||||||
_watcher.Deleted += OnDeleted;
|
|
||||||
_watcher.Renamed += OnRenamed;
|
|
||||||
_watcher.EnableRaisingEvents = true;
|
|
||||||
|
|
||||||
if (result.Count == 0)
|
|
||||||
HasChildren = false;
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Comparison<FileNodeViewModel?> SortAscending<T>(Func<FileNodeViewModel, T> selector)
|
|
||||||
{
|
|
||||||
return (x, y) =>
|
|
||||||
{
|
|
||||||
if (x is null && y is null)
|
|
||||||
return 0;
|
|
||||||
else if (x is null)
|
|
||||||
return -1;
|
|
||||||
else if (y is null)
|
|
||||||
return 1;
|
|
||||||
if (x.IsDirectory == y.IsDirectory)
|
|
||||||
return Comparer<T>.Default.Compare(selector(x), selector(y));
|
|
||||||
else if (x.IsDirectory)
|
|
||||||
return -1;
|
|
||||||
else
|
|
||||||
return 1;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Comparison<FileNodeViewModel?> SortDescending<T>(Func<FileNodeViewModel, T> selector)
|
|
||||||
{
|
|
||||||
return (x, y) =>
|
|
||||||
{
|
|
||||||
if (x is null && y is null)
|
|
||||||
return 0;
|
|
||||||
else if (x is null)
|
|
||||||
return 1;
|
|
||||||
else if (y is null)
|
|
||||||
return -1;
|
|
||||||
if (x.IsDirectory == y.IsDirectory)
|
|
||||||
return Comparer<T>.Default.Compare(selector(y), selector(x));
|
|
||||||
else if (x.IsDirectory)
|
|
||||||
return -1;
|
|
||||||
else
|
|
||||||
return 1;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
void IEditableObject.BeginEdit() => _undoName = _name;
|
|
||||||
void IEditableObject.CancelEdit() => _name = _undoName!;
|
|
||||||
void IEditableObject.EndEdit() => _undoName = null;
|
|
||||||
|
|
||||||
private void OnChanged(object sender, FileSystemEventArgs e)
|
|
||||||
{
|
|
||||||
if (e.ChangeType == WatcherChangeTypes.Changed && File.Exists(e.FullPath))
|
|
||||||
{
|
|
||||||
Dispatcher.UIThread.Post(() =>
|
|
||||||
{
|
|
||||||
foreach (var child in _children!)
|
|
||||||
{
|
|
||||||
if (child.Path == e.FullPath)
|
|
||||||
{
|
|
||||||
if (!child.IsDirectory)
|
|
||||||
{
|
|
||||||
var info = new FileInfo(e.FullPath);
|
|
||||||
child.Size = info.Length;
|
|
||||||
child.Modified = info.LastWriteTimeUtc;
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void OnCreated(object sender, FileSystemEventArgs e)
|
|
||||||
{
|
|
||||||
Dispatcher.UIThread.Post(() =>
|
|
||||||
{
|
|
||||||
var node = new FileNodeViewModel(
|
|
||||||
e.FullPath,
|
|
||||||
File.GetAttributes(e.FullPath).HasFlag(FileAttributes.Directory));
|
|
||||||
_children!.Add(node);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private void OnDeleted(object sender, FileSystemEventArgs e)
|
|
||||||
{
|
|
||||||
Dispatcher.UIThread.Post(() =>
|
|
||||||
{
|
|
||||||
for (var i = 0; i < _children!.Count; ++i)
|
|
||||||
{
|
|
||||||
if (_children[i].Path == e.FullPath)
|
|
||||||
{
|
|
||||||
_children.RemoveAt(i);
|
|
||||||
Debug.WriteLine($"Removed {e.FullPath}");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private void OnRenamed(object sender, RenamedEventArgs e)
|
|
||||||
{
|
|
||||||
Dispatcher.UIThread.Post(() =>
|
|
||||||
{
|
|
||||||
foreach (var child in _children!)
|
|
||||||
{
|
|
||||||
if (child.Path == e.OldFullPath)
|
|
||||||
{
|
|
||||||
child.Path = e.FullPath;
|
|
||||||
child.Name = e.Name ?? string.Empty;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
internal static class ListExtensions
|
|
||||||
{
|
|
||||||
public static int FindIndex<T>(this IEnumerable<T> source, Func<T, bool> predicate)
|
|
||||||
{
|
|
||||||
int i = 0;
|
|
||||||
foreach (var item in source)
|
|
||||||
{
|
|
||||||
if (predicate(item))
|
|
||||||
return i;
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,54 +0,0 @@
|
|||||||
using System.Collections.ObjectModel;
|
|
||||||
using System.Linq;
|
|
||||||
using Avalonia.Controls;
|
|
||||||
using Avalonia.Controls.Models.TreeDataGrid;
|
|
||||||
using CommunityToolkit.Mvvm.ComponentModel;
|
|
||||||
|
|
||||||
namespace Semi.Avalonia.Demo.ViewModels;
|
|
||||||
|
|
||||||
public class SongsPageViewModel : ObservableObject
|
|
||||||
{
|
|
||||||
public FlatTreeDataGridSource<SongViewModel> Songs { get; }
|
|
||||||
|
|
||||||
public SongsPageViewModel()
|
|
||||||
{
|
|
||||||
var songs = new ObservableCollection<SongViewModel>(Song.Songs.Select(a => new SongViewModel()
|
|
||||||
{
|
|
||||||
Title = a.Title,
|
|
||||||
Artist = a.Artist,
|
|
||||||
Album = a.Album,
|
|
||||||
CountOfComment = a.CountOfComment,
|
|
||||||
IsSelected = false
|
|
||||||
}));
|
|
||||||
|
|
||||||
Songs = new FlatTreeDataGridSource<SongViewModel>(songs)
|
|
||||||
{
|
|
||||||
Columns =
|
|
||||||
{
|
|
||||||
new CheckBoxColumn<SongViewModel>(
|
|
||||||
"IsSelected",
|
|
||||||
a => a.IsSelected,
|
|
||||||
(model, b) => { model.IsSelected = b; },
|
|
||||||
new GridLength(108, GridUnitType.Pixel)),
|
|
||||||
new TextColumn<SongViewModel, string>(
|
|
||||||
"Title",
|
|
||||||
a => a.Title,
|
|
||||||
(o, a) => o.Title = a,
|
|
||||||
new GridLength(6, GridUnitType.Star)),
|
|
||||||
new TextColumn<SongViewModel, string>("Artist",
|
|
||||||
a => a.Artist,
|
|
||||||
(o, a) => o.Artist = a,
|
|
||||||
new GridLength(6, GridUnitType.Star)),
|
|
||||||
new TemplateColumn<SongViewModel>("Album",
|
|
||||||
"AlbumCell",
|
|
||||||
"AlbumEditCell",
|
|
||||||
new GridLength(6, GridUnitType.Star)),
|
|
||||||
new TemplateColumn<SongViewModel>(
|
|
||||||
"Comments",
|
|
||||||
"CommentsCell",
|
|
||||||
"CommentsEditCell",
|
|
||||||
new GridLength(6, GridUnitType.Star)),
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
using CommunityToolkit.Mvvm.ComponentModel;
|
|
||||||
|
|
||||||
namespace Semi.Avalonia.Demo.ViewModels;
|
|
||||||
|
|
||||||
public class TreeDataGridDemoViewModel : ObservableObject
|
|
||||||
{
|
|
||||||
public SongsPageViewModel SongsContext { get; } = new();
|
|
||||||
public FilesPageViewModel FilesContext { get; } = new();
|
|
||||||
}
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using Avalonia;
|
using Avalonia;
|
||||||
@@ -10,9 +10,10 @@ using Semi.Avalonia.Tokens;
|
|||||||
|
|
||||||
namespace Semi.Avalonia.Demo.ViewModels;
|
namespace Semi.Avalonia.Demo.ViewModels;
|
||||||
|
|
||||||
public class VariablesDemoViewModel : ObservableObject
|
public partial class VariablesDemoViewModel : ObservableObject
|
||||||
{
|
{
|
||||||
public DataGridCollectionView GridData { get; set; }
|
public DataGridCollectionView GridData { get; set; }
|
||||||
|
[ObservableProperty] private string _searchText = string.Empty;
|
||||||
|
|
||||||
public VariablesDemoViewModel()
|
public VariablesDemoViewModel()
|
||||||
{
|
{
|
||||||
@@ -30,7 +31,7 @@ public class VariablesDemoViewModel : ObservableObject
|
|||||||
GridData.GroupDescriptions.Add(new DataGridPathGroupDescription(nameof(VariableItem.Category)));
|
GridData.GroupDescriptions.Add(new DataGridPathGroupDescription(nameof(VariableItem.Category)));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static string GetValueString(object? value)
|
private static string? GetValueString(object? value)
|
||||||
{
|
{
|
||||||
if (value is null) return string.Empty;
|
if (value is null) return string.Empty;
|
||||||
|
|
||||||
@@ -45,6 +46,28 @@ public class VariablesDemoViewModel : ObservableObject
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
partial void OnSearchTextChanged(string value)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrWhiteSpace(value))
|
||||||
|
{
|
||||||
|
GridData.Filter = _ => true;
|
||||||
|
GridData.Refresh();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var search = value.Trim();
|
||||||
|
GridData.Filter = item =>
|
||||||
|
{
|
||||||
|
if (item is not VariableItem variableItem) return false;
|
||||||
|
return (variableItem.Category?.Contains(search, StringComparison.InvariantCultureIgnoreCase) ?? false) ||
|
||||||
|
(variableItem.ResourceKey?.Contains(search, StringComparison.InvariantCultureIgnoreCase) ?? false) ||
|
||||||
|
(variableItem.Value?.Contains(search, StringComparison.InvariantCultureIgnoreCase) ?? false) ||
|
||||||
|
(variableItem.Type?.Name.Contains(search, StringComparison.InvariantCultureIgnoreCase) ?? false) ||
|
||||||
|
(variableItem.Description?.Contains(search, StringComparison.InvariantCultureIgnoreCase) ?? false);
|
||||||
|
};
|
||||||
|
GridData.Refresh();
|
||||||
|
}
|
||||||
|
|
||||||
private static List<VariableItem> Tokens { get; set; } =
|
private static List<VariableItem> Tokens { get; set; } =
|
||||||
[
|
[
|
||||||
new("Height", "SemiHeightControlSmall"),
|
new("Height", "SemiHeightControlSmall"),
|
||||||
@@ -55,6 +78,11 @@ public class VariablesDemoViewModel : ObservableObject
|
|||||||
new("Icon Size", "SemiWidthIconMedium"),
|
new("Icon Size", "SemiWidthIconMedium"),
|
||||||
new("Icon Size", "SemiWidthIconLarge"),
|
new("Icon Size", "SemiWidthIconLarge"),
|
||||||
new("Icon Size", "SemiWidthIconExtraLarge"),
|
new("Icon Size", "SemiWidthIconExtraLarge"),
|
||||||
|
new("Border CornerRadius Spacing", "SemiBorderRadiusSpacingExtraSmall"),
|
||||||
|
new("Border CornerRadius Spacing", "SemiBorderRadiusSpacingSmall"),
|
||||||
|
new("Border CornerRadius Spacing", "SemiBorderRadiusSpacingMedium"),
|
||||||
|
new("Border CornerRadius Spacing", "SemiBorderRadiusSpacingLarge"),
|
||||||
|
new("Border CornerRadius Spacing", "SemiBorderRadiusSpacingFull"),
|
||||||
new("Border CornerRadius", "SemiBorderRadiusExtraSmall"),
|
new("Border CornerRadius", "SemiBorderRadiusExtraSmall"),
|
||||||
new("Border CornerRadius", "SemiBorderRadiusSmall"),
|
new("Border CornerRadius", "SemiBorderRadiusSmall"),
|
||||||
new("Border CornerRadius", "SemiBorderRadiusMedium"),
|
new("Border CornerRadius", "SemiBorderRadiusMedium"),
|
||||||
|
|||||||
@@ -8,7 +8,6 @@
|
|||||||
xmlns:views="clr-namespace:Semi.Avalonia.Demo.Views"
|
xmlns:views="clr-namespace:Semi.Avalonia.Demo.Views"
|
||||||
d:DesignHeight="450"
|
d:DesignHeight="450"
|
||||||
d:DesignWidth="800"
|
d:DesignWidth="800"
|
||||||
x:CompileBindings="True"
|
|
||||||
x:DataType="views:MainViewModel"
|
x:DataType="views:MainViewModel"
|
||||||
mc:Ignorable="d">
|
mc:Ignorable="d">
|
||||||
<UserControl.Resources>
|
<UserControl.Resources>
|
||||||
@@ -17,9 +16,9 @@
|
|||||||
<Setter Property="Template">
|
<Setter Property="Template">
|
||||||
<ControlTemplate TargetType="TabItem">
|
<ControlTemplate TargetType="TabItem">
|
||||||
<TextBlock
|
<TextBlock
|
||||||
FontWeight="Bold"
|
|
||||||
FontSize="12"
|
|
||||||
Margin="4"
|
Margin="4"
|
||||||
|
FontSize="12"
|
||||||
|
FontWeight="Bold"
|
||||||
Text="{TemplateBinding Header}" />
|
Text="{TemplateBinding Header}" />
|
||||||
</ControlTemplate>
|
</ControlTemplate>
|
||||||
</Setter>
|
</Setter>
|
||||||
@@ -38,48 +37,44 @@
|
|||||||
<StackPanel Orientation="Horizontal" Spacing="8">
|
<StackPanel Orientation="Horizontal" Spacing="8">
|
||||||
<ToggleSwitch
|
<ToggleSwitch
|
||||||
Name="ExpandButton"
|
Name="ExpandButton"
|
||||||
Theme="{DynamicResource IconBorderlessToggleSwitch}"
|
Content="{StaticResource SemiIconSidebar}"
|
||||||
Content="{StaticResource SemiIconSidebar}" />
|
Theme="{DynamicResource IconBorderlessToggleSwitch}" />
|
||||||
<SelectableTextBlock
|
<SelectableTextBlock
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center"
|
||||||
Classes="H6"
|
Classes="H6"
|
||||||
Text="Semi Avalonia"
|
Text="Semi Avalonia"
|
||||||
Theme="{DynamicResource TitleSelectableTextBlock}" />
|
Theme="{DynamicResource TitleSelectableTextBlock}" />
|
||||||
<SelectableTextBlock
|
<SelectableTextBlock VerticalAlignment="Center" Text="/" />
|
||||||
VerticalAlignment="Center"
|
|
||||||
Text="/" />
|
|
||||||
<SelectableTextBlock
|
<SelectableTextBlock
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center"
|
||||||
Classes="Secondary"
|
Classes="Secondary"
|
||||||
Text="{ReflectionBinding #tab.SelectedItem.Header}" />
|
Text="{ReflectionBinding #tab.SelectedItem.Header}" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
|
<StackPanel HorizontalAlignment="Right" Orientation="Horizontal">
|
||||||
<Button
|
<Button
|
||||||
Theme="{DynamicResource IconBorderlessButton}"
|
|
||||||
Command="{Binding OpenUrlCommand}"
|
Command="{Binding OpenUrlCommand}"
|
||||||
CommandParameter="{Binding DocumentationUrl}"
|
CommandParameter="{Binding DocumentationUrl}"
|
||||||
Content="{StaticResource SemiIconGlobe}" />
|
Content="{StaticResource SemiIconGlobe}"
|
||||||
|
Theme="{DynamicResource IconBorderlessButton}" />
|
||||||
|
|
||||||
<Button
|
<Button
|
||||||
Theme="{DynamicResource IconBorderlessButton}"
|
|
||||||
Command="{Binding OpenUrlCommand}"
|
Command="{Binding OpenUrlCommand}"
|
||||||
CommandParameter="{Binding RepoUrl}"
|
CommandParameter="{Binding RepoUrl}"
|
||||||
Content="{StaticResource SemiIconGithubLogo}" />
|
Content="{StaticResource SemiIconGithubLogo}"
|
||||||
|
Theme="{DynamicResource IconBorderlessButton}" />
|
||||||
|
|
||||||
<ToggleSwitch
|
<ToggleSwitch
|
||||||
Theme="{DynamicResource IconBorderlessToggleSwitch}"
|
|
||||||
Command="{Binding ToggleThemeCommand}"
|
Command="{Binding ToggleThemeCommand}"
|
||||||
|
OffContent="{StaticResource SemiIconSun}"
|
||||||
OnContent="{StaticResource SemiIconMoon}"
|
OnContent="{StaticResource SemiIconMoon}"
|
||||||
OffContent="{StaticResource SemiIconSun}" />
|
Theme="{DynamicResource IconBorderlessToggleSwitch}" />
|
||||||
|
|
||||||
<Button
|
<Button Content="{StaticResource SemiIconMenu}" Theme="{DynamicResource IconBorderlessButton}">
|
||||||
Theme="{DynamicResource IconBorderlessButton}"
|
|
||||||
Content="{StaticResource SemiIconMenu}">
|
|
||||||
<Button.Flyout>
|
<Button.Flyout>
|
||||||
<MenuFlyout Placement="Bottom" ItemsSource="{Binding MenuItems}" />
|
<MenuFlyout ItemsSource="{Binding MenuItems}" Placement="Bottom" />
|
||||||
</Button.Flyout>
|
</Button.Flyout>
|
||||||
<Button.Styles>
|
<Button.Styles>
|
||||||
<Style Selector="MenuItem" x:DataType="views:MenuItemViewModel">
|
<Style x:DataType="views:MenuItemViewModel" Selector="MenuItem">
|
||||||
<Setter Property="Header" Value="{Binding Header}" />
|
<Setter Property="Header" Value="{Binding Header}" />
|
||||||
<Setter Property="ItemsSource" Value="{Binding Items}" />
|
<Setter Property="ItemsSource" Value="{Binding Items}" />
|
||||||
<Setter Property="Command" Value="{Binding Command}" />
|
<Setter Property="Command" Value="{Binding Command}" />
|
||||||
@@ -95,8 +90,8 @@
|
|||||||
Grid.Row="1"
|
Grid.Row="1"
|
||||||
Margin="8"
|
Margin="8"
|
||||||
Padding="20,0,0,0"
|
Padding="20,0,0,0"
|
||||||
TabStripPlacement="Left"
|
|
||||||
Classes.Dismiss="{Binding #ExpandButton.IsChecked}"
|
Classes.Dismiss="{Binding #ExpandButton.IsChecked}"
|
||||||
|
TabStripPlacement="Left"
|
||||||
Theme="{DynamicResource ScrollLineTabControl}">
|
Theme="{DynamicResource ScrollLineTabControl}">
|
||||||
<TabControl.Styles>
|
<TabControl.Styles>
|
||||||
<Style Selector=".Dismiss /template/ ScrollViewer#PART_ScrollViewer">
|
<Style Selector=".Dismiss /template/ ScrollViewer#PART_ScrollViewer">
|
||||||
@@ -114,9 +109,7 @@
|
|||||||
<TabItem Header="About Us">
|
<TabItem Header="About Us">
|
||||||
<pages:AboutUs />
|
<pages:AboutUs />
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem
|
<TabItem Header="Resource Browser" Theme="{DynamicResource CategoryTabItem}" />
|
||||||
Theme="{DynamicResource CategoryTabItem}"
|
|
||||||
Header="Resource Browser" />
|
|
||||||
<TabItem Header="Palette">
|
<TabItem Header="Palette">
|
||||||
<pages:PaletteDemo />
|
<pages:PaletteDemo />
|
||||||
</TabItem>
|
</TabItem>
|
||||||
@@ -129,21 +122,17 @@
|
|||||||
<TabItem Header="Icon">
|
<TabItem Header="Icon">
|
||||||
<pages:IconDemo />
|
<pages:IconDemo />
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem
|
<TabItem Header="Separate Pack" Theme="{DynamicResource CategoryTabItem}" />
|
||||||
Theme="{DynamicResource CategoryTabItem}"
|
|
||||||
Header="Separate Pack" />
|
|
||||||
<TabItem Header="ColorPicker">
|
<TabItem Header="ColorPicker">
|
||||||
<pages:ColorPickerDemo />
|
<pages:ColorPickerDemo />
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem Header="DataGrid">
|
<TabItem Header="DataGrid">
|
||||||
<pages:DataGridDemo />
|
<pages:DataGridDemo />
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem Header="TreeDataGrid">
|
<!-- <TabItem Header="TreeDataGrid"> -->
|
||||||
<pages:TreeDataGridDemo />
|
<!-- <pages:TreeDataGridDemo /> -->
|
||||||
</TabItem>
|
<!-- </TabItem> -->
|
||||||
<TabItem
|
<TabItem Header="Basic" Theme="{DynamicResource CategoryTabItem}" />
|
||||||
Theme="{DynamicResource CategoryTabItem}"
|
|
||||||
Header="Basic" />
|
|
||||||
<TabItem Header="TextBlock">
|
<TabItem Header="TextBlock">
|
||||||
<pages:TextBlockDemo />
|
<pages:TextBlockDemo />
|
||||||
</TabItem>
|
</TabItem>
|
||||||
@@ -156,21 +145,13 @@
|
|||||||
<TabItem Header="PathIcon">
|
<TabItem Header="PathIcon">
|
||||||
<pages:PathIconDemo />
|
<pages:PathIconDemo />
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem
|
<TabItem Header="Button" Theme="{DynamicResource CategoryTabItem}" />
|
||||||
Theme="{DynamicResource CategoryTabItem}"
|
|
||||||
Header="Button" />
|
|
||||||
<TabItem Header="Button">
|
<TabItem Header="Button">
|
||||||
<pages:ButtonDemo />
|
<pages:ButtonDemo />
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem Header="RepeatButton">
|
|
||||||
<pages:RepeatButtonDemo />
|
|
||||||
</TabItem>
|
|
||||||
<TabItem Header="HyperlinkButton">
|
<TabItem Header="HyperlinkButton">
|
||||||
<pages:HyperlinkButtonDemo />
|
<pages:HyperlinkButtonDemo />
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem Header="ToggleButton">
|
|
||||||
<pages:ToggleButtonDemo />
|
|
||||||
</TabItem>
|
|
||||||
<TabItem Header="CheckBox">
|
<TabItem Header="CheckBox">
|
||||||
<pages:CheckBoxDemo />
|
<pages:CheckBoxDemo />
|
||||||
</TabItem>
|
</TabItem>
|
||||||
@@ -180,9 +161,7 @@
|
|||||||
<TabItem Header="ToggleSwitch">
|
<TabItem Header="ToggleSwitch">
|
||||||
<pages:ToggleSwitchDemo />
|
<pages:ToggleSwitchDemo />
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem
|
<TabItem Header="Input" Theme="{DynamicResource CategoryTabItem}" />
|
||||||
Theme="{DynamicResource CategoryTabItem}"
|
|
||||||
Header="Input" />
|
|
||||||
<TabItem Header="TextBox">
|
<TabItem Header="TextBox">
|
||||||
<pages:TextBoxDemo />
|
<pages:TextBoxDemo />
|
||||||
</TabItem>
|
</TabItem>
|
||||||
@@ -204,9 +183,7 @@
|
|||||||
<TabItem Header="ManagedFileChooser">
|
<TabItem Header="ManagedFileChooser">
|
||||||
<pages:ManagedFileChooserDemo />
|
<pages:ManagedFileChooserDemo />
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem
|
<TabItem Header="Date/Time" Theme="{DynamicResource CategoryTabItem}" />
|
||||||
Theme="{DynamicResource CategoryTabItem}"
|
|
||||||
Header="Date/Time" />
|
|
||||||
<TabItem Header="Calendar">
|
<TabItem Header="Calendar">
|
||||||
<pages:CalendarDemo />
|
<pages:CalendarDemo />
|
||||||
</TabItem>
|
</TabItem>
|
||||||
@@ -219,9 +196,19 @@
|
|||||||
<TabItem Header="TimePicker">
|
<TabItem Header="TimePicker">
|
||||||
<pages:TimePickerDemo />
|
<pages:TimePickerDemo />
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem
|
<TabItem Header="Navigation" Theme="{DynamicResource CategoryTabItem}" />
|
||||||
Theme="{DynamicResource CategoryTabItem}"
|
<TabItem Header="ContentPage">
|
||||||
Header="Navigation" />
|
<pages:ContentPageDemo />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem Header="DrawerPage">
|
||||||
|
<pages:DrawerPageDemo />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem Header="NavigationPage">
|
||||||
|
<pages:NavigationPageDemo />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem Header="TabbedPage">
|
||||||
|
<pages:TabbedPageDemo />
|
||||||
|
</TabItem>
|
||||||
<TabItem Header="TabControl">
|
<TabItem Header="TabControl">
|
||||||
<pages:TabControlDemo />
|
<pages:TabControlDemo />
|
||||||
</TabItem>
|
</TabItem>
|
||||||
@@ -231,9 +218,7 @@
|
|||||||
<TabItem Header="TreeView">
|
<TabItem Header="TreeView">
|
||||||
<pages:TreeViewDemo />
|
<pages:TreeViewDemo />
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem
|
<TabItem Header="Show" Theme="{DynamicResource CategoryTabItem}" />
|
||||||
Theme="{DynamicResource CategoryTabItem}"
|
|
||||||
Header="Show" />
|
|
||||||
<TabItem Header="Carousel">
|
<TabItem Header="Carousel">
|
||||||
<pages:CarouselDemo />
|
<pages:CarouselDemo />
|
||||||
</TabItem>
|
</TabItem>
|
||||||
@@ -258,9 +243,7 @@
|
|||||||
<TabItem Header="ToolTip">
|
<TabItem Header="ToolTip">
|
||||||
<pages:ToolTipDemo />
|
<pages:ToolTipDemo />
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem
|
<TabItem Header="Feedback" Theme="{DynamicResource CategoryTabItem}" />
|
||||||
Theme="{DynamicResource CategoryTabItem}"
|
|
||||||
Header="Feedback" />
|
|
||||||
<TabItem Header="DataValidationErrors">
|
<TabItem Header="DataValidationErrors">
|
||||||
<pages:DataValidationErrorsDemo />
|
<pages:DataValidationErrorsDemo />
|
||||||
</TabItem>
|
</TabItem>
|
||||||
@@ -273,9 +256,10 @@
|
|||||||
<TabItem Header="RefreshContainer">
|
<TabItem Header="RefreshContainer">
|
||||||
<pages:RefreshContainerDemo />
|
<pages:RefreshContainerDemo />
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem
|
<TabItem Header="Other" Theme="{DynamicResource CategoryTabItem}" />
|
||||||
Theme="{DynamicResource CategoryTabItem}"
|
<TabItem Header="CommandBar">
|
||||||
Header="Other" />
|
<pages:CommandBarDemo />
|
||||||
|
</TabItem>
|
||||||
<TabItem Header="GridSplitter">
|
<TabItem Header="GridSplitter">
|
||||||
<pages:GridSplitterDemo />
|
<pages:GridSplitterDemo />
|
||||||
</TabItem>
|
</TabItem>
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ using Avalonia.Controls.ApplicationLifetimes;
|
|||||||
using Avalonia.Styling;
|
using Avalonia.Styling;
|
||||||
using CommunityToolkit.Mvvm.ComponentModel;
|
using CommunityToolkit.Mvvm.ComponentModel;
|
||||||
using CommunityToolkit.Mvvm.Input;
|
using CommunityToolkit.Mvvm.Input;
|
||||||
|
using CommunityToolkit.Mvvm.Messaging;
|
||||||
|
|
||||||
namespace Semi.Avalonia.Demo.Views;
|
namespace Semi.Avalonia.Demo.Views;
|
||||||
|
|
||||||
@@ -18,6 +19,19 @@ public partial class MainView : UserControl
|
|||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
this.DataContext = new MainViewModel();
|
this.DataContext = new MainViewModel();
|
||||||
|
WeakReferenceMessenger.Default.Register<string, string>(this, "JumpTo", MessageHandler);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void MessageHandler(object _, string message)
|
||||||
|
{
|
||||||
|
foreach (var item in tab.ItemsView)
|
||||||
|
{
|
||||||
|
if (item is TabItem tabItem && tabItem.Header is not null && tabItem.Header.Equals(message))
|
||||||
|
{
|
||||||
|
tab.SelectedItem = tabItem;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -76,61 +90,97 @@ public partial class MainViewModel : ObservableObject
|
|||||||
{
|
{
|
||||||
Header = "简体中文",
|
Header = "简体中文",
|
||||||
Command = SelectLocaleCommand,
|
Command = SelectLocaleCommand,
|
||||||
CommandParameter = new CultureInfo("zh-cn")
|
CommandParameter = new CultureInfo("zh-CN")
|
||||||
},
|
},
|
||||||
new MenuItemViewModel
|
new MenuItemViewModel
|
||||||
{
|
{
|
||||||
Header = "English",
|
Header = "English",
|
||||||
Command = SelectLocaleCommand,
|
Command = SelectLocaleCommand,
|
||||||
CommandParameter = new CultureInfo("en-us")
|
CommandParameter = new CultureInfo("en-US")
|
||||||
},
|
},
|
||||||
new MenuItemViewModel
|
new MenuItemViewModel
|
||||||
{
|
{
|
||||||
Header = "日本語",
|
Header = "日本語",
|
||||||
Command = SelectLocaleCommand,
|
Command = SelectLocaleCommand,
|
||||||
CommandParameter = new CultureInfo("ja-jp")
|
CommandParameter = new CultureInfo("ja-JP")
|
||||||
|
},
|
||||||
|
new MenuItemViewModel
|
||||||
|
{
|
||||||
|
Header = "한국어",
|
||||||
|
Command = SelectLocaleCommand,
|
||||||
|
CommandParameter = new CultureInfo("ko-KR")
|
||||||
|
},
|
||||||
|
new MenuItemViewModel
|
||||||
|
{
|
||||||
|
Header = "English (UK)",
|
||||||
|
Command = SelectLocaleCommand,
|
||||||
|
CommandParameter = new CultureInfo("en-GB")
|
||||||
|
},
|
||||||
|
new MenuItemViewModel
|
||||||
|
{
|
||||||
|
Header = "Italiano",
|
||||||
|
Command = SelectLocaleCommand,
|
||||||
|
CommandParameter = new CultureInfo("it-IT")
|
||||||
|
},
|
||||||
|
new MenuItemViewModel
|
||||||
|
{
|
||||||
|
Header = "Italiano (Switzerland)",
|
||||||
|
Command = SelectLocaleCommand,
|
||||||
|
CommandParameter = new CultureInfo("it-CH")
|
||||||
|
},
|
||||||
|
new MenuItemViewModel
|
||||||
|
{
|
||||||
|
Header = "Nederlands",
|
||||||
|
Command = SelectLocaleCommand,
|
||||||
|
CommandParameter = new CultureInfo("nl-NL")
|
||||||
|
},
|
||||||
|
new MenuItemViewModel
|
||||||
|
{
|
||||||
|
Header = "Nederlands (Belgium)",
|
||||||
|
Command = SelectLocaleCommand,
|
||||||
|
CommandParameter = new CultureInfo("nl-BE")
|
||||||
},
|
},
|
||||||
new MenuItemViewModel
|
new MenuItemViewModel
|
||||||
{
|
{
|
||||||
Header = "Українська",
|
Header = "Українська",
|
||||||
Command = SelectLocaleCommand,
|
Command = SelectLocaleCommand,
|
||||||
CommandParameter = new CultureInfo("uk-ua")
|
CommandParameter = new CultureInfo("uk-UA")
|
||||||
},
|
},
|
||||||
new MenuItemViewModel
|
new MenuItemViewModel
|
||||||
{
|
{
|
||||||
Header = "Русский",
|
Header = "Русский",
|
||||||
Command = SelectLocaleCommand,
|
Command = SelectLocaleCommand,
|
||||||
CommandParameter = new CultureInfo("ru-ru")
|
CommandParameter = new CultureInfo("ru-RU")
|
||||||
},
|
},
|
||||||
new MenuItemViewModel
|
new MenuItemViewModel
|
||||||
{
|
{
|
||||||
Header = "繁體中文",
|
Header = "繁體中文",
|
||||||
Command = SelectLocaleCommand,
|
Command = SelectLocaleCommand,
|
||||||
CommandParameter = new CultureInfo("zh-tw")
|
CommandParameter = new CultureInfo("zh-TW")
|
||||||
},
|
},
|
||||||
new MenuItemViewModel
|
new MenuItemViewModel
|
||||||
{
|
{
|
||||||
Header = "Deutsch",
|
Header = "Deutsch",
|
||||||
Command = SelectLocaleCommand,
|
Command = SelectLocaleCommand,
|
||||||
CommandParameter = new CultureInfo("de-de")
|
CommandParameter = new CultureInfo("de-DE")
|
||||||
},
|
},
|
||||||
new MenuItemViewModel
|
new MenuItemViewModel
|
||||||
{
|
{
|
||||||
Header = "Español",
|
Header = "Español",
|
||||||
Command = SelectLocaleCommand,
|
Command = SelectLocaleCommand,
|
||||||
CommandParameter = new CultureInfo("es-es")
|
CommandParameter = new CultureInfo("es-ES")
|
||||||
},
|
},
|
||||||
new MenuItemViewModel
|
new MenuItemViewModel
|
||||||
{
|
{
|
||||||
Header = "Polski",
|
Header = "Polski",
|
||||||
Command = SelectLocaleCommand,
|
Command = SelectLocaleCommand,
|
||||||
CommandParameter = new CultureInfo("pl-pl")
|
CommandParameter = new CultureInfo("pl-PL")
|
||||||
},
|
},
|
||||||
new MenuItemViewModel
|
new MenuItemViewModel
|
||||||
{
|
{
|
||||||
Header = "Français",
|
Header = "Français",
|
||||||
Command = SelectLocaleCommand,
|
Command = SelectLocaleCommand,
|
||||||
CommandParameter = new CultureInfo("fr-fr")
|
CommandParameter = new CultureInfo("fr-FR")
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -197,4 +247,4 @@ public class MenuItemViewModel
|
|||||||
public ICommand? Command { get; set; }
|
public ICommand? Command { get; set; }
|
||||||
public object? CommandParameter { get; set; }
|
public object? CommandParameter { get; set; }
|
||||||
public IList<MenuItemViewModel>? Items { get; set; }
|
public IList<MenuItemViewModel>? Items { get; set; }
|
||||||
}
|
}
|
||||||
@@ -5,10 +5,12 @@
|
|||||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
xmlns:views="clr-namespace:Semi.Avalonia.Demo.Views"
|
xmlns:views="clr-namespace:Semi.Avalonia.Demo.Views"
|
||||||
Title="Semi.Avalonia.Demo"
|
Title="Semi Avalonia Demo"
|
||||||
d:DesignHeight="450"
|
d:DesignHeight="450"
|
||||||
d:DesignWidth="800"
|
d:DesignWidth="800"
|
||||||
|
ExtendClientAreaToDecorationsHint="True"
|
||||||
|
ExtendClientAreaTitleBarHeightHint="40"
|
||||||
Icon="/Assets/irihi.ico"
|
Icon="/Assets/irihi.ico"
|
||||||
mc:Ignorable="d">
|
mc:Ignorable="d">
|
||||||
<views:MainView />
|
<views:MainView Margin="{Binding $parent[Window].WindowDecorationMargin}" />
|
||||||
</Window>
|
</Window>
|
||||||
@@ -1,16 +1,23 @@
|
|||||||
<Project>
|
<Project>
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFrameworks>netstandard2.0;net6.0;net8.0</TargetFrameworks>
|
|
||||||
<Nullable>enable</Nullable>
|
<Nullable>enable</Nullable>
|
||||||
<LangVersion>latest</LangVersion>
|
<LangVersion>latest</LangVersion>
|
||||||
<Version>11.2.1.9</Version>
|
<AvaloniaUseCompiledBindingsByDefault>true</AvaloniaUseCompiledBindingsByDefault>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<PropertyGroup Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net8.0'))">
|
||||||
|
<IsAotCompatible>true</IsAotCompatible>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
<Authors>IRIHI Technology Co., Ltd.</Authors>
|
<Authors>IRIHI Technology Co., Ltd.</Authors>
|
||||||
<Description>Avalonia Theme inspired by Semi Design.</Description>
|
<Description>Avalonia Theme inspired by Semi Design.</Description>
|
||||||
<RepositoryUrl>https://github.com/irihitech/Semi.Avalonia</RepositoryUrl>
|
<RepositoryUrl>https://github.com/irihitech/Semi.Avalonia</RepositoryUrl>
|
||||||
|
<PackageProjectUrl>https://github.com/irihitech/Semi.Avalonia</PackageProjectUrl>
|
||||||
<PackageLicenseExpression>MIT</PackageLicenseExpression>
|
<PackageLicenseExpression>MIT</PackageLicenseExpression>
|
||||||
<PackageIcon>irihi.png</PackageIcon>
|
<PackageIcon>irihi.png</PackageIcon>
|
||||||
<PackageProjectUrl>https://github.com/irihitech/Semi.Avalonia</PackageProjectUrl>
|
<PackageProjectUrl>https://github.com/irihitech/Semi.Avalonia</PackageProjectUrl>
|
||||||
<AvaloniaVersion>11.2.1</AvaloniaVersion>
|
<PackageReadmeFile>README.md</PackageReadmeFile>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
14
src/Directory.Packages.props
Normal file
14
src/Directory.Packages.props
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
<Project>
|
||||||
|
<PropertyGroup>
|
||||||
|
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
|
||||||
|
<AvaloniaVersion>12.0.0-preview2</AvaloniaVersion>
|
||||||
|
<DataGridVersion>12.0.0-preview2-2</DataGridVersion>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageVersion Include="Avalonia" Version="$(AvaloniaVersion)"/>
|
||||||
|
<PackageVersion Include="Avalonia.Controls.ColorPicker" Version="$(AvaloniaVersion)"/>
|
||||||
|
<PackageVersion Include="Avalonia.Controls.DataGrid" Version="$(DataGridVersion)"/>
|
||||||
|
<PackageVersion Include="Avalonia.Controls.TreeDataGrid" Version="11.1.1"/>
|
||||||
|
<PackageVersion Include="Irihi.Avalonia.Shared" Version="0.4.0-preview1"/>
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
||||||
@@ -1,9 +1,8 @@
|
|||||||
<ResourceDictionary
|
<ResourceDictionary
|
||||||
xmlns="https://github.com/avaloniaui"
|
xmlns="https://github.com/avaloniaui"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
xmlns:converters="using:Avalonia.Controls.Converters"
|
xmlns:iri="https://irihi.tech/shared"
|
||||||
x:CompileBindings="True">
|
xmlns:converters="using:Avalonia.Controls.Converters">
|
||||||
<converters:CornerRadiusFilterConverter x:Key="LeftCornerRadiusFilterConverter" Filter="TopLeft, BottomLeft" />
|
|
||||||
<converters:ToBrushConverter x:Key="ToBrushConverter" />
|
<converters:ToBrushConverter x:Key="ToBrushConverter" />
|
||||||
|
|
||||||
<ControlTheme x:Key="{x:Type ColorPicker}" TargetType="ColorPicker">
|
<ControlTheme x:Key="{x:Type ColorPicker}" TargetType="ColorPicker">
|
||||||
@@ -17,11 +16,11 @@
|
|||||||
<Border
|
<Border
|
||||||
Margin="1,1,0,1"
|
Margin="1,1,0,1"
|
||||||
Background="{DynamicResource ColorControlCheckeredBackgroundBrush}"
|
Background="{DynamicResource ColorControlCheckeredBackgroundBrush}"
|
||||||
CornerRadius="{TemplateBinding CornerRadius, Converter={StaticResource LeftCornerRadiusFilterConverter}}" />
|
CornerRadius="{TemplateBinding CornerRadius, Converter={iri:CornerRadiusMixerConverter Left}}" />
|
||||||
<Border
|
<Border
|
||||||
Margin="1,1,0,1"
|
Margin="1,1,0,1"
|
||||||
Background="{TemplateBinding HsvColor, Converter={StaticResource ToBrushConverter}}"
|
Background="{TemplateBinding HsvColor, Converter={StaticResource ToBrushConverter}}"
|
||||||
CornerRadius="{TemplateBinding CornerRadius, Converter={StaticResource LeftCornerRadiusFilterConverter}}" />
|
CornerRadius="{TemplateBinding CornerRadius, Converter={iri:CornerRadiusMixerConverter Left}}" />
|
||||||
</Panel>
|
</Panel>
|
||||||
</Template>
|
</Template>
|
||||||
</Setter>
|
</Setter>
|
||||||
|
|||||||
@@ -1,12 +1,9 @@
|
|||||||
<ResourceDictionary
|
<ResourceDictionary
|
||||||
xmlns="https://github.com/avaloniaui"
|
xmlns="https://github.com/avaloniaui"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
xmlns:converters="using:Avalonia.Controls.Converters"
|
xmlns:iri="https://irihi.tech/shared"
|
||||||
xmlns:pc="using:Avalonia.Controls.Primitives.Converters"
|
xmlns:pc="using:Avalonia.Controls.Primitives.Converters">
|
||||||
x:CompileBindings="True">
|
|
||||||
<pc:AccentColorConverter x:Key="AccentColorConverter" />
|
<pc:AccentColorConverter x:Key="AccentColorConverter" />
|
||||||
<converters:CornerRadiusFilterConverter x:Key="LeftCornerRadiusFilterConverter" Filter="TopLeft, BottomLeft" />
|
|
||||||
<converters:CornerRadiusFilterConverter x:Key="RightCornerRadiusFilterConverter" Filter="TopRight, BottomRight" />
|
|
||||||
|
|
||||||
<ControlTheme x:Key="{x:Type ColorPreviewer}" TargetType="ColorPreviewer">
|
<ControlTheme x:Key="{x:Type ColorPreviewer}" TargetType="ColorPreviewer">
|
||||||
<Setter Property="Height" Value="{DynamicResource ColorPreviewerHeight}" />
|
<Setter Property="Height" Value="{DynamicResource ColorPreviewerHeight}" />
|
||||||
@@ -35,7 +32,7 @@
|
|||||||
Background="{TemplateBinding HsvColor,
|
Background="{TemplateBinding HsvColor,
|
||||||
Converter={StaticResource AccentColorConverter},
|
Converter={StaticResource AccentColorConverter},
|
||||||
ConverterParameter='-2'}"
|
ConverterParameter='-2'}"
|
||||||
CornerRadius="{TemplateBinding CornerRadius,Converter={StaticResource LeftCornerRadiusFilterConverter}}"
|
CornerRadius="{TemplateBinding CornerRadius,Converter={iri:CornerRadiusMixerConverter Left}}"
|
||||||
Tag="-2" />
|
Tag="-2" />
|
||||||
<Border
|
<Border
|
||||||
Name="PART_AccentDecrement1Border"
|
Name="PART_AccentDecrement1Border"
|
||||||
@@ -71,7 +68,7 @@
|
|||||||
Background="{TemplateBinding HsvColor,
|
Background="{TemplateBinding HsvColor,
|
||||||
Converter={StaticResource AccentColorConverter},
|
Converter={StaticResource AccentColorConverter},
|
||||||
ConverterParameter='2'}"
|
ConverterParameter='2'}"
|
||||||
CornerRadius="{TemplateBinding CornerRadius,Converter={StaticResource RightCornerRadiusFilterConverter}}"
|
CornerRadius="{TemplateBinding CornerRadius,Converter={iri:CornerRadiusMixerConverter Right}}"
|
||||||
Tag="2" />
|
Tag="2" />
|
||||||
</Grid>
|
</Grid>
|
||||||
<!-- Preview color: Must be last for drop shadow Z-index -->
|
<!-- Preview color: Must be last for drop shadow Z-index -->
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
<ResourceDictionary
|
<ResourceDictionary
|
||||||
xmlns="https://github.com/avaloniaui"
|
xmlns="https://github.com/avaloniaui"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
xmlns:converters="using:Avalonia.Controls.Converters"
|
xmlns:converters="using:Avalonia.Controls.Converters">
|
||||||
x:CompileBindings="True">
|
|
||||||
<converters:CornerRadiusToDoubleConverter x:Key="TopLeftCornerRadiusConverter" Corner="TopLeft" />
|
<converters:CornerRadiusToDoubleConverter x:Key="TopLeftCornerRadiusConverter" Corner="TopLeft" />
|
||||||
<converters:CornerRadiusToDoubleConverter x:Key="BottomRightCornerRadiusConverter" Corner="BottomRight" />
|
<converters:CornerRadiusToDoubleConverter x:Key="BottomRightCornerRadiusConverter" Corner="BottomRight" />
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
<ResourceDictionary
|
<ResourceDictionary
|
||||||
xmlns="https://github.com/avaloniaui"
|
xmlns="https://github.com/avaloniaui"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
xmlns:converters="using:Avalonia.Controls.Converters"
|
xmlns:converters="using:Avalonia.Controls.Converters">
|
||||||
x:CompileBindings="True">
|
|
||||||
<converters:EnumToBoolConverter x:Key="EnumToBoolConverter" />
|
<converters:EnumToBoolConverter x:Key="EnumToBoolConverter" />
|
||||||
<converters:CornerRadiusToDoubleConverter x:Key="TopLeftCornerRadiusConverter" Corner="TopLeft" />
|
<converters:CornerRadiusToDoubleConverter x:Key="TopLeftCornerRadiusConverter" Corner="TopLeft" />
|
||||||
<converters:CornerRadiusToDoubleConverter x:Key="BottomRightCornerRadiusConverter" Corner="BottomRight" />
|
<converters:CornerRadiusToDoubleConverter x:Key="BottomRightCornerRadiusConverter" Corner="BottomRight" />
|
||||||
|
|||||||
@@ -4,8 +4,7 @@
|
|||||||
xmlns:converters="using:Avalonia.Controls.Converters"
|
xmlns:converters="using:Avalonia.Controls.Converters"
|
||||||
xmlns:globalization="using:System.Globalization"
|
xmlns:globalization="using:System.Globalization"
|
||||||
xmlns:pc="using:Avalonia.Controls.Primitives.Converters"
|
xmlns:pc="using:Avalonia.Controls.Primitives.Converters"
|
||||||
xmlns:cvts="clr-namespace:Semi.Avalonia.ColorPicker.Converters"
|
xmlns:cvts="clr-namespace:Semi.Avalonia.ColorPicker.Converters">
|
||||||
x:CompileBindings="True">
|
|
||||||
<pc:ContrastBrushConverter x:Key="ContrastBrushConverter" />
|
<pc:ContrastBrushConverter x:Key="ContrastBrushConverter" />
|
||||||
<converters:ColorToDisplayNameConverter x:Key="ColorToDisplayNameConverter" />
|
<converters:ColorToDisplayNameConverter x:Key="ColorToDisplayNameConverter" />
|
||||||
<converters:ColorToHexConverter x:Key="ColorToHexConverter" />
|
<converters:ColorToHexConverter x:Key="ColorToHexConverter" />
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
<ResourceDictionary
|
<ResourceDictionary
|
||||||
x:CompileBindings="True"
|
|
||||||
xmlns="https://github.com/avaloniaui"
|
xmlns="https://github.com/avaloniaui"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||||
<ResourceDictionary.MergedDictionaries>
|
<ResourceDictionary.MergedDictionaries>
|
||||||
|
|||||||
50
src/Semi.Avalonia.ColorPicker/README.md
Normal file
50
src/Semi.Avalonia.ColorPicker/README.md
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
# Semi.Avalonia.ColorPicker
|
||||||
|
|
||||||
|
[](https://www.nuget.org/packages/Semi.Avalonia.ColorPicker/)
|
||||||
|
[](https://www.nuget.org/packages/Semi.Avalonia.ColorPicker/)
|
||||||
|
|
||||||
|
Avalonia ColorPicker Theme inspired by Semi Design
|
||||||
|
|
||||||
|
This package provides Semi Design theming for the Avalonia ColorPicker control.
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
```bash
|
||||||
|
dotnet add package Semi.Avalonia.ColorPicker
|
||||||
|
```
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
This package requires the main Semi.Avalonia theme to be installed:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
dotnet add package Semi.Avalonia
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
Include the ColorPicker theme in your application:
|
||||||
|
|
||||||
|
```xaml
|
||||||
|
<Application
|
||||||
|
...
|
||||||
|
xmlns:semi="https://irihi.tech/semi">
|
||||||
|
<Application.Styles>
|
||||||
|
<semi:SemiTheme Locale="zh-CN" />
|
||||||
|
<semi:ColorPickerSemiTheme />
|
||||||
|
</Application.Styles>
|
||||||
|
</Application>
|
||||||
|
```
|
||||||
|
|
||||||
|
## Resources
|
||||||
|
|
||||||
|
- [Documentation](https://docs.irihi.tech/semi/)
|
||||||
|
- [Repository](https://github.com/irihitech/Semi.Avalonia)
|
||||||
|
- [Online Demo](https://irihitech.github.io/Semi.Avalonia/)
|
||||||
|
- [Download Demo](https://github.com/irihitech/Semi.Avalonia/releases)
|
||||||
|
|
||||||
|
## Credits
|
||||||
|
|
||||||
|
[Semi Design](https://semi.design/)
|
||||||
|
|
||||||
|
[Avalonia](https://github.com/AvaloniaUI/Avalonia)
|
||||||
@@ -1,18 +1,16 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
<Import Project="../Package.props"/>
|
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
|
<TargetFrameworks>net8.0;net10.0</TargetFrameworks>
|
||||||
|
<Version>12.0.0-preview2</Version>
|
||||||
|
<PackageReleaseNotes>Update to Semi.Avalonia.ColorPicker 12.0.0-preview2</PackageReleaseNotes>
|
||||||
<Title>Semi.Avalonia.ColorPicker</Title>
|
<Title>Semi.Avalonia.ColorPicker</Title>
|
||||||
<PackageReleaseNotes>Update to Semi.Avalonia.ColorPicker 11.2.1.9</PackageReleaseNotes>
|
|
||||||
</PropertyGroup>
|
|
||||||
|
|
||||||
<PropertyGroup Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net8.0'))">
|
|
||||||
<IsAotCompatible>true</IsAotCompatible>
|
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Avalonia.Controls.ColorPicker" Version="$(AvaloniaVersion)"/>
|
<PackageReference Include="Avalonia.Controls.ColorPicker"/>
|
||||||
|
<PackageReference Include="Irihi.Avalonia.Shared"/>
|
||||||
|
<None Include="README.md" Pack="true" PackagePath="\"/>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
using Avalonia.Media;
|
using Avalonia.Media;
|
||||||
using Avalonia.Utilities;
|
using Avalonia.Utilities;
|
||||||
|
using Irihi.Avalonia.Shared.Helpers;
|
||||||
|
|
||||||
namespace Semi.Avalonia.ColorPicker;
|
namespace Semi.Avalonia.ColorPicker;
|
||||||
|
|
||||||
@@ -220,8 +221,8 @@ public class SemiColorDarkPalette: IColorPalette
|
|||||||
public Color GetColor(int colorIndex, int shadeIndex)
|
public Color GetColor(int colorIndex, int shadeIndex)
|
||||||
{
|
{
|
||||||
return Colors[
|
return Colors[
|
||||||
MathUtilities.Clamp(colorIndex, 0, ColorCount - 1),
|
MathHelpers.SafeClamp(colorIndex, 0, ColorCount - 1),
|
||||||
MathUtilities.Clamp(shadeIndex, 0, ShadeCount - 1)
|
MathHelpers.SafeClamp(shadeIndex, 0, ShadeCount - 1)
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
using Avalonia.Media;
|
using Avalonia.Media;
|
||||||
using Avalonia.Utilities;
|
using Avalonia.Utilities;
|
||||||
|
using Irihi.Avalonia.Shared.Helpers;
|
||||||
|
|
||||||
namespace Semi.Avalonia.ColorPicker;
|
namespace Semi.Avalonia.ColorPicker;
|
||||||
|
|
||||||
@@ -220,8 +221,8 @@ public class SemiColorLightPalette: IColorPalette
|
|||||||
public Color GetColor(int colorIndex, int shadeIndex)
|
public Color GetColor(int colorIndex, int shadeIndex)
|
||||||
{
|
{
|
||||||
return Colors[
|
return Colors[
|
||||||
MathUtilities.Clamp(colorIndex, 0, ColorCount - 1),
|
MathHelpers.SafeClamp(colorIndex, 0, ColorCount - 1),
|
||||||
MathUtilities.Clamp(shadeIndex, 0, ShadeCount - 1)
|
MathHelpers.SafeClamp(shadeIndex, 0, ShadeCount - 1)
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 1.5 KiB |
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user