mirror of
https://gitcode.com/gh_mirrors/se/Semi.Avalonia
synced 2026-04-28 12:13:24 +08:00
Compare commits
2 Commits
drawerpage
...
editorconf
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4c02c27fbf | ||
|
|
16e646ddde |
@@ -198,7 +198,7 @@ dotnet_diagnostic.AVA2001.severity = warning
|
|||||||
|
|
||||||
# Xaml files
|
# Xaml files
|
||||||
[*.{xaml,axaml}]
|
[*.{xaml,axaml}]
|
||||||
indent_size = 4
|
indent_size = 2
|
||||||
# DuplicateSetterError
|
# DuplicateSetterError
|
||||||
avalonia_xaml_diagnostic.AVLN2203.severity = warning
|
avalonia_xaml_diagnostic.AVLN2203.severity = warning
|
||||||
# StyleInMergedDictionaries
|
# StyleInMergedDictionaries
|
||||||
|
|||||||
92
.github/COMMIT_CONVENTION.md
vendored
92
.github/COMMIT_CONVENTION.md
vendored
@@ -1,92 +0,0 @@
|
|||||||
# Git Commit Message Convention
|
|
||||||
|
|
||||||
This project follows the [Conventional Commits](https://www.conventionalcommits.org/) specification for commit messages.
|
|
||||||
|
|
||||||
## Format
|
|
||||||
|
|
||||||
```
|
|
||||||
<type>[optional scope]: <description>
|
|
||||||
|
|
||||||
[optional body]
|
|
||||||
|
|
||||||
[optional footer(s)]
|
|
||||||
```
|
|
||||||
|
|
||||||
## Types
|
|
||||||
|
|
||||||
| Type | Description |
|
|
||||||
|------|-------------|
|
|
||||||
| `feat` | A new feature |
|
|
||||||
| `fix` | A bug fix |
|
|
||||||
| `docs` | Documentation only changes |
|
|
||||||
| `style` | Changes that do not affect the meaning of the code (formatting, missing semicolons, etc.) |
|
|
||||||
| `refactor` | A code change that neither fixes a bug nor adds a feature |
|
|
||||||
| `perf` | A code change that improves performance |
|
|
||||||
| `test` | Adding missing tests or correcting existing tests |
|
|
||||||
| `build` | Changes that affect the build system or external dependencies |
|
|
||||||
| `ci` | Changes to CI configuration files and scripts |
|
|
||||||
| `chore` | Other changes that don't modify source or test files |
|
|
||||||
| `revert` | Reverts a previous commit |
|
|
||||||
|
|
||||||
## Rules
|
|
||||||
|
|
||||||
1. **Limit the subject line to 50 characters** (72 character hard limit)
|
|
||||||
2. **Use the imperative mood** in the subject line (e.g., "add feature" not "added feature")
|
|
||||||
3. **Do not end the subject line with a period**
|
|
||||||
4. **Use lowercase** for the description (e.g., "add feature" not "Add feature")
|
|
||||||
5. **Separate subject from body with a blank line**
|
|
||||||
6. **Wrap the body at 72 characters**
|
|
||||||
7. **Use the body to explain what and why**, not how
|
|
||||||
8. **Reference issues and pull requests** in the footer
|
|
||||||
|
|
||||||
## Scope
|
|
||||||
|
|
||||||
The scope should be the name of the package or area affected (e.g., `button`, `datepicker`, `theme`, `demo`).
|
|
||||||
|
|
||||||
## Examples
|
|
||||||
|
|
||||||
### Simple commit
|
|
||||||
|
|
||||||
```
|
|
||||||
feat(button): add loading state support
|
|
||||||
```
|
|
||||||
|
|
||||||
### Commit with body
|
|
||||||
|
|
||||||
```
|
|
||||||
fix(datepicker): correct month navigation overflow
|
|
||||||
|
|
||||||
When navigating past December, the month index wrapped to a
|
|
||||||
negative value instead of rolling over to January of the next year.
|
|
||||||
```
|
|
||||||
|
|
||||||
### Commit with breaking change
|
|
||||||
|
|
||||||
```
|
|
||||||
feat(theme)!: rename SemiColorPrimary to SemiColorBrand
|
|
||||||
|
|
||||||
BREAKING CHANGE: The token SemiColorPrimary has been renamed to
|
|
||||||
SemiColorBrand. Update all references in your custom theme files.
|
|
||||||
```
|
|
||||||
|
|
||||||
### Commit referencing an issue
|
|
||||||
|
|
||||||
```
|
|
||||||
fix(textbox): placeholder not visible in dark mode
|
|
||||||
|
|
||||||
Closes #123
|
|
||||||
```
|
|
||||||
|
|
||||||
## Breaking Changes
|
|
||||||
|
|
||||||
Breaking changes must be indicated by appending a `!` after the type/scope, or by including a `BREAKING CHANGE:` footer. Both methods may be used together.
|
|
||||||
|
|
||||||
## Revert Commits
|
|
||||||
|
|
||||||
When reverting a previous commit, use the `revert` type and reference the reverted commit SHA in the footer:
|
|
||||||
|
|
||||||
```
|
|
||||||
revert: feat(button): add loading state support
|
|
||||||
|
|
||||||
Revert commit a1b2c3d.
|
|
||||||
```
|
|
||||||
2
.github/workflows/pack-nightly.yml
vendored
2
.github/workflows/pack-nightly.yml
vendored
@@ -6,7 +6,7 @@ on:
|
|||||||
Version_Prefix:
|
Version_Prefix:
|
||||||
description: 'Version Prefix'
|
description: 'Version Prefix'
|
||||||
required: true
|
required: true
|
||||||
default: '12.0.999'
|
default: '11.2.999'
|
||||||
type: string
|
type: string
|
||||||
Semi_Avalonia:
|
Semi_Avalonia:
|
||||||
description: 'Pack Semi.Avalonia'
|
description: 'Pack Semi.Avalonia'
|
||||||
|
|||||||
1
.github/workflows/pack.yml
vendored
1
.github/workflows/pack.yml
vendored
@@ -40,7 +40,6 @@ on:
|
|||||||
Semi_Avalonia_TreeDataGrid:
|
Semi_Avalonia_TreeDataGrid:
|
||||||
type: boolean
|
type: boolean
|
||||||
default: true
|
default: true
|
||||||
secrets: {}
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
Pack_to_NuGet:
|
Pack_to_NuGet:
|
||||||
|
|||||||
3
.github/workflows/release-tag.yml
vendored
3
.github/workflows/release-tag.yml
vendored
@@ -33,7 +33,6 @@ jobs:
|
|||||||
Semi_Avalonia_ColorPicker: ${{ inputs.Semi_Avalonia_ColorPicker }}
|
Semi_Avalonia_ColorPicker: ${{ inputs.Semi_Avalonia_ColorPicker }}
|
||||||
Semi_Avalonia_DataGrid: ${{ inputs.Semi_Avalonia_DataGrid }}
|
Semi_Avalonia_DataGrid: ${{ inputs.Semi_Avalonia_DataGrid }}
|
||||||
Semi_Avalonia_TreeDataGrid: ${{ inputs.Semi_Avalonia_TreeDataGrid }}
|
Semi_Avalonia_TreeDataGrid: ${{ inputs.Semi_Avalonia_TreeDataGrid }}
|
||||||
secrets: inherit
|
|
||||||
|
|
||||||
publish:
|
publish:
|
||||||
uses: ./.github/workflows/publish.yml
|
uses: ./.github/workflows/publish.yml
|
||||||
@@ -63,7 +62,7 @@ jobs:
|
|||||||
run: ls -R
|
run: ls -R
|
||||||
|
|
||||||
- name: Release
|
- name: Release
|
||||||
uses: softprops/action-gh-release@v3
|
uses: softprops/action-gh-release@v2
|
||||||
if: startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch'
|
if: startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch'
|
||||||
with:
|
with:
|
||||||
generate_release_notes: true
|
generate_release_notes: true
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<Project>
|
<Project>
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
|
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
|
||||||
<AvaloniaVersion>12.0.1</AvaloniaVersion>
|
<AvaloniaVersion>12.0.0</AvaloniaVersion>
|
||||||
<DataGridVersion>12.0.0</DataGridVersion>
|
<DataGridVersion>12.0.0</DataGridVersion>
|
||||||
<SkiaSharpVersion>3.119.3-preview.1.1</SkiaSharpVersion>
|
<SkiaSharpVersion>3.119.3-preview.1.1</SkiaSharpVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
@@ -23,4 +23,4 @@
|
|||||||
|
|
||||||
<PackageVersion Include="CommunityToolkit.Mvvm" Version="8.4.2"/>
|
<PackageVersion Include="CommunityToolkit.Mvvm" Version="8.4.2"/>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
28
demo/Semi.Avalonia.Demo/Converters/FileIconConverter.cs
Normal file
28
demo/Semi.Avalonia.Demo/Converters/FileIconConverter.cs
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Globalization;
|
||||||
|
using Avalonia;
|
||||||
|
using Avalonia.Data.Converters;
|
||||||
|
using Avalonia.Metadata;
|
||||||
|
|
||||||
|
namespace Semi.Avalonia.Demo.Converters;
|
||||||
|
|
||||||
|
public class FileIconConverter : IMultiValueConverter
|
||||||
|
{
|
||||||
|
[Content] public IDictionary<string, object?> Items { get; } = new Dictionary<string, object?>();
|
||||||
|
|
||||||
|
public object? Convert(IList<object?> values, Type targetType, object? parameter, CultureInfo culture)
|
||||||
|
{
|
||||||
|
if (values[0] is bool isDirectory && values[1] is bool isOpen)
|
||||||
|
{
|
||||||
|
if (!isDirectory)
|
||||||
|
{
|
||||||
|
return Items["file"];
|
||||||
|
}
|
||||||
|
|
||||||
|
return isOpen ? Items["folderOpen"] : Items["folderClosed"];
|
||||||
|
}
|
||||||
|
|
||||||
|
return AvaloniaProperty.UnsetValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -29,40 +29,40 @@
|
|||||||
|
|
||||||
<AutoCompleteBox
|
<AutoCompleteBox
|
||||||
PlaceholderText="Please select a State"
|
PlaceholderText="Please select a State"
|
||||||
ValueMemberBinding="{Binding Name,x:DataType=vm:StateData}" />
|
ValueMemberBinding="{Binding Name,DataType=vm:StateData}" />
|
||||||
<AutoCompleteBox
|
<AutoCompleteBox
|
||||||
Classes="Large"
|
Classes="Large"
|
||||||
ValueMemberBinding="{Binding Name,x:DataType=vm:StateData}" />
|
ValueMemberBinding="{Binding Name,DataType=vm:StateData}" />
|
||||||
<AutoCompleteBox
|
<AutoCompleteBox
|
||||||
Classes="Small"
|
Classes="Small"
|
||||||
ValueMemberBinding="{Binding Name,x:DataType=vm:StateData}" />
|
ValueMemberBinding="{Binding Name,DataType=vm:StateData}" />
|
||||||
<AutoCompleteBox
|
<AutoCompleteBox
|
||||||
Classes="Bordered"
|
Classes="Bordered"
|
||||||
ValueMemberBinding="{Binding Name,x:DataType=vm:StateData}" />
|
ValueMemberBinding="{Binding Name,DataType=vm:StateData}" />
|
||||||
<AutoCompleteBox
|
<AutoCompleteBox
|
||||||
IsEnabled="False"
|
IsEnabled="False"
|
||||||
PlaceholderText="Disabled"
|
PlaceholderText="Disabled"
|
||||||
ValueMemberBinding="{Binding Name,x:DataType=vm:StateData}" />
|
ValueMemberBinding="{Binding Name,DataType=vm:StateData}" />
|
||||||
<AutoCompleteBox
|
<AutoCompleteBox
|
||||||
InnerLeftContent="https://"
|
InnerLeftContent="https://"
|
||||||
InnerRightContent=".com"
|
InnerRightContent=".com"
|
||||||
ValueMemberBinding="{Binding Name,x:DataType=vm:StateData}" />
|
ValueMemberBinding="{Binding Name,DataType=vm:StateData}" />
|
||||||
|
|
||||||
<StackPanel Orientation="Horizontal">
|
<StackPanel Orientation="Horizontal">
|
||||||
<AutoCompleteBox
|
<AutoCompleteBox
|
||||||
Width="100"
|
Width="100"
|
||||||
Classes="Large"
|
Classes="Large"
|
||||||
PlaceholderText="Large"
|
PlaceholderText="Large"
|
||||||
ValueMemberBinding="{Binding Name,x:DataType=vm:StateData}" />
|
ValueMemberBinding="{Binding Name,DataType=vm:StateData}" />
|
||||||
<AutoCompleteBox
|
<AutoCompleteBox
|
||||||
Width="100"
|
Width="100"
|
||||||
PlaceholderText="Default"
|
PlaceholderText="Default"
|
||||||
ValueMemberBinding="{Binding Name,x:DataType=vm:StateData}" />
|
ValueMemberBinding="{Binding Name,DataType=vm:StateData}" />
|
||||||
<AutoCompleteBox
|
<AutoCompleteBox
|
||||||
Width="100"
|
Width="100"
|
||||||
Classes="Small"
|
Classes="Small"
|
||||||
PlaceholderText="Small"
|
PlaceholderText="Small"
|
||||||
ValueMemberBinding="{Binding Name,x:DataType=vm:StateData}" />
|
ValueMemberBinding="{Binding Name,DataType=vm:StateData}" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
<StackPanel Orientation="Horizontal">
|
<StackPanel Orientation="Horizontal">
|
||||||
@@ -70,17 +70,17 @@
|
|||||||
Width="100"
|
Width="100"
|
||||||
IsEnabled="False"
|
IsEnabled="False"
|
||||||
PlaceholderText="Disabled"
|
PlaceholderText="Disabled"
|
||||||
ValueMemberBinding="{Binding Name,x:DataType=vm:StateData}" />
|
ValueMemberBinding="{Binding Name,DataType=vm:StateData}" />
|
||||||
<AutoCompleteBox
|
<AutoCompleteBox
|
||||||
Width="100"
|
Width="100"
|
||||||
Classes="Bordered"
|
Classes="Bordered"
|
||||||
PlaceholderText="Bordered"
|
PlaceholderText="Bordered"
|
||||||
ValueMemberBinding="{Binding Name,x:DataType=vm:StateData}" />
|
ValueMemberBinding="{Binding Name,DataType=vm:StateData}" />
|
||||||
<AutoCompleteBox
|
<AutoCompleteBox
|
||||||
Width="100"
|
Width="100"
|
||||||
Classes="Bordered"
|
Classes="Bordered"
|
||||||
IsEnabled="False"
|
IsEnabled="False"
|
||||||
ValueMemberBinding="{Binding Name,x:DataType=vm:StateData}" />
|
ValueMemberBinding="{Binding Name,DataType=vm:StateData}" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|||||||
@@ -10,84 +10,45 @@
|
|||||||
<DockPanel>
|
<DockPanel>
|
||||||
<ScrollViewer DockPanel.Dock="Right" Width="260">
|
<ScrollViewer DockPanel.Dock="Right" Width="260">
|
||||||
<StackPanel Margin="12" Spacing="8">
|
<StackPanel Margin="12" Spacing="8">
|
||||||
<TextBlock
|
<TextBlock Text="Configuration" FontWeight="SemiBold" FontSize="16"
|
||||||
Theme="{DynamicResource TitleTextBlock}"
|
Foreground="{DynamicResource SemiColorText0}" />
|
||||||
Classes="H4"
|
|
||||||
Text="Configuration" />
|
|
||||||
|
|
||||||
<CheckBox Name="ToggleDrawerCheck"
|
<Button Content="Toggle Drawer"
|
||||||
Content="Toggle Drawer" />
|
HorizontalAlignment="Stretch"
|
||||||
|
Click="OnToggleDrawer" />
|
||||||
|
|
||||||
|
<Separator />
|
||||||
|
|
||||||
<CheckBox Name="GestureCheck"
|
<CheckBox Name="GestureCheck"
|
||||||
Content="Gesture Enabled"
|
Content="Gesture Enabled"
|
||||||
IsChecked="True" />
|
IsChecked="True"
|
||||||
|
IsCheckedChanged="OnGestureChanged" />
|
||||||
<TextBlock Text="Behavior" FontSize="12" />
|
|
||||||
<ComboBox
|
<ComboBox SelectionChanged="OnLayoutChanged" >
|
||||||
Name="BehaviorComboBox"
|
<ComboBoxItem Content="CompactOverlay" />
|
||||||
HorizontalAlignment="Stretch"
|
<ComboBoxItem Content="CompactInline" />
|
||||||
SelectedIndex="0">
|
<ComboBoxItem Content="Split" />
|
||||||
<DrawerBehavior>Auto</DrawerBehavior>
|
<ComboBoxItem Content="Overlay" />
|
||||||
<DrawerBehavior>Flyout</DrawerBehavior>
|
|
||||||
<DrawerBehavior>Locked</DrawerBehavior>
|
|
||||||
<DrawerBehavior>Disabled</DrawerBehavior>
|
|
||||||
</ComboBox>
|
</ComboBox>
|
||||||
|
|
||||||
<TextBlock Text="Layout" FontSize="12" />
|
<Separator />
|
||||||
<ComboBox
|
|
||||||
Name="LayoutComboBox"
|
|
||||||
HorizontalAlignment="Stretch"
|
|
||||||
SelectedIndex="0">
|
|
||||||
<DrawerLayoutBehavior>Overlay</DrawerLayoutBehavior>
|
|
||||||
<DrawerLayoutBehavior>Split</DrawerLayoutBehavior>
|
|
||||||
<DrawerLayoutBehavior>CompactOverlay</DrawerLayoutBehavior>
|
|
||||||
<DrawerLayoutBehavior>CompactInline</DrawerLayoutBehavior>
|
|
||||||
</ComboBox>
|
|
||||||
|
|
||||||
<TextBlock Text="Placement" FontSize="12" />
|
<TextBlock Text="Status" FontWeight="SemiBold" FontSize="14" />
|
||||||
<ComboBox
|
<TextBlock Name="StatusText"
|
||||||
Name="PlacementComboBox"
|
Text="Drawer: Closed"
|
||||||
HorizontalAlignment="Stretch"
|
Opacity="0.7"
|
||||||
SelectedIndex="0">
|
TextWrapping="Wrap" />
|
||||||
<DrawerPlacement>Left</DrawerPlacement>
|
|
||||||
<DrawerPlacement>Right</DrawerPlacement>
|
|
||||||
<DrawerPlacement>Top</DrawerPlacement>
|
|
||||||
<DrawerPlacement>Bottom</DrawerPlacement>
|
|
||||||
</ComboBox>
|
|
||||||
|
|
||||||
<TextBlock Text="Compact Drawer Length" FontSize="12" />
|
|
||||||
<StackPanel Orientation="Horizontal" Spacing="8">
|
|
||||||
<Slider Name="CompactDrawerLengthSlider"
|
|
||||||
Minimum="0" Maximum="250" Value="80"
|
|
||||||
TickFrequency="1"
|
|
||||||
IsSnapToTickEnabled="True"
|
|
||||||
Width="150" />
|
|
||||||
<TextBlock Text="{Binding #CompactDrawerLengthSlider.Value}" />
|
|
||||||
</StackPanel>
|
|
||||||
<TextBlock Text="Drawer Length" FontSize="12" />
|
|
||||||
<StackPanel Orientation="Horizontal" Spacing="8">
|
|
||||||
<Slider Name="DrawerLengthSlider"
|
|
||||||
Minimum="150" Maximum="400" Value="260"
|
|
||||||
TickFrequency="1"
|
|
||||||
IsSnapToTickEnabled="True"
|
|
||||||
Width="150" />
|
|
||||||
<TextBlock Text="{Binding #DrawerLengthSlider.Value}" />
|
|
||||||
</StackPanel>
|
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</ScrollViewer>
|
</ScrollViewer>
|
||||||
|
|
||||||
<Border DockPanel.Dock="Right" Width="1" Background="{DynamicResource SemiColorBorder}" />
|
<Border DockPanel.Dock="Right" Width="1" Background="{DynamicResource SemiColorBackground0}" />
|
||||||
|
|
||||||
<DrawerPage Name="DemoDrawer"
|
<DrawerPage Name="DemoDrawer"
|
||||||
Margin="12"
|
Margin="12"
|
||||||
Header="First Look"
|
Header="First Look"
|
||||||
IsOpen="{Binding #ToggleDrawerCheck.IsChecked}"
|
DrawerLayoutBehavior="Overlay"
|
||||||
IsGestureEnabled="{Binding #GestureCheck.IsChecked}"
|
CompactDrawerLength="80"
|
||||||
DrawerBehavior="{Binding #BehaviorComboBox.SelectedItem}"
|
DrawerLength="250">
|
||||||
DrawerLayoutBehavior="{Binding #LayoutComboBox.SelectedItem}"
|
|
||||||
DrawerPlacement="{Binding #PlacementComboBox.SelectedItem}"
|
|
||||||
CompactDrawerLength="{Binding #CompactDrawerLengthSlider.Value}"
|
|
||||||
DrawerLength="{Binding #DrawerLengthSlider.Value}">
|
|
||||||
<DrawerPage.DrawerHeader>
|
<DrawerPage.DrawerHeader>
|
||||||
<TextBlock Text="Menu" Margin="16" FontSize="18" FontWeight="SemiBold" Foreground="{DynamicResource SemiColorPrimary}" />
|
<TextBlock Text="Menu" Margin="16" FontSize="18" FontWeight="SemiBold" Foreground="{DynamicResource SemiColorPrimary}" />
|
||||||
</DrawerPage.DrawerHeader>
|
</DrawerPage.DrawerHeader>
|
||||||
@@ -113,4 +74,4 @@
|
|||||||
</DrawerPage.Content>
|
</DrawerPage.Content>
|
||||||
</DrawerPage>
|
</DrawerPage>
|
||||||
</DockPanel>
|
</DockPanel>
|
||||||
</UserControl>
|
</UserControl>
|
||||||
@@ -1,6 +1,8 @@
|
|||||||
using System.Linq;
|
using System;
|
||||||
|
using System.Linq;
|
||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
using Avalonia.Input.GestureRecognizers;
|
using Avalonia.Input.GestureRecognizers;
|
||||||
|
using Avalonia.Interactivity;
|
||||||
using Avalonia.Layout;
|
using Avalonia.Layout;
|
||||||
|
|
||||||
namespace Semi.Avalonia.Demo.Pages;
|
namespace Semi.Avalonia.Demo.Pages;
|
||||||
@@ -13,6 +15,32 @@ public partial class DrawerPageDemo : UserControl
|
|||||||
EnableMouseSwipeGesture(DemoDrawer);
|
EnableMouseSwipeGesture(DemoDrawer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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)
|
private void OnMenuSelectionChanged(object? sender, SelectionChangedEventArgs e)
|
||||||
{
|
{
|
||||||
if (DrawerMenu.SelectedItem is ListBoxItem item)
|
if (DrawerMenu.SelectedItem is ListBoxItem item)
|
||||||
@@ -34,6 +62,11 @@ public partial class DrawerPageDemo : UserControl
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void UpdateStatus()
|
||||||
|
{
|
||||||
|
StatusText.Text = $"Drawer: {(DemoDrawer.IsOpen ? "Open" : "Closed")}";
|
||||||
|
}
|
||||||
|
|
||||||
private static void EnableMouseSwipeGesture(Control control)
|
private static void EnableMouseSwipeGesture(Control control)
|
||||||
{
|
{
|
||||||
var recognizer = control.GestureRecognizers
|
var recognizer = control.GestureRecognizers
|
||||||
@@ -42,4 +75,16 @@ public partial class DrawerPageDemo : UserControl
|
|||||||
|
|
||||||
recognizer?.IsMouseEnabled = true;
|
recognizer?.IsMouseEnabled = true;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
private void OnLayoutChanged(object? sender, SelectionChangedEventArgs e)
|
||||||
|
{
|
||||||
|
DemoDrawer.DrawerLayoutBehavior = (sender as ComboBox)?.SelectedIndex switch
|
||||||
|
{
|
||||||
|
0 => DrawerLayoutBehavior.CompactOverlay,
|
||||||
|
1 => DrawerLayoutBehavior.CompactInline,
|
||||||
|
2 => DrawerLayoutBehavior.Split,
|
||||||
|
3 => DrawerLayoutBehavior.Overlay,
|
||||||
|
_ => DrawerLayoutBehavior.CompactOverlay
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -12,16 +12,14 @@ public partial class PaletteDemo : UserControl
|
|||||||
public PaletteDemo()
|
public PaletteDemo()
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
this.DataContext = PaletteDemoViewModel.Instance.Value;
|
this.DataContext = new PaletteDemoViewModel();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override async void OnApplyTemplate(TemplateAppliedEventArgs e)
|
protected override async void OnApplyTemplate(TemplateAppliedEventArgs e)
|
||||||
{
|
{
|
||||||
base.OnApplyTemplate(e);
|
base.OnApplyTemplate(e);
|
||||||
if (this.DataContext is PaletteDemoViewModel vm && !vm.IsInitialized)
|
PaletteDemoViewModel? vm = this.DataContext as PaletteDemoViewModel;
|
||||||
{
|
await Dispatcher.UIThread.InvokeAsync(() => { vm?.InitializeResources(); });
|
||||||
await Dispatcher.UIThread.InvokeAsync(() => { vm?.InitializeResources(); });
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task Copy(object? o)
|
public async Task Copy(object? o)
|
||||||
@@ -33,4 +31,4 @@ public partial class PaletteDemo : UserControl
|
|||||||
await c.SetTextAsync(o.ToString());
|
await c.SetTextAsync(o.ToString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -50,7 +50,7 @@
|
|||||||
<TabbedPage Name="DemoTabs"
|
<TabbedPage Name="DemoTabs"
|
||||||
TabPlacement="Top"
|
TabPlacement="Top"
|
||||||
SelectionChanged="OnSelectionChanged">
|
SelectionChanged="OnSelectionChanged">
|
||||||
<ContentPage Icon="{DynamicResource SemiIconHome}" Header="Home">
|
<ContentPage Header="Home">
|
||||||
<StackPanel Margin="16" Spacing="8">
|
<StackPanel Margin="16" Spacing="8">
|
||||||
<TextBlock Text="Home Tab" FontSize="24" FontWeight="Bold" />
|
<TextBlock Text="Home Tab" FontSize="24" FontWeight="Bold" />
|
||||||
<TextBlock Text="Welcome to the Home tab. This is a TabbedPage sample."
|
<TextBlock Text="Welcome to the Home tab. This is a TabbedPage sample."
|
||||||
@@ -59,14 +59,14 @@
|
|||||||
TextWrapping="Wrap" Opacity="0.7" />
|
TextWrapping="Wrap" Opacity="0.7" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</ContentPage>
|
</ContentPage>
|
||||||
<ContentPage Icon="{DynamicResource SemiIconSearch}" Header="Search">
|
<ContentPage Header="Search">
|
||||||
<StackPanel Margin="16" Spacing="8">
|
<StackPanel Margin="16" Spacing="8">
|
||||||
<TextBlock Text="Search Tab" FontSize="24" FontWeight="Bold" />
|
<TextBlock Text="Search Tab" FontSize="24" FontWeight="Bold" />
|
||||||
<TextBox PlaceholderText="Type to search..." />
|
<TextBox PlaceholderText="Type to search..." />
|
||||||
<TextBlock Text="Search results will appear here." Opacity="0.7" />
|
<TextBlock Text="Search results will appear here." Opacity="0.7" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</ContentPage>
|
</ContentPage>
|
||||||
<ContentPage Icon="{DynamicResource SemiIconSetting}" Header="Settings">
|
<ContentPage Header="Settings">
|
||||||
<StackPanel Margin="16" Spacing="8">
|
<StackPanel Margin="16" Spacing="8">
|
||||||
<TextBlock Text="Settings Tab" FontSize="24" FontWeight="Bold" />
|
<TextBlock Text="Settings Tab" FontSize="24" FontWeight="Bold" />
|
||||||
<CheckBox Content="Enable notifications" />
|
<CheckBox Content="Enable notifications" />
|
||||||
|
|||||||
@@ -3,7 +3,8 @@
|
|||||||
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"
|
||||||
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
|
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
|
||||||
x:Class="Semi.Avalonia.Demo.Pages.WindowCustomizationsPage">
|
x:Class="Semi.Avalonia.Demo.Pages.WindowCustomizationsPage"
|
||||||
|
x:CompileBindings="True">
|
||||||
|
|
||||||
<StackPanel
|
<StackPanel
|
||||||
Spacing="10"
|
Spacing="10"
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -1,353 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Collections.ObjectModel;
|
|
||||||
using System.Globalization;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Windows.Input;
|
|
||||||
using Avalonia;
|
|
||||||
using Avalonia.Controls;
|
|
||||||
using Avalonia.Controls.ApplicationLifetimes;
|
|
||||||
using Avalonia.Layout;
|
|
||||||
using Avalonia.Styling;
|
|
||||||
using CommunityToolkit.Mvvm.ComponentModel;
|
|
||||||
using CommunityToolkit.Mvvm.Input;
|
|
||||||
using Semi.Avalonia.Demo.Pages;
|
|
||||||
|
|
||||||
namespace Semi.Avalonia.Demo.ViewModels;
|
|
||||||
|
|
||||||
public partial class MainViewModel : ObservableObject
|
|
||||||
{
|
|
||||||
private readonly Dictionary<string, NavigationItemViewModel> _itemsByTitle = new(StringComparer.Ordinal);
|
|
||||||
private readonly IReadOnlyList<NavigationSectionViewModel> _allSections;
|
|
||||||
|
|
||||||
[ObservableProperty] public partial string? SearchText { get; set; }
|
|
||||||
|
|
||||||
public string DocumentationUrl => "https://docs.irihi.tech/semi";
|
|
||||||
public string RepoUrl => "https://github.com/irihitech/Semi.Avalonia";
|
|
||||||
public IReadOnlyList<MenuItemViewModel> MenuItems { get; }
|
|
||||||
public IReadOnlyList<NavigationSectionViewModel> Sections { get; }
|
|
||||||
public ObservableCollection<NavigationSectionViewModel> FilteredSections { get; } = [];
|
|
||||||
public bool ShowEmptySearchState => FilteredSections.Count == 0 && !string.IsNullOrWhiteSpace(SearchText);
|
|
||||||
public ContentPage? CurrentPage => SelectedItem?.Page;
|
|
||||||
public string SelectedPageTitle => SelectedItem?.Title ?? "Overview";
|
|
||||||
|
|
||||||
public NavigationItemViewModel? SelectedItem
|
|
||||||
{
|
|
||||||
get;
|
|
||||||
private set
|
|
||||||
{
|
|
||||||
if (ReferenceEquals(field, value))
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var previous = field;
|
|
||||||
if (SetProperty(ref field, value))
|
|
||||||
{
|
|
||||||
previous?.IsSelected = false;
|
|
||||||
value?.IsSelected = true;
|
|
||||||
OnPropertyChanged(nameof(CurrentPage));
|
|
||||||
OnPropertyChanged(nameof(SelectedPageTitle));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public MainViewModel()
|
|
||||||
{
|
|
||||||
MenuItems =
|
|
||||||
[
|
|
||||||
new MenuItemViewModel
|
|
||||||
{
|
|
||||||
Header = "Theme",
|
|
||||||
Items =
|
|
||||||
[
|
|
||||||
new MenuItemViewModel { Header = "Auto", Command = FollowSystemThemeCommand },
|
|
||||||
new MenuItemViewModel { Header = "Aquatic", Command = SelectThemeCommand, CommandParameter = SemiTheme.Aquatic },
|
|
||||||
new MenuItemViewModel { Header = "Desert", Command = SelectThemeCommand, CommandParameter = SemiTheme.Desert },
|
|
||||||
new MenuItemViewModel { Header = "Dusk", Command = SelectThemeCommand, CommandParameter = SemiTheme.Dusk },
|
|
||||||
new MenuItemViewModel { Header = "NightSky", Command = SelectThemeCommand, CommandParameter = SemiTheme.NightSky },
|
|
||||||
]
|
|
||||||
},
|
|
||||||
new MenuItemViewModel
|
|
||||||
{
|
|
||||||
Header = "Locale",
|
|
||||||
Items =
|
|
||||||
[
|
|
||||||
new MenuItemViewModel { Header = "简体中文", Command = SelectLocaleCommand, CommandParameter = new CultureInfo("zh-CN") },
|
|
||||||
new MenuItemViewModel { Header = "English", Command = SelectLocaleCommand, CommandParameter = new CultureInfo("en-US") },
|
|
||||||
new MenuItemViewModel { Header = "日本語", Command = SelectLocaleCommand, CommandParameter = new CultureInfo("ja-JP") },
|
|
||||||
new MenuItemViewModel { Header = "한국어", Command = SelectLocaleCommand, CommandParameter = new CultureInfo("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 { Header = "Українська", Command = SelectLocaleCommand, CommandParameter = new CultureInfo("uk-UA") },
|
|
||||||
new MenuItemViewModel { Header = "Русский", Command = SelectLocaleCommand, CommandParameter = new CultureInfo("ru-RU") },
|
|
||||||
new MenuItemViewModel { Header = "繁體中文", Command = SelectLocaleCommand, CommandParameter = new CultureInfo("zh-TW") },
|
|
||||||
new MenuItemViewModel { Header = "Deutsch", Command = SelectLocaleCommand, CommandParameter = new CultureInfo("de-DE") },
|
|
||||||
new MenuItemViewModel { Header = "Español", Command = SelectLocaleCommand, CommandParameter = new CultureInfo("es-ES") },
|
|
||||||
new MenuItemViewModel { Header = "Polski", Command = SelectLocaleCommand, CommandParameter = new CultureInfo("pl-PL") },
|
|
||||||
new MenuItemViewModel { Header = "Français", Command = SelectLocaleCommand, CommandParameter = new CultureInfo("fr-FR") },
|
|
||||||
]
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
Sections = _allSections =
|
|
||||||
[
|
|
||||||
new NavigationSectionViewModel("Overview",
|
|
||||||
[
|
|
||||||
CreateItem("Overview", static () => new Overview()),
|
|
||||||
CreateItem("About Us", static () => new AboutUs()),
|
|
||||||
]),
|
|
||||||
new NavigationSectionViewModel("Resource Browser",
|
|
||||||
[
|
|
||||||
CreateItem("Palette", static () => new PaletteDemo()),
|
|
||||||
CreateItem("HighContrastTheme", static () => new HighContrastDemo()),
|
|
||||||
CreateItem("Variables", static () => new VariablesDemo()),
|
|
||||||
CreateItem("Icon", static () => new IconDemo()),
|
|
||||||
]),
|
|
||||||
new NavigationSectionViewModel("Separate Pack",
|
|
||||||
[
|
|
||||||
CreateItem("ColorPicker", static () => new ColorPickerDemo()),
|
|
||||||
CreateItem("DataGrid", static () => new DataGridDemo()),
|
|
||||||
]),
|
|
||||||
new NavigationSectionViewModel("Basic",
|
|
||||||
[
|
|
||||||
CreateItem("TextBlock", static () => new TextBlockDemo()),
|
|
||||||
CreateItem("SelectableTextBlock", static () => new SelectableTextBlockDemo()),
|
|
||||||
CreateItem("Border", static () => new BorderDemo()),
|
|
||||||
CreateItem("PathIcon", static () => new PathIconDemo()),
|
|
||||||
]),
|
|
||||||
new NavigationSectionViewModel("Button",
|
|
||||||
[
|
|
||||||
CreateItem("Button", static () => new ButtonDemo()),
|
|
||||||
CreateItem("HyperlinkButton", static () => new HyperlinkButtonDemo()),
|
|
||||||
CreateItem("CheckBox", static () => new CheckBoxDemo()),
|
|
||||||
CreateItem("RadioButton", static () => new RadioButtonDemo()),
|
|
||||||
CreateItem("ToggleSwitch", static () => new ToggleSwitchDemo()),
|
|
||||||
]),
|
|
||||||
new NavigationSectionViewModel("Input",
|
|
||||||
[
|
|
||||||
CreateItem("TextBox", static () => new TextBoxDemo()),
|
|
||||||
CreateItem("AutoCompleteBox", static () => new AutoCompleteBoxDemo()),
|
|
||||||
CreateItem("ComboBox", static () => new ComboBoxDemo()),
|
|
||||||
CreateItem("ButtonSpinner", static () => new ButtonSpinnerDemo()),
|
|
||||||
CreateItem("NumericUpDown", static () => new NumericUpDownDemo()),
|
|
||||||
CreateItem("Slider", static () => new SliderDemo()),
|
|
||||||
CreateItem("ManagedFileChooser", static () => new ManagedFileChooserDemo()),
|
|
||||||
]),
|
|
||||||
new NavigationSectionViewModel("Date/Time",
|
|
||||||
[
|
|
||||||
CreateItem("Calendar", static () => new CalendarDemo()),
|
|
||||||
CreateItem("CalendarDatePicker", static () => new CalendarDatePickerDemo()),
|
|
||||||
CreateItem("DatePicker", static () => new DatePickerDemo()),
|
|
||||||
CreateItem("TimePicker", static () => new TimePickerDemo()),
|
|
||||||
]),
|
|
||||||
new NavigationSectionViewModel("Navigation",
|
|
||||||
[
|
|
||||||
CreateItem("ContentPage", static () => new ContentPageDemo()),
|
|
||||||
CreateItem("CarouselPage", static () => new CarouselPageDemo()),
|
|
||||||
CreateItem("DrawerPage", static () => new DrawerPageDemo()),
|
|
||||||
CreateItem("NavigationPage", static () => new NavigationPageDemo()),
|
|
||||||
CreateItem("TabbedPage", static () => new TabbedPageDemo()),
|
|
||||||
CreateItem("TabControl", static () => new TabControlDemo()),
|
|
||||||
CreateItem("TabStrip", static () => new TabStripDemo()),
|
|
||||||
CreateItem("TreeView", static () => new TreeViewDemo()),
|
|
||||||
]),
|
|
||||||
new NavigationSectionViewModel("Show",
|
|
||||||
[
|
|
||||||
CreateItem("Carousel", static () => new CarouselDemo()),
|
|
||||||
CreateItem("PipsPager", static () => new PipsPagerDemo()),
|
|
||||||
CreateItem("Expander", static () => new ExpanderDemo()),
|
|
||||||
CreateItem("Flyout", static () => new FlyoutDemo()),
|
|
||||||
CreateItem("HeaderedContentControl", static () => new HeaderedContentControlDemo()),
|
|
||||||
CreateItem("Label", static () => new LabelDemo()),
|
|
||||||
CreateItem("ListBox", static () => new ListBoxDemo()),
|
|
||||||
CreateItem("SplitView", static () => new SplitViewDemo()),
|
|
||||||
CreateItem("ToolTip", static () => new ToolTipDemo()),
|
|
||||||
]),
|
|
||||||
new NavigationSectionViewModel("Feedback",
|
|
||||||
[
|
|
||||||
CreateItem("DataValidationErrors", static () => new DataValidationErrorsDemo()),
|
|
||||||
CreateItem("Notification", static () => new NotificationDemo()),
|
|
||||||
CreateItem("ProgressBar", static () => new ProgressBarDemo()),
|
|
||||||
CreateItem("RefreshContainer", static () => new RefreshContainerDemo()),
|
|
||||||
]),
|
|
||||||
new NavigationSectionViewModel("Other",
|
|
||||||
[
|
|
||||||
CreateItem("CommandBar", static () => new CommandBarDemo()),
|
|
||||||
CreateItem("GridSplitter", static () => new GridSplitterDemo()),
|
|
||||||
CreateItem("Menu", static () => new MenuDemo()),
|
|
||||||
CreateItem("ScrollViewer", static () => new ScrollViewerDemo()),
|
|
||||||
CreateItem("ThemeVariantScope", static () => new ThemeVariantDemo()),
|
|
||||||
CreateItem("WindowCustomizationsPage", static () => new WindowCustomizationsPage()),
|
|
||||||
]),
|
|
||||||
];
|
|
||||||
|
|
||||||
SelectedItem = Sections[0].Items[0];
|
|
||||||
RefreshFilteredSections();
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool TryNavigateTo(string title)
|
|
||||||
{
|
|
||||||
if (_itemsByTitle.TryGetValue(title, out var item))
|
|
||||||
{
|
|
||||||
SelectedItem = item;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
partial void OnSearchTextChanged(string? value)
|
|
||||||
{
|
|
||||||
RefreshFilteredSections();
|
|
||||||
}
|
|
||||||
|
|
||||||
[RelayCommand]
|
|
||||||
private void NavigateTo(object? parameter)
|
|
||||||
{
|
|
||||||
if (parameter is NavigationItemViewModel item)
|
|
||||||
{
|
|
||||||
SelectedItem = item;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[RelayCommand]
|
|
||||||
private void FollowSystemTheme()
|
|
||||||
{
|
|
||||||
Application.Current?.RegisterFollowSystemTheme();
|
|
||||||
}
|
|
||||||
|
|
||||||
[RelayCommand]
|
|
||||||
private void ToggleTheme()
|
|
||||||
{
|
|
||||||
var app = Application.Current;
|
|
||||||
if (app is null) return;
|
|
||||||
var theme = app.ActualThemeVariant;
|
|
||||||
app.RequestedThemeVariant = theme == ThemeVariant.Dark ? ThemeVariant.Light : ThemeVariant.Dark;
|
|
||||||
app.UnregisterFollowSystemTheme();
|
|
||||||
}
|
|
||||||
|
|
||||||
[RelayCommand]
|
|
||||||
private void SelectTheme(object? obj)
|
|
||||||
{
|
|
||||||
var app = Application.Current;
|
|
||||||
if (app is null) return;
|
|
||||||
app.RequestedThemeVariant = obj as ThemeVariant;
|
|
||||||
app.UnregisterFollowSystemTheme();
|
|
||||||
}
|
|
||||||
|
|
||||||
[RelayCommand]
|
|
||||||
private void SelectLocale(object? obj)
|
|
||||||
{
|
|
||||||
var app = Application.Current;
|
|
||||||
if (app is null) return;
|
|
||||||
SemiTheme.OverrideLocaleResources(app, obj as CultureInfo);
|
|
||||||
}
|
|
||||||
|
|
||||||
[RelayCommand]
|
|
||||||
private static async Task OpenUrl(string url)
|
|
||||||
{
|
|
||||||
var launcher = ResolveDefaultTopLevel()?.Launcher;
|
|
||||||
if (launcher is not null)
|
|
||||||
{
|
|
||||||
await launcher.LaunchUriAsync(new Uri(url));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private NavigationItemViewModel CreateItem(string title, Func<Control> contentFactory)
|
|
||||||
{
|
|
||||||
var item = new NavigationItemViewModel(title, NavigateToCommand, contentFactory);
|
|
||||||
_itemsByTitle.Add(title, item);
|
|
||||||
return item;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void RefreshFilteredSections()
|
|
||||||
{
|
|
||||||
var search = string.IsNullOrWhiteSpace(SearchText) ? string.Empty : SearchText.Trim();
|
|
||||||
|
|
||||||
FilteredSections.Clear();
|
|
||||||
|
|
||||||
foreach (var section in _allSections)
|
|
||||||
{
|
|
||||||
if (search.Length == 0 ||
|
|
||||||
section.Header.Contains(search, StringComparison.InvariantCultureIgnoreCase))
|
|
||||||
{
|
|
||||||
FilteredSections.Add(section);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
var matchedItems = section.Items
|
|
||||||
.Where(item => item.Title.Contains(search, StringComparison.InvariantCultureIgnoreCase))
|
|
||||||
.ToArray();
|
|
||||||
|
|
||||||
if (matchedItems.Length > 0)
|
|
||||||
{
|
|
||||||
FilteredSections.Add(new NavigationSectionViewModel(section.Header, matchedItems));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
OnPropertyChanged(nameof(ShowEmptySearchState));
|
|
||||||
}
|
|
||||||
|
|
||||||
private static TopLevel? ResolveDefaultTopLevel()
|
|
||||||
{
|
|
||||||
return Application.Current?.ApplicationLifetime switch
|
|
||||||
{
|
|
||||||
IClassicDesktopStyleApplicationLifetime desktopLifetime => desktopLifetime.MainWindow,
|
|
||||||
ISingleViewApplicationLifetime singleView => TopLevel.GetTopLevel(singleView.MainView),
|
|
||||||
_ => null
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public class NavigationSectionViewModel
|
|
||||||
{
|
|
||||||
public NavigationSectionViewModel(string header, IReadOnlyList<NavigationItemViewModel> items)
|
|
||||||
{
|
|
||||||
Header = header;
|
|
||||||
Items = items;
|
|
||||||
}
|
|
||||||
|
|
||||||
public string Header { get; }
|
|
||||||
|
|
||||||
public IReadOnlyList<NavigationItemViewModel> Items { get; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public partial class NavigationItemViewModel : ObservableObject
|
|
||||||
{
|
|
||||||
private readonly Func<Control> _contentFactory;
|
|
||||||
|
|
||||||
public NavigationItemViewModel(string title, ICommand navigateCommand, Func<Control> contentFactory)
|
|
||||||
{
|
|
||||||
Title = title;
|
|
||||||
NavigateCommand = navigateCommand;
|
|
||||||
_contentFactory = contentFactory;
|
|
||||||
}
|
|
||||||
|
|
||||||
public string Title { get; }
|
|
||||||
|
|
||||||
public ICommand NavigateCommand { get; }
|
|
||||||
|
|
||||||
public ContentPage Page => field ??= new ContentPage
|
|
||||||
{
|
|
||||||
Header = Title,
|
|
||||||
Background = null,
|
|
||||||
HorizontalContentAlignment = HorizontalAlignment.Stretch,
|
|
||||||
VerticalContentAlignment = VerticalAlignment.Stretch,
|
|
||||||
Content = _contentFactory()
|
|
||||||
};
|
|
||||||
|
|
||||||
[ObservableProperty] public partial bool IsSelected { get; set; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public class MenuItemViewModel
|
|
||||||
{
|
|
||||||
public string? Header { get; set; }
|
|
||||||
public ICommand? Command { get; set; }
|
|
||||||
public object? CommandParameter { get; set; }
|
|
||||||
public IList<MenuItemViewModel>? Items { get; set; }
|
|
||||||
}
|
|
||||||
@@ -14,8 +14,6 @@ namespace Semi.Avalonia.Demo.ViewModels;
|
|||||||
|
|
||||||
public partial class PaletteDemoViewModel : ObservableObject
|
public partial class PaletteDemoViewModel : ObservableObject
|
||||||
{
|
{
|
||||||
public static Lazy<PaletteDemoViewModel> Instance { get; } = new(() => new PaletteDemoViewModel());
|
|
||||||
public bool IsInitialized { get; private set; }
|
|
||||||
private readonly string[] _predefinedColorNames =
|
private readonly string[] _predefinedColorNames =
|
||||||
[
|
[
|
||||||
"Red", "Pink", "Purple", "Violet", "Indigo",
|
"Red", "Pink", "Purple", "Violet", "Indigo",
|
||||||
@@ -46,7 +44,6 @@ public partial class PaletteDemoViewModel : ObservableObject
|
|||||||
InitializePalette();
|
InitializePalette();
|
||||||
InitializeFunctionalColors();
|
InitializeFunctionalColors();
|
||||||
InitializeShadows();
|
InitializeShadows();
|
||||||
IsInitialized = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void InitializePalette()
|
private void InitializePalette()
|
||||||
@@ -292,4 +289,4 @@ public partial class ShadowGroupViewModel : ObservableObject
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -4,142 +4,283 @@
|
|||||||
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"
|
||||||
xmlns:vm="clr-namespace:Semi.Avalonia.Demo.ViewModels"
|
xmlns:pages="using:Semi.Avalonia.Demo.Pages"
|
||||||
|
xmlns:views="clr-namespace:Semi.Avalonia.Demo.Views"
|
||||||
d:DesignHeight="450"
|
d:DesignHeight="450"
|
||||||
d:DesignWidth="800"
|
d:DesignWidth="800"
|
||||||
x:DataType="vm:MainViewModel"
|
x:DataType="views:MainViewModel"
|
||||||
mc:Ignorable="d">
|
mc:Ignorable="d">
|
||||||
<UserControl.Styles>
|
<UserControl.Resources>
|
||||||
<Style Selector="TextBlock.NavSectionHeader">
|
<ControlTheme x:Key="CategoryTabItem" TargetType="TabItem">
|
||||||
<Setter Property="Margin" Value="12,10,12,2" />
|
<Setter Property="IsEnabled" Value="False" />
|
||||||
<Setter Property="FontSize" Value="12" />
|
<Setter Property="Template">
|
||||||
<Setter Property="FontWeight" Value="Bold" />
|
<ControlTemplate TargetType="TabItem">
|
||||||
<Setter Property="Foreground" Value="{DynamicResource SemiColorText1}" />
|
|
||||||
</Style>
|
|
||||||
|
|
||||||
<Style Selector="Border.NavItemHost">
|
|
||||||
<Setter Property="Margin" Value="6,0" />
|
|
||||||
<Setter Property="Background" Value="Transparent" />
|
|
||||||
</Style>
|
|
||||||
|
|
||||||
<Style Selector="Border.NavItemHost.Selected">
|
|
||||||
<Setter Property="Background" Value="{DynamicResource SemiColorPrimaryLight}" />
|
|
||||||
</Style>
|
|
||||||
|
|
||||||
<Style Selector="Button.NavItem">
|
|
||||||
<Setter Property="Theme" Value="{DynamicResource BorderlessButton}" />
|
|
||||||
<Setter Property="HorizontalAlignment" Value="Stretch" />
|
|
||||||
<Setter Property="HorizontalContentAlignment" Value="Left" />
|
|
||||||
<Setter Property="Padding" Value="12,8" />
|
|
||||||
<Setter Property="Foreground" Value="{DynamicResource SemiColorText0}" />
|
|
||||||
</Style>
|
|
||||||
<Style Selector="Button.NavItem.Selected">
|
|
||||||
<Setter Property="Foreground" Value="{DynamicResource SemiColorPrimary}" />
|
|
||||||
</Style>
|
|
||||||
</UserControl.Styles>
|
|
||||||
|
|
||||||
<DrawerPage
|
|
||||||
Name="MainDrawer"
|
|
||||||
Margin="8"
|
|
||||||
Background="Transparent"
|
|
||||||
Content="{Binding CurrentPage}"
|
|
||||||
DrawerLayoutBehavior="{OnFormFactor Split, Mobile=Overlay}"
|
|
||||||
DrawerLength="300"
|
|
||||||
IsOpen="True">
|
|
||||||
<DrawerPage.Header>
|
|
||||||
<StackPanel Orientation="Horizontal" Spacing="8">
|
|
||||||
<SelectableTextBlock
|
|
||||||
VerticalAlignment="Center"
|
|
||||||
Classes="H6"
|
|
||||||
Text="Semi Avalonia"
|
|
||||||
Theme="{DynamicResource TitleSelectableTextBlock}" />
|
|
||||||
<TextBlock VerticalAlignment="Center" Text="/" />
|
|
||||||
<SelectableTextBlock
|
|
||||||
VerticalAlignment="Center"
|
|
||||||
Classes="Secondary"
|
|
||||||
Text="{Binding SelectedPageTitle}" />
|
|
||||||
</StackPanel>
|
|
||||||
</DrawerPage.Header>
|
|
||||||
|
|
||||||
<DrawerPage.DrawerHeader>
|
|
||||||
<TextBox
|
|
||||||
Margin="8"
|
|
||||||
Classes="ClearButton"
|
|
||||||
PlaceholderText="Search demos or sections"
|
|
||||||
Text="{Binding SearchText}" />
|
|
||||||
</DrawerPage.DrawerHeader>
|
|
||||||
|
|
||||||
<DrawerPage.Drawer>
|
|
||||||
<ScrollViewer HorizontalScrollBarVisibility="Disabled">
|
|
||||||
<StackPanel>
|
|
||||||
<ItemsControl ItemsSource="{Binding FilteredSections}">
|
|
||||||
<ItemsControl.ItemTemplate>
|
|
||||||
<DataTemplate DataType="vm:NavigationSectionViewModel">
|
|
||||||
<StackPanel Margin="0,0,0,10">
|
|
||||||
<TextBlock Classes="NavSectionHeader" Text="{Binding Header}" />
|
|
||||||
<ItemsControl ItemsSource="{Binding Items}">
|
|
||||||
<ItemsControl.ItemTemplate>
|
|
||||||
<DataTemplate DataType="vm:NavigationItemViewModel">
|
|
||||||
<Border Classes="NavItemHost" Classes.Selected="{Binding IsSelected}">
|
|
||||||
<Button
|
|
||||||
Classes="NavItem"
|
|
||||||
FontWeight="Normal"
|
|
||||||
Classes.Selected="{Binding IsSelected}"
|
|
||||||
Command="{Binding NavigateCommand}"
|
|
||||||
CommandParameter="{Binding}"
|
|
||||||
Content="{Binding Title}" />
|
|
||||||
</Border>
|
|
||||||
</DataTemplate>
|
|
||||||
</ItemsControl.ItemTemplate>
|
|
||||||
</ItemsControl>
|
|
||||||
</StackPanel>
|
|
||||||
</DataTemplate>
|
|
||||||
</ItemsControl.ItemTemplate>
|
|
||||||
</ItemsControl>
|
|
||||||
|
|
||||||
<TextBlock
|
<TextBlock
|
||||||
Margin="16,12,16,0"
|
Margin="4"
|
||||||
Foreground="{DynamicResource SemiColorText1}"
|
FontSize="12"
|
||||||
IsVisible="{Binding ShowEmptySearchState}"
|
FontWeight="Bold"
|
||||||
Text="No demo pages matched your search." />
|
Text="{TemplateBinding Header}" />
|
||||||
|
</ControlTemplate>
|
||||||
|
</Setter>
|
||||||
|
<Style Selector="^:disabled /template/ TextBlock">
|
||||||
|
<Setter Property="Foreground" Value="{DynamicResource SemiColorText1}" />
|
||||||
|
</Style>
|
||||||
|
</ControlTheme>
|
||||||
|
</UserControl.Resources>
|
||||||
|
<Grid RowDefinitions="Auto, *">
|
||||||
|
<Border
|
||||||
|
Grid.Row="0"
|
||||||
|
Margin="8"
|
||||||
|
Padding="12,4"
|
||||||
|
Theme="{DynamicResource CardBorder}">
|
||||||
|
<Panel>
|
||||||
|
<StackPanel Orientation="Horizontal" Spacing="8">
|
||||||
|
<ToggleSwitch
|
||||||
|
Name="ExpandButton"
|
||||||
|
Content="{StaticResource SemiIconSidebar}"
|
||||||
|
Theme="{DynamicResource IconBorderlessToggleSwitch}" />
|
||||||
|
<SelectableTextBlock
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
Classes="H6"
|
||||||
|
Text="Semi Avalonia"
|
||||||
|
Theme="{DynamicResource TitleSelectableTextBlock}" />
|
||||||
|
<SelectableTextBlock VerticalAlignment="Center" Text="/" />
|
||||||
|
<SelectableTextBlock
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
Classes="Secondary"
|
||||||
|
Text="{ReflectionBinding #tab.SelectedItem.Header}" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</ScrollViewer>
|
<StackPanel HorizontalAlignment="Right" Orientation="Horizontal">
|
||||||
</DrawerPage.Drawer>
|
<Button
|
||||||
|
Command="{Binding OpenUrlCommand}"
|
||||||
|
CommandParameter="{Binding DocumentationUrl}"
|
||||||
|
Content="{StaticResource SemiIconGlobe}"
|
||||||
|
Theme="{DynamicResource IconBorderlessButton}" />
|
||||||
|
|
||||||
<DrawerPage.DrawerFooter>
|
<Button
|
||||||
<StackPanel HorizontalAlignment="Right" Orientation="Horizontal">
|
Command="{Binding OpenUrlCommand}"
|
||||||
<Button
|
CommandParameter="{Binding RepoUrl}"
|
||||||
Command="{Binding OpenUrlCommand}"
|
Content="{StaticResource SemiIconGithubLogo}"
|
||||||
CommandParameter="{Binding DocumentationUrl}"
|
Theme="{DynamicResource IconBorderlessButton}" />
|
||||||
Content="{StaticResource SemiIconGlobe}"
|
|
||||||
Theme="{DynamicResource IconBorderlessButton}" />
|
|
||||||
|
|
||||||
<Button
|
<ToggleSwitch
|
||||||
Command="{Binding OpenUrlCommand}"
|
Command="{Binding ToggleThemeCommand}"
|
||||||
CommandParameter="{Binding RepoUrl}"
|
OffContent="{StaticResource SemiIconSun}"
|
||||||
Content="{StaticResource SemiIconGithubLogo}"
|
OnContent="{StaticResource SemiIconMoon}"
|
||||||
Theme="{DynamicResource IconBorderlessButton}" />
|
Theme="{DynamicResource IconBorderlessToggleSwitch}" />
|
||||||
|
|
||||||
<ToggleSwitch
|
<Button Content="{StaticResource SemiIconMenu}" Theme="{DynamicResource IconBorderlessButton}">
|
||||||
Command="{Binding ToggleThemeCommand}"
|
<Button.Flyout>
|
||||||
OffContent="{StaticResource SemiIconSun}"
|
<MenuFlyout ItemsSource="{Binding MenuItems}" Placement="Bottom" />
|
||||||
OnContent="{StaticResource SemiIconMoon}"
|
</Button.Flyout>
|
||||||
Theme="{DynamicResource IconBorderlessToggleSwitch}" />
|
<Button.Styles>
|
||||||
|
<Style x:DataType="views:MenuItemViewModel" Selector="MenuItem">
|
||||||
<Button Content="{StaticResource SemiIconMenu}" Theme="{DynamicResource IconBorderlessButton}">
|
<Setter Property="Header" Value="{Binding Header}" />
|
||||||
<Button.Flyout>
|
<Setter Property="ItemsSource" Value="{Binding Items}" />
|
||||||
<MenuFlyout ItemsSource="{Binding MenuItems}" Placement="Bottom" />
|
<Setter Property="Command" Value="{Binding Command}" />
|
||||||
</Button.Flyout>
|
<Setter Property="CommandParameter" Value="{Binding CommandParameter}" />
|
||||||
<Button.Styles>
|
</Style>
|
||||||
<Style x:DataType="vm:MenuItemViewModel" Selector="MenuItem">
|
</Button.Styles>
|
||||||
<Setter Property="Header" Value="{Binding Header}" />
|
</Button>
|
||||||
<Setter Property="ItemsSource" Value="{Binding Items}" />
|
</StackPanel>
|
||||||
<Setter Property="Command" Value="{Binding Command}" />
|
</Panel>
|
||||||
<Setter Property="CommandParameter" Value="{Binding CommandParameter}" />
|
</Border>
|
||||||
</Style>
|
<TabControl
|
||||||
</Button.Styles>
|
Name="tab"
|
||||||
</Button>
|
Grid.Row="1"
|
||||||
</StackPanel>
|
Margin="8"
|
||||||
</DrawerPage.DrawerFooter>
|
Padding="20,0,0,0"
|
||||||
</DrawerPage>
|
Classes.Dismiss="{Binding #ExpandButton.IsChecked}"
|
||||||
</UserControl>
|
TabStripPlacement="Left"
|
||||||
|
Theme="{DynamicResource ScrollLineTabControl}">
|
||||||
|
<TabControl.Styles>
|
||||||
|
<Style Selector=".Dismiss /template/ ScrollViewer#PART_ScrollViewer">
|
||||||
|
<Setter Property="IsVisible" Value="False" />
|
||||||
|
</Style>
|
||||||
|
</TabControl.Styles>
|
||||||
|
<TabControl.ItemsPanel>
|
||||||
|
<ItemsPanelTemplate>
|
||||||
|
<StackPanel />
|
||||||
|
</ItemsPanelTemplate>
|
||||||
|
</TabControl.ItemsPanel>
|
||||||
|
<TabItem Header="Overview">
|
||||||
|
<pages:Overview />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem Header="About Us">
|
||||||
|
<pages:AboutUs />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem Header="Resource Browser" Theme="{DynamicResource CategoryTabItem}" />
|
||||||
|
<TabItem Header="Palette">
|
||||||
|
<pages:PaletteDemo />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem Header="HighContrastTheme">
|
||||||
|
<pages:HighContrastDemo />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem Header="Variables">
|
||||||
|
<pages:VariablesDemo />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem Header="Icon">
|
||||||
|
<pages:IconDemo />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem Header="Separate Pack" Theme="{DynamicResource CategoryTabItem}" />
|
||||||
|
<TabItem Header="ColorPicker">
|
||||||
|
<pages:ColorPickerDemo />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem Header="DataGrid">
|
||||||
|
<pages:DataGridDemo />
|
||||||
|
</TabItem>
|
||||||
|
<!-- <TabItem Header="TreeDataGrid"> -->
|
||||||
|
<!-- <pages:TreeDataGridDemo /> -->
|
||||||
|
<!-- </TabItem> -->
|
||||||
|
<TabItem Header="Basic" Theme="{DynamicResource CategoryTabItem}" />
|
||||||
|
<TabItem Header="TextBlock">
|
||||||
|
<pages:TextBlockDemo />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem Header="SelectableTextBlock">
|
||||||
|
<pages:SelectableTextBlockDemo />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem Header="Border">
|
||||||
|
<pages:BorderDemo />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem Header="PathIcon">
|
||||||
|
<pages:PathIconDemo />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem Header="Button" Theme="{DynamicResource CategoryTabItem}" />
|
||||||
|
<TabItem Header="Button">
|
||||||
|
<pages:ButtonDemo />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem Header="HyperlinkButton">
|
||||||
|
<pages:HyperlinkButtonDemo />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem Header="CheckBox">
|
||||||
|
<pages:CheckBoxDemo />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem Header="RadioButton">
|
||||||
|
<pages:RadioButtonDemo />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem Header="ToggleSwitch">
|
||||||
|
<pages:ToggleSwitchDemo />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem Header="Input" Theme="{DynamicResource CategoryTabItem}" />
|
||||||
|
<TabItem Header="TextBox">
|
||||||
|
<pages:TextBoxDemo />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem Header="AutoCompleteBox">
|
||||||
|
<pages:AutoCompleteBoxDemo />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem Header="ComboBox">
|
||||||
|
<pages:ComboBoxDemo />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem Header="ButtonSpinner">
|
||||||
|
<pages:ButtonSpinnerDemo />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem Header="NumericUpDown">
|
||||||
|
<pages:NumericUpDownDemo />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem Header="Slider">
|
||||||
|
<pages:SliderDemo />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem Header="ManagedFileChooser">
|
||||||
|
<pages:ManagedFileChooserDemo />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem Header="Date/Time" Theme="{DynamicResource CategoryTabItem}" />
|
||||||
|
<TabItem Header="Calendar">
|
||||||
|
<pages:CalendarDemo />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem Header="CalendarDatePicker">
|
||||||
|
<pages:CalendarDatePickerDemo />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem Header="DatePicker">
|
||||||
|
<pages:DatePickerDemo />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem Header="TimePicker">
|
||||||
|
<pages:TimePickerDemo />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem Header="Navigation" Theme="{DynamicResource CategoryTabItem}" />
|
||||||
|
<TabItem Header="ContentPage">
|
||||||
|
<pages:ContentPageDemo />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem Header="CarouselPage">
|
||||||
|
<pages:CarouselPageDemo />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem Header="DrawerPage">
|
||||||
|
<pages:DrawerPageDemo />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem Header="NavigationPage">
|
||||||
|
<pages:NavigationPageDemo />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem Header="TabbedPage">
|
||||||
|
<pages:TabbedPageDemo />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem Header="TabControl">
|
||||||
|
<pages:TabControlDemo />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem Header="TabStrip">
|
||||||
|
<pages:TabStripDemo />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem Header="TreeView">
|
||||||
|
<pages:TreeViewDemo />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem Header="Show" Theme="{DynamicResource CategoryTabItem}" />
|
||||||
|
<TabItem Header="Carousel">
|
||||||
|
<pages:CarouselDemo />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem Header="PipsPager">
|
||||||
|
<pages:PipsPagerDemo />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem Header="Expander">
|
||||||
|
<pages:ExpanderDemo />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem Header="Flyout">
|
||||||
|
<pages:FlyoutDemo />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem Header="HeaderedContentControl">
|
||||||
|
<pages:HeaderedContentControlDemo />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem Header="Label">
|
||||||
|
<pages:LabelDemo />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem Header="ListBox">
|
||||||
|
<pages:ListBoxDemo />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem Header="SplitView">
|
||||||
|
<pages:SplitViewDemo />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem Header="ToolTip">
|
||||||
|
<pages:ToolTipDemo />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem Header="Feedback" Theme="{DynamicResource CategoryTabItem}" />
|
||||||
|
<TabItem Header="DataValidationErrors">
|
||||||
|
<pages:DataValidationErrorsDemo />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem Header="Notification">
|
||||||
|
<pages:NotificationDemo />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem Header="ProgressBar">
|
||||||
|
<pages:ProgressBarDemo />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem Header="RefreshContainer">
|
||||||
|
<pages:RefreshContainerDemo />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem Header="Other" Theme="{DynamicResource CategoryTabItem}" />
|
||||||
|
<TabItem Header="CommandBar">
|
||||||
|
<pages:CommandBarDemo />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem Header="GridSplitter">
|
||||||
|
<pages:GridSplitterDemo />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem Header="Menu">
|
||||||
|
<pages:MenuDemo />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem Header="ScrollViewer">
|
||||||
|
<pages:ScrollViewerDemo />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem Header="ThemeVariantScope">
|
||||||
|
<pages:ThemeVariantDemo />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem Header="WindowCustomizationsPage">
|
||||||
|
<pages:WindowCustomizationsPage />
|
||||||
|
</TabItem>
|
||||||
|
</TabControl>
|
||||||
|
</Grid>
|
||||||
|
</UserControl>
|
||||||
@@ -1,22 +1,250 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Globalization;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Windows.Input;
|
||||||
|
using Avalonia;
|
||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
|
using Avalonia.Controls.ApplicationLifetimes;
|
||||||
|
using Avalonia.Styling;
|
||||||
|
using CommunityToolkit.Mvvm.ComponentModel;
|
||||||
|
using CommunityToolkit.Mvvm.Input;
|
||||||
using CommunityToolkit.Mvvm.Messaging;
|
using CommunityToolkit.Mvvm.Messaging;
|
||||||
using Semi.Avalonia.Demo.ViewModels;
|
|
||||||
|
|
||||||
namespace Semi.Avalonia.Demo.Views;
|
namespace Semi.Avalonia.Demo.Views;
|
||||||
|
|
||||||
public partial class MainView : UserControl
|
public partial class MainView : UserControl
|
||||||
{
|
{
|
||||||
private readonly MainViewModel _viewModel;
|
|
||||||
|
|
||||||
public MainView()
|
public MainView()
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
DataContext = _viewModel = new MainViewModel();
|
this.DataContext = new MainViewModel();
|
||||||
WeakReferenceMessenger.Default.Register<string, string>(this, "JumpTo", MessageHandler);
|
WeakReferenceMessenger.Default.Register<string, string>(this, "JumpTo", MessageHandler);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void MessageHandler(object _, string message)
|
private void MessageHandler(object _, string message)
|
||||||
{
|
{
|
||||||
_viewModel.TryNavigateTo(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;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public partial class MainViewModel : ObservableObject
|
||||||
|
{
|
||||||
|
public string DocumentationUrl => "https://docs.irihi.tech/semi";
|
||||||
|
public string RepoUrl => "https://github.com/irihitech/Semi.Avalonia";
|
||||||
|
public IReadOnlyList<MenuItemViewModel> MenuItems { get; }
|
||||||
|
|
||||||
|
public MainViewModel()
|
||||||
|
{
|
||||||
|
MenuItems =
|
||||||
|
[
|
||||||
|
new MenuItemViewModel
|
||||||
|
{
|
||||||
|
Header = "Theme",
|
||||||
|
Items =
|
||||||
|
[
|
||||||
|
new MenuItemViewModel
|
||||||
|
{
|
||||||
|
Header = "Auto",
|
||||||
|
Command = FollowSystemThemeCommand
|
||||||
|
},
|
||||||
|
new MenuItemViewModel
|
||||||
|
{
|
||||||
|
Header = "Aquatic",
|
||||||
|
Command = SelectThemeCommand,
|
||||||
|
CommandParameter = SemiTheme.Aquatic
|
||||||
|
},
|
||||||
|
new MenuItemViewModel
|
||||||
|
{
|
||||||
|
Header = "Desert",
|
||||||
|
Command = SelectThemeCommand,
|
||||||
|
CommandParameter = SemiTheme.Desert
|
||||||
|
},
|
||||||
|
new MenuItemViewModel
|
||||||
|
{
|
||||||
|
Header = "Dusk",
|
||||||
|
Command = SelectThemeCommand,
|
||||||
|
CommandParameter = SemiTheme.Dusk
|
||||||
|
},
|
||||||
|
new MenuItemViewModel
|
||||||
|
{
|
||||||
|
Header = "NightSky",
|
||||||
|
Command = SelectThemeCommand,
|
||||||
|
CommandParameter = SemiTheme.NightSky
|
||||||
|
},
|
||||||
|
]
|
||||||
|
},
|
||||||
|
new MenuItemViewModel
|
||||||
|
{
|
||||||
|
Header = "Locale",
|
||||||
|
Items =
|
||||||
|
[
|
||||||
|
new MenuItemViewModel
|
||||||
|
{
|
||||||
|
Header = "简体中文",
|
||||||
|
Command = SelectLocaleCommand,
|
||||||
|
CommandParameter = new CultureInfo("zh-CN")
|
||||||
|
},
|
||||||
|
new MenuItemViewModel
|
||||||
|
{
|
||||||
|
Header = "English",
|
||||||
|
Command = SelectLocaleCommand,
|
||||||
|
CommandParameter = new CultureInfo("en-US")
|
||||||
|
},
|
||||||
|
new MenuItemViewModel
|
||||||
|
{
|
||||||
|
Header = "日本語",
|
||||||
|
Command = SelectLocaleCommand,
|
||||||
|
CommandParameter = new CultureInfo("ja-JP")
|
||||||
|
},
|
||||||
|
new MenuItemViewModel
|
||||||
|
{
|
||||||
|
Header = "한국어",
|
||||||
|
Command = SelectLocaleCommand,
|
||||||
|
CommandParameter = new CultureInfo("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
|
||||||
|
{
|
||||||
|
Header = "Українська",
|
||||||
|
Command = SelectLocaleCommand,
|
||||||
|
CommandParameter = new CultureInfo("uk-UA")
|
||||||
|
},
|
||||||
|
new MenuItemViewModel
|
||||||
|
{
|
||||||
|
Header = "Русский",
|
||||||
|
Command = SelectLocaleCommand,
|
||||||
|
CommandParameter = new CultureInfo("ru-RU")
|
||||||
|
},
|
||||||
|
new MenuItemViewModel
|
||||||
|
{
|
||||||
|
Header = "繁體中文",
|
||||||
|
Command = SelectLocaleCommand,
|
||||||
|
CommandParameter = new CultureInfo("zh-TW")
|
||||||
|
},
|
||||||
|
new MenuItemViewModel
|
||||||
|
{
|
||||||
|
Header = "Deutsch",
|
||||||
|
Command = SelectLocaleCommand,
|
||||||
|
CommandParameter = new CultureInfo("de-DE")
|
||||||
|
},
|
||||||
|
new MenuItemViewModel
|
||||||
|
{
|
||||||
|
Header = "Español",
|
||||||
|
Command = SelectLocaleCommand,
|
||||||
|
CommandParameter = new CultureInfo("es-ES")
|
||||||
|
},
|
||||||
|
new MenuItemViewModel
|
||||||
|
{
|
||||||
|
Header = "Polski",
|
||||||
|
Command = SelectLocaleCommand,
|
||||||
|
CommandParameter = new CultureInfo("pl-PL")
|
||||||
|
},
|
||||||
|
new MenuItemViewModel
|
||||||
|
{
|
||||||
|
Header = "Français",
|
||||||
|
Command = SelectLocaleCommand,
|
||||||
|
CommandParameter = new CultureInfo("fr-FR")
|
||||||
|
},
|
||||||
|
]
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
[RelayCommand]
|
||||||
|
private void FollowSystemTheme()
|
||||||
|
{
|
||||||
|
Application.Current?.RegisterFollowSystemTheme();
|
||||||
|
}
|
||||||
|
|
||||||
|
[RelayCommand]
|
||||||
|
private void ToggleTheme()
|
||||||
|
{
|
||||||
|
var app = Application.Current;
|
||||||
|
if (app is null) return;
|
||||||
|
var theme = app.ActualThemeVariant;
|
||||||
|
app.RequestedThemeVariant = theme == ThemeVariant.Dark ? ThemeVariant.Light : ThemeVariant.Dark;
|
||||||
|
app.UnregisterFollowSystemTheme();
|
||||||
|
}
|
||||||
|
|
||||||
|
[RelayCommand]
|
||||||
|
private void SelectTheme(object? obj)
|
||||||
|
{
|
||||||
|
var app = Application.Current;
|
||||||
|
if (app is null) return;
|
||||||
|
app.RequestedThemeVariant = obj as ThemeVariant;
|
||||||
|
app.UnregisterFollowSystemTheme();
|
||||||
|
}
|
||||||
|
|
||||||
|
[RelayCommand]
|
||||||
|
private void SelectLocale(object? obj)
|
||||||
|
{
|
||||||
|
var app = Application.Current;
|
||||||
|
if (app is null) return;
|
||||||
|
SemiTheme.OverrideLocaleResources(app, obj as CultureInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
[RelayCommand]
|
||||||
|
private static async Task OpenUrl(string url)
|
||||||
|
{
|
||||||
|
var launcher = ResolveDefaultTopLevel()?.Launcher;
|
||||||
|
if (launcher is not null)
|
||||||
|
{
|
||||||
|
await launcher.LaunchUriAsync(new Uri(url));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static TopLevel? ResolveDefaultTopLevel()
|
||||||
|
{
|
||||||
|
return Application.Current?.ApplicationLifetime switch
|
||||||
|
{
|
||||||
|
IClassicDesktopStyleApplicationLifetime desktopLifetime => desktopLifetime.MainWindow,
|
||||||
|
ISingleViewApplicationLifetime singleView => TopLevel.GetTopLevel(singleView.MainView),
|
||||||
|
_ => null
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class MenuItemViewModel
|
||||||
|
{
|
||||||
|
public string? Header { get; set; }
|
||||||
|
public ICommand? Command { get; set; }
|
||||||
|
public object? CommandParameter { get; set; }
|
||||||
|
public IList<MenuItemViewModel>? Items { get; set; }
|
||||||
|
}
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 168 KiB After Width: | Height: | Size: 168 KiB |
@@ -2,6 +2,7 @@
|
|||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<Nullable>enable</Nullable>
|
<Nullable>enable</Nullable>
|
||||||
<LangVersion>latest</LangVersion>
|
<LangVersion>latest</LangVersion>
|
||||||
|
<AvaloniaUseCompiledBindingsByDefault>true</AvaloniaUseCompiledBindingsByDefault>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<PropertyGroup Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net8.0'))">
|
<PropertyGroup Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net8.0'))">
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<Project>
|
<Project>
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
|
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
|
||||||
<AvaloniaVersion>12.0.1</AvaloniaVersion>
|
<AvaloniaVersion>12.0.0</AvaloniaVersion>
|
||||||
<DataGridVersion>12.0.0</DataGridVersion>
|
<DataGridVersion>12.0.0</DataGridVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
@@ -11,4 +11,4 @@
|
|||||||
<PackageVersion Include="Avalonia.Controls.TreeDataGrid" Version="11.1.1"/>
|
<PackageVersion Include="Avalonia.Controls.TreeDataGrid" Version="11.1.1"/>
|
||||||
<PackageVersion Include="Irihi.Avalonia.Shared" Version="0.4.0"/>
|
<PackageVersion Include="Irihi.Avalonia.Shared" Version="0.4.0"/>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
@@ -2,8 +2,8 @@
|
|||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFrameworks>net8.0;net10.0</TargetFrameworks>
|
<TargetFrameworks>net8.0;net10.0</TargetFrameworks>
|
||||||
<Version>12.0.1</Version>
|
<Version>12.0.0</Version>
|
||||||
<PackageReleaseNotes>Update to Semi.Avalonia.ColorPicker 12.0.1</PackageReleaseNotes>
|
<PackageReleaseNotes>Update to Semi.Avalonia.ColorPicker 12.0.0</PackageReleaseNotes>
|
||||||
<Title>Semi.Avalonia.ColorPicker</Title>
|
<Title>Semi.Avalonia.ColorPicker</Title>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
<ResourceDictionary
|
<ResourceDictionary
|
||||||
xmlns="https://github.com/avaloniaui"
|
xmlns="https://github.com/avaloniaui"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
xmlns:collections="using:Avalonia.Collections">
|
xmlns:collections="using:Avalonia.Collections"
|
||||||
|
x:CompileBindings="True">
|
||||||
<ControlTheme x:Key="DataGridCellTextBlockTheme" TargetType="TextBlock">
|
<ControlTheme x:Key="DataGridCellTextBlockTheme" TargetType="TextBlock">
|
||||||
<Setter Property="Margin" Value="{DynamicResource DataGridCellTextBlockDefaultMargin}" />
|
<Setter Property="Margin" Value="{DynamicResource DataGridCellTextBlockDefaultMargin}" />
|
||||||
<Setter Property="VerticalAlignment" Value="Center" />
|
<Setter Property="VerticalAlignment" Value="Center" />
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
<ResourceDictionary
|
<ResourceDictionary
|
||||||
xmlns="https://github.com/avaloniaui"
|
xmlns="https://github.com/avaloniaui"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
xmlns:conv="clr-namespace:Avalonia.Controls.Converters;assembly=Avalonia.Controls.TreeDataGrid">
|
xmlns:conv="clr-namespace:Avalonia.Controls.Converters;assembly=Avalonia.Controls.TreeDataGrid"
|
||||||
|
x:CompileBindings="True">
|
||||||
<Design.PreviewWith>
|
<Design.PreviewWith>
|
||||||
<StackPanel Margin="20">
|
<StackPanel Margin="20">
|
||||||
<TreeDataGridColumnHeader Header="123" />
|
<TreeDataGridColumnHeader Header="123" />
|
||||||
|
|||||||
@@ -20,23 +20,27 @@
|
|||||||
<!-- Compact-mode toggle: visible only in CompactOverlay/CompactInline. -->
|
<!-- Compact-mode toggle: visible only in CompactOverlay/CompactInline. -->
|
||||||
<ToggleButton
|
<ToggleButton
|
||||||
Name="PART_CompactPaneToggle"
|
Name="PART_CompactPaneToggle"
|
||||||
DockPanel.Dock="Top"
|
|
||||||
AutomationProperties.Name="Toggle navigation drawer"
|
|
||||||
ToolTip.Tip="{DynamicResource STRING_DRAWERPAGE_TOGGLE_NAVIGATION_DRAWER}"
|
|
||||||
Width="{DynamicResource ButtonDefaultHeight}"
|
Width="{DynamicResource ButtonDefaultHeight}"
|
||||||
Height="{DynamicResource ButtonDefaultHeight}"
|
Height="{DynamicResource ButtonDefaultHeight}"
|
||||||
HorizontalAlignment="Left"
|
HorizontalAlignment="Left"
|
||||||
|
AutomationProperties.Name="Toggle navigation drawer"
|
||||||
Background="Transparent"
|
Background="Transparent"
|
||||||
|
DockPanel.Dock="Top"
|
||||||
IsChecked="{Binding #PART_SplitView.IsPaneOpen, Mode=TwoWay}"
|
IsChecked="{Binding #PART_SplitView.IsPaneOpen, Mode=TwoWay}"
|
||||||
IsVisible="False">
|
IsVisible="False"
|
||||||
|
ToolTip.Tip="Toggle navigation drawer">
|
||||||
<Panel>
|
<Panel>
|
||||||
<PathIcon
|
<PathIcon
|
||||||
|
HorizontalAlignment="Center"
|
||||||
|
VerticalAlignment="Center"
|
||||||
Data="{DynamicResource DrawerPageMenuGlyph}"
|
Data="{DynamicResource DrawerPageMenuGlyph}"
|
||||||
Foreground="{DynamicResource DrawerPagePaneButtonForeground}"
|
Foreground="{DynamicResource DrawerPagePaneButtonForeground}"
|
||||||
IsVisible="{TemplateBinding DrawerIcon, Converter={x:Static ObjectConverters.IsNull}}"
|
IsVisible="{TemplateBinding DrawerIcon, Converter={x:Static ObjectConverters.IsNull}}"
|
||||||
Theme="{DynamicResource InnerPathIcon}" />
|
Theme="{DynamicResource InnerPathIcon}" />
|
||||||
<ContentPresenter
|
<ContentPresenter
|
||||||
Name="PART_CompactPaneIconPresenter"
|
Name="PART_CompactPaneIconPresenter"
|
||||||
|
HorizontalAlignment="Center"
|
||||||
|
VerticalAlignment="Center"
|
||||||
Content="{TemplateBinding DrawerIcon}"
|
Content="{TemplateBinding DrawerIcon}"
|
||||||
ContentTemplate="{TemplateBinding DrawerIconTemplate}"
|
ContentTemplate="{TemplateBinding DrawerIconTemplate}"
|
||||||
Foreground="{DynamicResource DrawerPagePaneButtonForeground}"
|
Foreground="{DynamicResource DrawerPagePaneButtonForeground}"
|
||||||
@@ -45,105 +49,117 @@
|
|||||||
</ToggleButton>
|
</ToggleButton>
|
||||||
<ContentPresenter
|
<ContentPresenter
|
||||||
Name="PART_DrawerHeader"
|
Name="PART_DrawerHeader"
|
||||||
DockPanel.Dock="Top"
|
|
||||||
Background="{TemplateBinding DrawerHeaderBackground}"
|
Background="{TemplateBinding DrawerHeaderBackground}"
|
||||||
Content="{TemplateBinding DrawerHeader}"
|
Content="{TemplateBinding DrawerHeader}"
|
||||||
ContentTemplate="{TemplateBinding DrawerHeaderTemplate}"
|
ContentTemplate="{TemplateBinding DrawerHeaderTemplate}"
|
||||||
IsVisible="{TemplateBinding DrawerHeader, Converter={x:Static ObjectConverters.IsNotNull}}" />
|
DockPanel.Dock="Top"
|
||||||
|
IsVisible="{TemplateBinding DrawerHeader,
|
||||||
|
Converter={x:Static ObjectConverters.IsNotNull}}" />
|
||||||
<ContentPresenter
|
<ContentPresenter
|
||||||
Name="PART_DrawerFooter"
|
Name="PART_DrawerFooter"
|
||||||
DockPanel.Dock="Bottom"
|
|
||||||
Background="{TemplateBinding DrawerFooterBackground}"
|
Background="{TemplateBinding DrawerFooterBackground}"
|
||||||
Content="{TemplateBinding DrawerFooter}"
|
Content="{TemplateBinding DrawerFooter}"
|
||||||
ContentTemplate="{TemplateBinding DrawerFooterTemplate}"
|
ContentTemplate="{TemplateBinding DrawerFooterTemplate}"
|
||||||
IsVisible="{TemplateBinding DrawerFooter, Converter={x:Static ObjectConverters.IsNotNull}}" />
|
DockPanel.Dock="Bottom"
|
||||||
|
IsVisible="{TemplateBinding DrawerFooter,
|
||||||
|
Converter={x:Static ObjectConverters.IsNotNull}}" />
|
||||||
<ContentPresenter
|
<ContentPresenter
|
||||||
Name="PART_DrawerPresenter"
|
Name="PART_DrawerPresenter"
|
||||||
|
HorizontalContentAlignment="Stretch"
|
||||||
|
VerticalContentAlignment="Stretch"
|
||||||
Content="{TemplateBinding Drawer}"
|
Content="{TemplateBinding Drawer}"
|
||||||
ContentTemplate="{TemplateBinding DrawerTemplate}" />
|
ContentTemplate="{TemplateBinding DrawerTemplate}" />
|
||||||
</DockPanel>
|
</DockPanel>
|
||||||
</SplitView.Pane>
|
</SplitView.Pane>
|
||||||
<Panel>
|
<Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
|
||||||
<DockPanel Name="PART_ContentDock">
|
<DockPanel Name="PART_ContentDock">
|
||||||
<Border
|
<Border
|
||||||
Name="PART_TopBar"
|
Name="PART_TopBar"
|
||||||
DockPanel.Dock="Top"
|
|
||||||
Height="{DynamicResource DrawerPageTopBarMinHeight}"
|
Height="{DynamicResource DrawerPageTopBarMinHeight}"
|
||||||
Background="{DynamicResource DrawerPageTopBarBackground}">
|
Padding="5"
|
||||||
<DockPanel>
|
Background="{DynamicResource DrawerPageTopBarBackground}"
|
||||||
|
DockPanel.Dock="Top">
|
||||||
|
<DockPanel HorizontalAlignment="Stretch">
|
||||||
<ToggleButton
|
<ToggleButton
|
||||||
Name="PART_PaneButton"
|
Name="PART_PaneButton"
|
||||||
DockPanel.Dock="Left"
|
|
||||||
AutomationProperties.Name="Toggle navigation drawer"
|
|
||||||
ToolTip.Tip="{DynamicResource STRING_DRAWERPAGE_TOGGLE_NAVIGATION_DRAWER}"
|
|
||||||
Width="{DynamicResource ButtonDefaultHeight}"
|
Width="{DynamicResource ButtonDefaultHeight}"
|
||||||
Height="{DynamicResource ButtonDefaultHeight}"
|
Height="{DynamicResource ButtonDefaultHeight}"
|
||||||
|
AutomationProperties.Name="Toggle navigation drawer"
|
||||||
Background="Transparent"
|
Background="Transparent"
|
||||||
IsChecked="{Binding #PART_SplitView.IsPaneOpen, Mode=TwoWay}">
|
DockPanel.Dock="Left"
|
||||||
|
IsChecked="{Binding #PART_SplitView.IsPaneOpen, Mode=TwoWay}"
|
||||||
|
ToolTip.Tip="Toggle navigation drawer">
|
||||||
<Panel>
|
<Panel>
|
||||||
<PathIcon
|
<PathIcon
|
||||||
|
HorizontalAlignment="Center"
|
||||||
|
VerticalAlignment="Center"
|
||||||
Data="{DynamicResource DrawerPageMenuGlyph}"
|
Data="{DynamicResource DrawerPageMenuGlyph}"
|
||||||
Foreground="{DynamicResource DrawerPagePaneButtonForeground}"
|
Foreground="{DynamicResource DrawerPagePaneButtonForeground}"
|
||||||
IsVisible="{TemplateBinding DrawerIcon, Converter={x:Static ObjectConverters.IsNull}}"
|
IsVisible="{TemplateBinding DrawerIcon, Converter={x:Static ObjectConverters.IsNull}}"
|
||||||
Theme="{DynamicResource InnerPathIcon}" />
|
Theme="{DynamicResource InnerPathIcon}" />
|
||||||
<ContentPresenter
|
<ContentPresenter
|
||||||
Name="PART_PaneIconPresenter"
|
Name="PART_PaneIconPresenter"
|
||||||
|
HorizontalAlignment="Center"
|
||||||
|
VerticalAlignment="Center"
|
||||||
Content="{TemplateBinding DrawerIcon}"
|
Content="{TemplateBinding DrawerIcon}"
|
||||||
ContentTemplate="{TemplateBinding DrawerIconTemplate}"
|
ContentTemplate="{TemplateBinding DrawerIconTemplate}"
|
||||||
Foreground="{DynamicResource DrawerPagePaneButtonForeground}"
|
Foreground="{DynamicResource DrawerPagePaneButtonForeground}"
|
||||||
IsVisible="{TemplateBinding DrawerIcon, Converter={x:Static ObjectConverters.IsNotNull}}" />
|
IsVisible="{TemplateBinding DrawerIcon, Converter={x:Static ObjectConverters.IsNotNull}}" />
|
||||||
</Panel>
|
</Panel>
|
||||||
</ToggleButton>
|
</ToggleButton>
|
||||||
<ContentPresenter
|
<ContentControl
|
||||||
Name="PART_TitlePresenter"
|
Name="PART_TitlePresenter"
|
||||||
Margin="{DynamicResource DrawerPageTitleMargin}"
|
Margin="8,0,0,0"
|
||||||
|
VerticalAlignment="Center"
|
||||||
VerticalContentAlignment="Center"
|
VerticalContentAlignment="Center"
|
||||||
Content="{TemplateBinding Header}"
|
Content="{TemplateBinding Header}"
|
||||||
ContentTemplate="{TemplateBinding HeaderTemplate}"
|
FontSize="16"
|
||||||
FontSize="{DynamicResource DrawerPageTitleFontSize}"
|
FontWeight="SemiBold"
|
||||||
FontWeight="{DynamicResource DrawerPageTitleFontWeight}"
|
IsVisible="{TemplateBinding Header,
|
||||||
IsVisible="{TemplateBinding Header, Converter={x:Static ObjectConverters.IsNotNull}}" />
|
Converter={x:Static ObjectConverters.IsNotNull}}" />
|
||||||
</DockPanel>
|
</DockPanel>
|
||||||
</Border>
|
</Border>
|
||||||
<Border
|
<Border
|
||||||
Name="PART_BottomBar"
|
Name="PART_BottomBar"
|
||||||
DockPanel.Dock="Bottom"
|
|
||||||
Height="{DynamicResource DrawerPageTopBarMinHeight}"
|
Height="{DynamicResource DrawerPageTopBarMinHeight}"
|
||||||
|
Padding="5"
|
||||||
Background="{DynamicResource DrawerPageTopBarBackground}"
|
Background="{DynamicResource DrawerPageTopBarBackground}"
|
||||||
|
DockPanel.Dock="Bottom"
|
||||||
IsVisible="False">
|
IsVisible="False">
|
||||||
<DockPanel>
|
<DockPanel HorizontalAlignment="Stretch">
|
||||||
<ToggleButton
|
<ToggleButton
|
||||||
Name="PART_BottomPaneButton"
|
Name="PART_BottomPaneButton"
|
||||||
DockPanel.Dock="Left"
|
|
||||||
AutomationProperties.Name="Toggle navigation drawer"
|
AutomationProperties.Name="Toggle navigation drawer"
|
||||||
ToolTip.Tip="{DynamicResource STRING_DRAWERPAGE_TOGGLE_NAVIGATION_DRAWER}"
|
|
||||||
Width="{DynamicResource ButtonDefaultHeight}"
|
|
||||||
Height="{DynamicResource ButtonDefaultHeight}"
|
|
||||||
Background="Transparent"
|
Background="Transparent"
|
||||||
IsChecked="{Binding #PART_SplitView.IsPaneOpen, Mode=TwoWay}">
|
DockPanel.Dock="Left"
|
||||||
|
IsChecked="{Binding #PART_SplitView.IsPaneOpen, Mode=TwoWay}"
|
||||||
|
ToolTip.Tip="Toggle navigation drawer">
|
||||||
<Panel>
|
<Panel>
|
||||||
<PathIcon
|
<PathIcon
|
||||||
Data="{DynamicResource DrawerPageMenuGlyph}"
|
HorizontalAlignment="Center"
|
||||||
Foreground="{DynamicResource DrawerPagePaneButtonForeground}"
|
VerticalAlignment="Center"
|
||||||
|
Data="{DynamicResource DrawerPaneButtonIcon}"
|
||||||
IsVisible="{TemplateBinding DrawerIcon, Converter={x:Static ObjectConverters.IsNull}}"
|
IsVisible="{TemplateBinding DrawerIcon, Converter={x:Static ObjectConverters.IsNull}}"
|
||||||
Theme="{DynamicResource InnerPathIcon}" />
|
Theme="{DynamicResource InnerPathIcon}" />
|
||||||
<ContentPresenter
|
<ContentPresenter
|
||||||
Name="PART_BottomPaneIconPresenter"
|
Name="PART_BottomPaneIconPresenter"
|
||||||
|
HorizontalAlignment="Center"
|
||||||
|
VerticalAlignment="Center"
|
||||||
Content="{TemplateBinding DrawerIcon}"
|
Content="{TemplateBinding DrawerIcon}"
|
||||||
ContentTemplate="{TemplateBinding DrawerIconTemplate}"
|
ContentTemplate="{TemplateBinding DrawerIconTemplate}"
|
||||||
Foreground="{DynamicResource DrawerPagePaneButtonForeground}"
|
|
||||||
IsVisible="{TemplateBinding DrawerIcon, Converter={x:Static ObjectConverters.IsNotNull}}" />
|
IsVisible="{TemplateBinding DrawerIcon, Converter={x:Static ObjectConverters.IsNotNull}}" />
|
||||||
</Panel>
|
</Panel>
|
||||||
</ToggleButton>
|
</ToggleButton>
|
||||||
<ContentPresenter
|
<ContentControl
|
||||||
Name="PART_BottomTitlePresenter"
|
Name="PART_BottomTitlePresenter"
|
||||||
Margin="{DynamicResource DrawerPageTitleMargin}"
|
Margin="8,0,0,0"
|
||||||
|
VerticalAlignment="Center"
|
||||||
VerticalContentAlignment="Center"
|
VerticalContentAlignment="Center"
|
||||||
Content="{TemplateBinding Header}"
|
Content="{TemplateBinding Header}"
|
||||||
ContentTemplate="{TemplateBinding HeaderTemplate}"
|
FontSize="16"
|
||||||
FontSize="{DynamicResource DrawerPageTitleFontSize}"
|
FontWeight="SemiBold"
|
||||||
FontWeight="{DynamicResource DrawerPageTitleFontWeight}"
|
IsVisible="{TemplateBinding Header,
|
||||||
IsVisible="{TemplateBinding Header, Converter={x:Static ObjectConverters.IsNotNull}}" />
|
Converter={x:Static ObjectConverters.IsNotNull}}" />
|
||||||
</DockPanel>
|
</DockPanel>
|
||||||
</Border>
|
</Border>
|
||||||
<ContentPresenter
|
<ContentPresenter
|
||||||
@@ -162,7 +178,7 @@
|
|||||||
Background="{TemplateBinding BackdropBrush}"
|
Background="{TemplateBinding BackdropBrush}"
|
||||||
IsHitTestVisible="False"
|
IsHitTestVisible="False"
|
||||||
IsVisible="False" />
|
IsVisible="False" />
|
||||||
</Panel>
|
</Grid>
|
||||||
</SplitView>
|
</SplitView>
|
||||||
</ControlTemplate>
|
</ControlTemplate>
|
||||||
</Setter>
|
</Setter>
|
||||||
@@ -233,4 +249,4 @@
|
|||||||
</Style>
|
</Style>
|
||||||
|
|
||||||
</ControlTheme>
|
</ControlTheme>
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
<ResourceDictionary
|
<ResourceDictionary
|
||||||
xmlns="https://github.com/avaloniaui"
|
xmlns="https://github.com/avaloniaui"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
x:CompileBindings="True">
|
||||||
<ControlTheme x:Key="{x:Type SplitView}" TargetType="SplitView">
|
<ControlTheme x:Key="{x:Type SplitView}" TargetType="SplitView">
|
||||||
<Setter Property="OpenPaneLength" Value="{DynamicResource SplitViewOpenPaneThemeLength}" />
|
<Setter Property="OpenPaneLength" Value="{DynamicResource SplitViewOpenPaneThemeLength}" />
|
||||||
<Setter Property="CompactPaneLength" Value="{DynamicResource SplitViewCompactPaneThemeLength}" />
|
<Setter Property="CompactPaneLength" Value="{DynamicResource SplitViewCompactPaneThemeLength}" />
|
||||||
|
|||||||
@@ -31,6 +31,7 @@
|
|||||||
<DockPanel HorizontalSpacing="{DynamicResource TabItemIconHeaderSpacing}">
|
<DockPanel HorizontalSpacing="{DynamicResource TabItemIconHeaderSpacing}">
|
||||||
<ContentPresenter
|
<ContentPresenter
|
||||||
Name="PART_IconPresenter"
|
Name="PART_IconPresenter"
|
||||||
|
DockPanel.Dock="Left"
|
||||||
Content="{TemplateBinding Icon}"
|
Content="{TemplateBinding Icon}"
|
||||||
ContentTemplate="{TemplateBinding IconTemplate}"
|
ContentTemplate="{TemplateBinding IconTemplate}"
|
||||||
IsVisible="{Binding $self.Content, Converter={x:Static ObjectConverters.IsNotNull}}">
|
IsVisible="{Binding $self.Content, Converter={x:Static ObjectConverters.IsNotNull}}">
|
||||||
@@ -60,10 +61,6 @@
|
|||||||
<Setter Property="RecognizesAccessKey" Value="True" />
|
<Setter Property="RecognizesAccessKey" Value="True" />
|
||||||
</Style>
|
</Style>
|
||||||
|
|
||||||
<Style Selector="^ /template/ ContentPresenter#PART_IconPresenter">
|
|
||||||
<Setter Property="DockPanel.Dock" Value="Left" />
|
|
||||||
</Style>
|
|
||||||
|
|
||||||
<Style Selector="^:selected">
|
<Style Selector="^:selected">
|
||||||
<Style Selector="^ /template/ ContentPresenter#PART_HeaderPresenter">
|
<Style Selector="^ /template/ ContentPresenter#PART_HeaderPresenter">
|
||||||
<Setter Property="FontWeight" Value="{DynamicResource TabItemSelectedFontWeight}" />
|
<Setter Property="FontWeight" Value="{DynamicResource TabItemSelectedFontWeight}" />
|
||||||
|
|||||||
@@ -2,11 +2,7 @@
|
|||||||
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">
|
||||||
<Design.PreviewWith>
|
<Design.PreviewWith>
|
||||||
<TabbedPage Width="400" Height="800" TabPlacement="Bottom">
|
<TabbedPage Width="400" Height="300" />
|
||||||
<ContentPage Icon="{DynamicResource SemiIconHome}" Header="Home" />
|
|
||||||
<ContentPage Icon="{DynamicResource SemiIconSearch}" Header="Search" />
|
|
||||||
<ContentPage Icon="{DynamicResource SemiIconSetting}" Header="Settings" />
|
|
||||||
</TabbedPage>
|
|
||||||
</Design.PreviewWith>
|
</Design.PreviewWith>
|
||||||
|
|
||||||
<ControlTheme x:Key="{x:Type TabbedPage}" TargetType="TabbedPage">
|
<ControlTheme x:Key="{x:Type TabbedPage}" TargetType="TabbedPage">
|
||||||
@@ -15,91 +11,27 @@
|
|||||||
<TabControl
|
<TabControl
|
||||||
Name="PART_TabControl"
|
Name="PART_TabControl"
|
||||||
Background="{TemplateBinding Background}"
|
Background="{TemplateBinding Background}"
|
||||||
Theme="{StaticResource LineTabControl}">
|
Theme="{StaticResource LineTabControl}" />
|
||||||
<TabControl.ItemContainerTheme>
|
|
||||||
<ControlTheme
|
|
||||||
BasedOn="{StaticResource LineTabItem}"
|
|
||||||
TargetType="TabItem">
|
|
||||||
<Style Selector="^[TabStripPlacement=Top], ^[TabStripPlacement=Bottom]">
|
|
||||||
<Setter Property="TabItem.Margin" Value="0" />
|
|
||||||
<Setter Property="TabItem.HorizontalContentAlignment" Value="Center" />
|
|
||||||
<Setter Property="TabItem.VerticalContentAlignment" Value="Center" />
|
|
||||||
<Style Selector="^ /template/ ContentPresenter#PART_IconPresenter">
|
|
||||||
<Setter Property="DockPanel.Dock" Value="Top" />
|
|
||||||
</Style>
|
|
||||||
</Style>
|
|
||||||
</ControlTheme>
|
|
||||||
</TabControl.ItemContainerTheme>
|
|
||||||
<TabControl.ItemsPanel>
|
|
||||||
<ItemsPanelTemplate>
|
|
||||||
<UniformGrid Columns="{Binding $parent[TabControl].ItemCount}" />
|
|
||||||
</ItemsPanelTemplate>
|
|
||||||
</TabControl.ItemsPanel>
|
|
||||||
</TabControl>
|
|
||||||
</ControlTemplate>
|
</ControlTemplate>
|
||||||
</Setter>
|
</Setter>
|
||||||
</ControlTheme>
|
</ControlTheme>
|
||||||
|
|
||||||
<ControlTheme x:Key="CardTabbedPage" TargetType="TabbedPage">
|
<ControlTheme x:Key="CardTabbedPage" TargetType="TabbedPage">
|
||||||
<Setter Property="Template">
|
<Setter Property="Template">
|
||||||
<ControlTemplate TargetType="TabbedPage">
|
<ControlTemplate TargetType="TabbedPage">
|
||||||
<TabControl
|
<TabControl
|
||||||
Name="PART_TabControl"
|
Name="PART_TabControl"
|
||||||
Background="{TemplateBinding Background}"
|
Background="{TemplateBinding Background}"
|
||||||
Theme="{StaticResource CardTabControl}">
|
Theme="{StaticResource CardTabControl}" />
|
||||||
<TabControl.ItemContainerTheme>
|
|
||||||
<ControlTheme
|
|
||||||
BasedOn="{StaticResource CardTabItem}"
|
|
||||||
TargetType="TabItem">
|
|
||||||
<Style Selector="^[TabStripPlacement=Top], ^[TabStripPlacement=Bottom]">
|
|
||||||
<Setter Property="TabItem.Padding" Value="8" />
|
|
||||||
<Setter Property="TabItem.Margin" Value="0" />
|
|
||||||
<Setter Property="TabItem.HorizontalContentAlignment" Value="Center" />
|
|
||||||
<Setter Property="TabItem.VerticalContentAlignment" Value="Center" />
|
|
||||||
<Style Selector="^ /template/ ContentPresenter#PART_IconPresenter">
|
|
||||||
<Setter Property="DockPanel.Dock" Value="Top" />
|
|
||||||
</Style>
|
|
||||||
</Style>
|
|
||||||
</ControlTheme>
|
|
||||||
</TabControl.ItemContainerTheme>
|
|
||||||
<TabControl.ItemsPanel>
|
|
||||||
<ItemsPanelTemplate>
|
|
||||||
<UniformGrid Columns="{Binding $parent[TabControl].ItemCount}" />
|
|
||||||
</ItemsPanelTemplate>
|
|
||||||
</TabControl.ItemsPanel>
|
|
||||||
</TabControl>
|
|
||||||
</ControlTemplate>
|
</ControlTemplate>
|
||||||
</Setter>
|
</Setter>
|
||||||
</ControlTheme>
|
</ControlTheme>
|
||||||
|
|
||||||
<ControlTheme x:Key="ButtonTabbedPage" TargetType="TabbedPage">
|
<ControlTheme x:Key="ButtonTabbedPage" TargetType="TabbedPage">
|
||||||
<Setter Property="Template">
|
<Setter Property="Template">
|
||||||
<ControlTemplate TargetType="TabbedPage">
|
<ControlTemplate TargetType="TabbedPage">
|
||||||
<TabControl
|
<TabControl
|
||||||
Name="PART_TabControl"
|
Name="PART_TabControl"
|
||||||
Background="{TemplateBinding Background}"
|
Background="{TemplateBinding Background}"
|
||||||
Theme="{StaticResource ButtonTabControl}">
|
Theme="{StaticResource ButtonTabControl}" />
|
||||||
<TabControl.ItemContainerTheme>
|
|
||||||
<ControlTheme
|
|
||||||
BasedOn="{StaticResource ButtonTabItem}"
|
|
||||||
TargetType="TabItem">
|
|
||||||
<Style Selector="^[TabStripPlacement=Top], ^[TabStripPlacement=Bottom]">
|
|
||||||
<Setter Property="TabItem.Padding" Value="12" />
|
|
||||||
<Setter Property="TabItem.Margin" Value="0" />
|
|
||||||
<Setter Property="TabItem.HorizontalContentAlignment" Value="Center" />
|
|
||||||
<Setter Property="TabItem.VerticalContentAlignment" Value="Center" />
|
|
||||||
<Style Selector="^ /template/ ContentPresenter#PART_IconPresenter">
|
|
||||||
<Setter Property="DockPanel.Dock" Value="Top" />
|
|
||||||
</Style>
|
|
||||||
</Style>
|
|
||||||
</ControlTheme>
|
|
||||||
</TabControl.ItemContainerTheme>
|
|
||||||
<TabControl.ItemsPanel>
|
|
||||||
<ItemsPanelTemplate>
|
|
||||||
<UniformGrid Columns="{Binding $parent[TabControl].ItemCount}" />
|
|
||||||
</ItemsPanelTemplate>
|
|
||||||
</TabControl.ItemsPanel>
|
|
||||||
</TabControl>
|
|
||||||
</ControlTemplate>
|
</ControlTemplate>
|
||||||
</Setter>
|
</Setter>
|
||||||
</ControlTheme>
|
</ControlTheme>
|
||||||
|
|||||||
@@ -14,8 +14,6 @@
|
|||||||
<x:String x:Key="STRING_MENU_CUT">Ausschneiden</x:String>
|
<x:String x:Key="STRING_MENU_CUT">Ausschneiden</x:String>
|
||||||
<x:String x:Key="STRING_MENU_COPY">Kopieren</x:String>
|
<x:String x:Key="STRING_MENU_COPY">Kopieren</x:String>
|
||||||
<x:String x:Key="STRING_MENU_PASTE">Einfügen</x:String>
|
<x:String x:Key="STRING_MENU_PASTE">Einfügen</x:String>
|
||||||
<!-- DrawerPage -->
|
|
||||||
<x:String x:Key="STRING_DRAWERPAGE_TOGGLE_NAVIGATION_DRAWER">Navigationsleiste umschalten</x:String>
|
|
||||||
<!-- ManagedFileChooser -->
|
<!-- ManagedFileChooser -->
|
||||||
<x:String x:Key="STRING_CHOOSER_FILE_NAME">Dateiname</x:String>
|
<x:String x:Key="STRING_CHOOSER_FILE_NAME">Dateiname</x:String>
|
||||||
<x:String x:Key="STRING_CHOOSER_SHOW_HIDDEN_FILES">Ausgeblendete Elemente anzeigen</x:String>
|
<x:String x:Key="STRING_CHOOSER_SHOW_HIDDEN_FILES">Ausgeblendete Elemente anzeigen</x:String>
|
||||||
@@ -26,4 +24,4 @@
|
|||||||
<x:String x:Key="STRING_CHOOSER_TYPE_COLUMN">Typ</x:String>
|
<x:String x:Key="STRING_CHOOSER_TYPE_COLUMN">Typ</x:String>
|
||||||
<x:String x:Key="STRING_CHOOSER_SIZE_COLUMN">Größe</x:String>
|
<x:String x:Key="STRING_CHOOSER_SIZE_COLUMN">Größe</x:String>
|
||||||
<x:String x:Key="STRING_CHOOSER_PROMPT_FILE_ALREADY_EXISTS">Die Datei {0} existiert bereits. Möchten Sie sie ersetzen?</x:String>
|
<x:String x:Key="STRING_CHOOSER_PROMPT_FILE_ALREADY_EXISTS">Die Datei {0} existiert bereits. Möchten Sie sie ersetzen?</x:String>
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
@@ -14,8 +14,6 @@
|
|||||||
<x:String x:Key="STRING_MENU_CUT">Cut</x:String>
|
<x:String x:Key="STRING_MENU_CUT">Cut</x:String>
|
||||||
<x:String x:Key="STRING_MENU_COPY">Copy</x:String>
|
<x:String x:Key="STRING_MENU_COPY">Copy</x:String>
|
||||||
<x:String x:Key="STRING_MENU_PASTE">Paste</x:String>
|
<x:String x:Key="STRING_MENU_PASTE">Paste</x:String>
|
||||||
<!-- DrawerPage -->
|
|
||||||
<x:String x:Key="STRING_DRAWERPAGE_TOGGLE_NAVIGATION_DRAWER">Toggle navigation drawer</x:String>
|
|
||||||
<!-- ManagedFileChooser -->
|
<!-- ManagedFileChooser -->
|
||||||
<x:String x:Key="STRING_CHOOSER_FILE_NAME">File name</x:String>
|
<x:String x:Key="STRING_CHOOSER_FILE_NAME">File name</x:String>
|
||||||
<x:String x:Key="STRING_CHOOSER_SHOW_HIDDEN_FILES">Show hidden files</x:String>
|
<x:String x:Key="STRING_CHOOSER_SHOW_HIDDEN_FILES">Show hidden files</x:String>
|
||||||
@@ -26,4 +24,4 @@
|
|||||||
<x:String x:Key="STRING_CHOOSER_TYPE_COLUMN">Type</x:String>
|
<x:String x:Key="STRING_CHOOSER_TYPE_COLUMN">Type</x:String>
|
||||||
<x:String x:Key="STRING_CHOOSER_SIZE_COLUMN">Size</x:String>
|
<x:String x:Key="STRING_CHOOSER_SIZE_COLUMN">Size</x:String>
|
||||||
<x:String x:Key="STRING_CHOOSER_PROMPT_FILE_ALREADY_EXISTS">{0} already exists. Do you want to replace it?</x:String>
|
<x:String x:Key="STRING_CHOOSER_PROMPT_FILE_ALREADY_EXISTS">{0} already exists. Do you want to replace it?</x:String>
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
@@ -14,8 +14,6 @@
|
|||||||
<x:String x:Key="STRING_MENU_CUT">Cut</x:String>
|
<x:String x:Key="STRING_MENU_CUT">Cut</x:String>
|
||||||
<x:String x:Key="STRING_MENU_COPY">Copy</x:String>
|
<x:String x:Key="STRING_MENU_COPY">Copy</x:String>
|
||||||
<x:String x:Key="STRING_MENU_PASTE">Paste</x:String>
|
<x:String x:Key="STRING_MENU_PASTE">Paste</x:String>
|
||||||
<!-- DrawerPage -->
|
|
||||||
<x:String x:Key="STRING_DRAWERPAGE_TOGGLE_NAVIGATION_DRAWER">Toggle navigation drawer</x:String>
|
|
||||||
<!-- ManagedFileChooser -->
|
<!-- ManagedFileChooser -->
|
||||||
<x:String x:Key="STRING_CHOOSER_FILE_NAME">File name</x:String>
|
<x:String x:Key="STRING_CHOOSER_FILE_NAME">File name</x:String>
|
||||||
<x:String x:Key="STRING_CHOOSER_SHOW_HIDDEN_FILES">Show hidden files</x:String>
|
<x:String x:Key="STRING_CHOOSER_SHOW_HIDDEN_FILES">Show hidden files</x:String>
|
||||||
@@ -26,4 +24,4 @@
|
|||||||
<x:String x:Key="STRING_CHOOSER_TYPE_COLUMN">Type</x:String>
|
<x:String x:Key="STRING_CHOOSER_TYPE_COLUMN">Type</x:String>
|
||||||
<x:String x:Key="STRING_CHOOSER_SIZE_COLUMN">Size</x:String>
|
<x:String x:Key="STRING_CHOOSER_SIZE_COLUMN">Size</x:String>
|
||||||
<x:String x:Key="STRING_CHOOSER_PROMPT_FILE_ALREADY_EXISTS">{0} already exists. Do you want to replace it?</x:String>
|
<x:String x:Key="STRING_CHOOSER_PROMPT_FILE_ALREADY_EXISTS">{0} already exists. Do you want to replace it?</x:String>
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
@@ -14,8 +14,6 @@
|
|||||||
<x:String x:Key="STRING_MENU_CUT">Cortar</x:String>
|
<x:String x:Key="STRING_MENU_CUT">Cortar</x:String>
|
||||||
<x:String x:Key="STRING_MENU_COPY">Copiar</x:String>
|
<x:String x:Key="STRING_MENU_COPY">Copiar</x:String>
|
||||||
<x:String x:Key="STRING_MENU_PASTE">Pegar</x:String>
|
<x:String x:Key="STRING_MENU_PASTE">Pegar</x:String>
|
||||||
<!-- DrawerPage -->
|
|
||||||
<x:String x:Key="STRING_DRAWERPAGE_TOGGLE_NAVIGATION_DRAWER">Alternar panel de navegación</x:String>
|
|
||||||
<!-- ManagedFileChooser -->
|
<!-- ManagedFileChooser -->
|
||||||
<x:String x:Key="STRING_CHOOSER_FILE_NAME">Nombre de fichero</x:String>
|
<x:String x:Key="STRING_CHOOSER_FILE_NAME">Nombre de fichero</x:String>
|
||||||
<x:String x:Key="STRING_CHOOSER_SHOW_HIDDEN_FILES">Mostrar ficheros ocultos</x:String>
|
<x:String x:Key="STRING_CHOOSER_SHOW_HIDDEN_FILES">Mostrar ficheros ocultos</x:String>
|
||||||
@@ -26,4 +24,4 @@
|
|||||||
<x:String x:Key="STRING_CHOOSER_TYPE_COLUMN">Tipo</x:String>
|
<x:String x:Key="STRING_CHOOSER_TYPE_COLUMN">Tipo</x:String>
|
||||||
<x:String x:Key="STRING_CHOOSER_SIZE_COLUMN">Tamaño</x:String>
|
<x:String x:Key="STRING_CHOOSER_SIZE_COLUMN">Tamaño</x:String>
|
||||||
<x:String x:Key="STRING_CHOOSER_PROMPT_FILE_ALREADY_EXISTS">{0} ya existe. Quieres reemplazarlo?</x:String>
|
<x:String x:Key="STRING_CHOOSER_PROMPT_FILE_ALREADY_EXISTS">{0} ya existe. Quieres reemplazarlo?</x:String>
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
@@ -14,8 +14,6 @@
|
|||||||
<x:String x:Key="STRING_MENU_CUT">Couper</x:String>
|
<x:String x:Key="STRING_MENU_CUT">Couper</x:String>
|
||||||
<x:String x:Key="STRING_MENU_COPY">Copier</x:String>
|
<x:String x:Key="STRING_MENU_COPY">Copier</x:String>
|
||||||
<x:String x:Key="STRING_MENU_PASTE">Coller</x:String>
|
<x:String x:Key="STRING_MENU_PASTE">Coller</x:String>
|
||||||
<!-- DrawerPage -->
|
|
||||||
<x:String x:Key="STRING_DRAWERPAGE_TOGGLE_NAVIGATION_DRAWER">Basculer le volet de navigation</x:String>
|
|
||||||
<!-- ManagedFileChooser -->
|
<!-- ManagedFileChooser -->
|
||||||
<x:String x:Key="STRING_CHOOSER_FILE_NAME">Nom du fichier</x:String>
|
<x:String x:Key="STRING_CHOOSER_FILE_NAME">Nom du fichier</x:String>
|
||||||
<x:String x:Key="STRING_CHOOSER_SHOW_HIDDEN_FILES">Afficher les fichiers cachés</x:String>
|
<x:String x:Key="STRING_CHOOSER_SHOW_HIDDEN_FILES">Afficher les fichiers cachés</x:String>
|
||||||
|
|||||||
@@ -14,8 +14,6 @@
|
|||||||
<x:String x:Key="STRING_MENU_CUT">Taglia</x:String>
|
<x:String x:Key="STRING_MENU_CUT">Taglia</x:String>
|
||||||
<x:String x:Key="STRING_MENU_COPY">Copia</x:String>
|
<x:String x:Key="STRING_MENU_COPY">Copia</x:String>
|
||||||
<x:String x:Key="STRING_MENU_PASTE">Incolla</x:String>
|
<x:String x:Key="STRING_MENU_PASTE">Incolla</x:String>
|
||||||
<!-- DrawerPage -->
|
|
||||||
<x:String x:Key="STRING_DRAWERPAGE_TOGGLE_NAVIGATION_DRAWER">Attiva/disattiva riquadro di navigazione</x:String>
|
|
||||||
<!-- ManagedFileChooser -->
|
<!-- ManagedFileChooser -->
|
||||||
<x:String x:Key="STRING_CHOOSER_FILE_NAME">Nome file</x:String>
|
<x:String x:Key="STRING_CHOOSER_FILE_NAME">Nome file</x:String>
|
||||||
<x:String x:Key="STRING_CHOOSER_SHOW_HIDDEN_FILES">Mostra file nascosti</x:String>
|
<x:String x:Key="STRING_CHOOSER_SHOW_HIDDEN_FILES">Mostra file nascosti</x:String>
|
||||||
@@ -26,4 +24,4 @@
|
|||||||
<x:String x:Key="STRING_CHOOSER_TYPE_COLUMN">Tipo</x:String>
|
<x:String x:Key="STRING_CHOOSER_TYPE_COLUMN">Tipo</x:String>
|
||||||
<x:String x:Key="STRING_CHOOSER_SIZE_COLUMN">Dimensione</x:String>
|
<x:String x:Key="STRING_CHOOSER_SIZE_COLUMN">Dimensione</x:String>
|
||||||
<x:String x:Key="STRING_CHOOSER_PROMPT_FILE_ALREADY_EXISTS">{0} è già esistente. Sovrascriverlo?</x:String>
|
<x:String x:Key="STRING_CHOOSER_PROMPT_FILE_ALREADY_EXISTS">{0} è già esistente. Sovrascriverlo?</x:String>
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
@@ -14,8 +14,6 @@
|
|||||||
<x:String x:Key="STRING_MENU_CUT">Taglia</x:String>
|
<x:String x:Key="STRING_MENU_CUT">Taglia</x:String>
|
||||||
<x:String x:Key="STRING_MENU_COPY">Copia</x:String>
|
<x:String x:Key="STRING_MENU_COPY">Copia</x:String>
|
||||||
<x:String x:Key="STRING_MENU_PASTE">Incolla</x:String>
|
<x:String x:Key="STRING_MENU_PASTE">Incolla</x:String>
|
||||||
<!-- DrawerPage -->
|
|
||||||
<x:String x:Key="STRING_DRAWERPAGE_TOGGLE_NAVIGATION_DRAWER">Attiva/disattiva riquadro di navigazione</x:String>
|
|
||||||
<!-- ManagedFileChooser -->
|
<!-- ManagedFileChooser -->
|
||||||
<x:String x:Key="STRING_CHOOSER_FILE_NAME">Nome file</x:String>
|
<x:String x:Key="STRING_CHOOSER_FILE_NAME">Nome file</x:String>
|
||||||
<x:String x:Key="STRING_CHOOSER_SHOW_HIDDEN_FILES">Mostra file nascosti</x:String>
|
<x:String x:Key="STRING_CHOOSER_SHOW_HIDDEN_FILES">Mostra file nascosti</x:String>
|
||||||
@@ -26,4 +24,4 @@
|
|||||||
<x:String x:Key="STRING_CHOOSER_TYPE_COLUMN">Tipo</x:String>
|
<x:String x:Key="STRING_CHOOSER_TYPE_COLUMN">Tipo</x:String>
|
||||||
<x:String x:Key="STRING_CHOOSER_SIZE_COLUMN">Dimensione</x:String>
|
<x:String x:Key="STRING_CHOOSER_SIZE_COLUMN">Dimensione</x:String>
|
||||||
<x:String x:Key="STRING_CHOOSER_PROMPT_FILE_ALREADY_EXISTS">{0} è già esistente. Sovrascriverlo?</x:String>
|
<x:String x:Key="STRING_CHOOSER_PROMPT_FILE_ALREADY_EXISTS">{0} è già esistente. Sovrascriverlo?</x:String>
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
@@ -14,8 +14,6 @@
|
|||||||
<x:String x:Key="STRING_MENU_CUT">切り取り</x:String>
|
<x:String x:Key="STRING_MENU_CUT">切り取り</x:String>
|
||||||
<x:String x:Key="STRING_MENU_COPY">コピー</x:String>
|
<x:String x:Key="STRING_MENU_COPY">コピー</x:String>
|
||||||
<x:String x:Key="STRING_MENU_PASTE">貼り付け</x:String>
|
<x:String x:Key="STRING_MENU_PASTE">貼り付け</x:String>
|
||||||
<!-- DrawerPage -->
|
|
||||||
<x:String x:Key="STRING_DRAWERPAGE_TOGGLE_NAVIGATION_DRAWER">ナビゲーション ドロワーを切り替える</x:String>
|
|
||||||
<!-- ManagedFileChooser -->
|
<!-- ManagedFileChooser -->
|
||||||
<x:String x:Key="STRING_CHOOSER_FILE_NAME">ファイル名</x:String>
|
<x:String x:Key="STRING_CHOOSER_FILE_NAME">ファイル名</x:String>
|
||||||
<x:String x:Key="STRING_CHOOSER_SHOW_HIDDEN_FILES">隠しファイルを表示</x:String>
|
<x:String x:Key="STRING_CHOOSER_SHOW_HIDDEN_FILES">隠しファイルを表示</x:String>
|
||||||
@@ -26,4 +24,4 @@
|
|||||||
<x:String x:Key="STRING_CHOOSER_TYPE_COLUMN">種類</x:String>
|
<x:String x:Key="STRING_CHOOSER_TYPE_COLUMN">種類</x:String>
|
||||||
<x:String x:Key="STRING_CHOOSER_SIZE_COLUMN">サイズ</x:String>
|
<x:String x:Key="STRING_CHOOSER_SIZE_COLUMN">サイズ</x:String>
|
||||||
<x:String x:Key="STRING_CHOOSER_PROMPT_FILE_ALREADY_EXISTS">{0} はすでに存在します。置き換えますか?</x:String>
|
<x:String x:Key="STRING_CHOOSER_PROMPT_FILE_ALREADY_EXISTS">{0} はすでに存在します。置き換えますか?</x:String>
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
@@ -14,8 +14,6 @@
|
|||||||
<x:String x:Key="STRING_MENU_CUT">잘라내기</x:String>
|
<x:String x:Key="STRING_MENU_CUT">잘라내기</x:String>
|
||||||
<x:String x:Key="STRING_MENU_COPY">복사</x:String>
|
<x:String x:Key="STRING_MENU_COPY">복사</x:String>
|
||||||
<x:String x:Key="STRING_MENU_PASTE">붙여넣기</x:String>
|
<x:String x:Key="STRING_MENU_PASTE">붙여넣기</x:String>
|
||||||
<!-- DrawerPage -->
|
|
||||||
<x:String x:Key="STRING_DRAWERPAGE_TOGGLE_NAVIGATION_DRAWER">탐색 창 전환</x:String>
|
|
||||||
<!-- ManagedFileChooser -->
|
<!-- ManagedFileChooser -->
|
||||||
<x:String x:Key="STRING_CHOOSER_FILE_NAME">파일 이름</x:String>
|
<x:String x:Key="STRING_CHOOSER_FILE_NAME">파일 이름</x:String>
|
||||||
<x:String x:Key="STRING_CHOOSER_SHOW_HIDDEN_FILES">숨긴 파일 표시</x:String>
|
<x:String x:Key="STRING_CHOOSER_SHOW_HIDDEN_FILES">숨긴 파일 표시</x:String>
|
||||||
@@ -26,4 +24,4 @@
|
|||||||
<x:String x:Key="STRING_CHOOSER_TYPE_COLUMN">유형</x:String>
|
<x:String x:Key="STRING_CHOOSER_TYPE_COLUMN">유형</x:String>
|
||||||
<x:String x:Key="STRING_CHOOSER_SIZE_COLUMN">크기</x:String>
|
<x:String x:Key="STRING_CHOOSER_SIZE_COLUMN">크기</x:String>
|
||||||
<x:String x:Key="STRING_CHOOSER_PROMPT_FILE_ALREADY_EXISTS">{0}이(가) 이미 있습니다. 바꾸시겠습니까?</x:String>
|
<x:String x:Key="STRING_CHOOSER_PROMPT_FILE_ALREADY_EXISTS">{0}이(가) 이미 있습니다. 바꾸시겠습니까?</x:String>
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
@@ -14,8 +14,6 @@
|
|||||||
<x:String x:Key="STRING_MENU_CUT">Knippen</x:String>
|
<x:String x:Key="STRING_MENU_CUT">Knippen</x:String>
|
||||||
<x:String x:Key="STRING_MENU_COPY">Kopiëren</x:String>
|
<x:String x:Key="STRING_MENU_COPY">Kopiëren</x:String>
|
||||||
<x:String x:Key="STRING_MENU_PASTE">Plakken</x:String>
|
<x:String x:Key="STRING_MENU_PASTE">Plakken</x:String>
|
||||||
<!-- DrawerPage -->
|
|
||||||
<x:String x:Key="STRING_DRAWERPAGE_TOGGLE_NAVIGATION_DRAWER">Navigatievenster openen of sluiten</x:String>
|
|
||||||
<!-- ManagedFileChooser -->
|
<!-- ManagedFileChooser -->
|
||||||
<x:String x:Key="STRING_CHOOSER_FILE_NAME">Bestandsnaam</x:String>
|
<x:String x:Key="STRING_CHOOSER_FILE_NAME">Bestandsnaam</x:String>
|
||||||
<x:String x:Key="STRING_CHOOSER_SHOW_HIDDEN_FILES">Toon verborgen bestanden</x:String>
|
<x:String x:Key="STRING_CHOOSER_SHOW_HIDDEN_FILES">Toon verborgen bestanden</x:String>
|
||||||
@@ -26,4 +24,4 @@
|
|||||||
<x:String x:Key="STRING_CHOOSER_TYPE_COLUMN">Type</x:String>
|
<x:String x:Key="STRING_CHOOSER_TYPE_COLUMN">Type</x:String>
|
||||||
<x:String x:Key="STRING_CHOOSER_SIZE_COLUMN">Grootte</x:String>
|
<x:String x:Key="STRING_CHOOSER_SIZE_COLUMN">Grootte</x:String>
|
||||||
<x:String x:Key="STRING_CHOOSER_PROMPT_FILE_ALREADY_EXISTS">{0} bestaat al. Wilt u het vervangen?</x:String>
|
<x:String x:Key="STRING_CHOOSER_PROMPT_FILE_ALREADY_EXISTS">{0} bestaat al. Wilt u het vervangen?</x:String>
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
@@ -14,8 +14,6 @@
|
|||||||
<x:String x:Key="STRING_MENU_CUT">Knippen</x:String>
|
<x:String x:Key="STRING_MENU_CUT">Knippen</x:String>
|
||||||
<x:String x:Key="STRING_MENU_COPY">Kopiëren</x:String>
|
<x:String x:Key="STRING_MENU_COPY">Kopiëren</x:String>
|
||||||
<x:String x:Key="STRING_MENU_PASTE">Plakken</x:String>
|
<x:String x:Key="STRING_MENU_PASTE">Plakken</x:String>
|
||||||
<!-- DrawerPage -->
|
|
||||||
<x:String x:Key="STRING_DRAWERPAGE_TOGGLE_NAVIGATION_DRAWER">Navigatievenster openen of sluiten</x:String>
|
|
||||||
<!-- ManagedFileChooser -->
|
<!-- ManagedFileChooser -->
|
||||||
<x:String x:Key="STRING_CHOOSER_FILE_NAME">Bestandsnaam</x:String>
|
<x:String x:Key="STRING_CHOOSER_FILE_NAME">Bestandsnaam</x:String>
|
||||||
<x:String x:Key="STRING_CHOOSER_SHOW_HIDDEN_FILES">Toon verborgen bestanden</x:String>
|
<x:String x:Key="STRING_CHOOSER_SHOW_HIDDEN_FILES">Toon verborgen bestanden</x:String>
|
||||||
@@ -26,4 +24,4 @@
|
|||||||
<x:String x:Key="STRING_CHOOSER_TYPE_COLUMN">Type</x:String>
|
<x:String x:Key="STRING_CHOOSER_TYPE_COLUMN">Type</x:String>
|
||||||
<x:String x:Key="STRING_CHOOSER_SIZE_COLUMN">Grootte</x:String>
|
<x:String x:Key="STRING_CHOOSER_SIZE_COLUMN">Grootte</x:String>
|
||||||
<x:String x:Key="STRING_CHOOSER_PROMPT_FILE_ALREADY_EXISTS">{0} bestaat al. Wilt u het vervangen?</x:String>
|
<x:String x:Key="STRING_CHOOSER_PROMPT_FILE_ALREADY_EXISTS">{0} bestaat al. Wilt u het vervangen?</x:String>
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
@@ -14,8 +14,6 @@
|
|||||||
<x:String x:Key="STRING_MENU_CUT">Wytnij</x:String>
|
<x:String x:Key="STRING_MENU_CUT">Wytnij</x:String>
|
||||||
<x:String x:Key="STRING_MENU_COPY">Kopiuj</x:String>
|
<x:String x:Key="STRING_MENU_COPY">Kopiuj</x:String>
|
||||||
<x:String x:Key="STRING_MENU_PASTE">Wklej</x:String>
|
<x:String x:Key="STRING_MENU_PASTE">Wklej</x:String>
|
||||||
<!-- DrawerPage -->
|
|
||||||
<x:String x:Key="STRING_DRAWERPAGE_TOGGLE_NAVIGATION_DRAWER">Przełącz panel nawigacyjny</x:String>
|
|
||||||
<!-- ManagedFileChooser -->
|
<!-- ManagedFileChooser -->
|
||||||
<x:String x:Key="STRING_CHOOSER_FILE_NAME">Nazwa pliku</x:String>
|
<x:String x:Key="STRING_CHOOSER_FILE_NAME">Nazwa pliku</x:String>
|
||||||
<x:String x:Key="STRING_CHOOSER_SHOW_HIDDEN_FILES">Pokaż ukryte pliki</x:String>
|
<x:String x:Key="STRING_CHOOSER_SHOW_HIDDEN_FILES">Pokaż ukryte pliki</x:String>
|
||||||
@@ -26,4 +24,4 @@
|
|||||||
<x:String x:Key="STRING_CHOOSER_TYPE_COLUMN">Typ</x:String>
|
<x:String x:Key="STRING_CHOOSER_TYPE_COLUMN">Typ</x:String>
|
||||||
<x:String x:Key="STRING_CHOOSER_SIZE_COLUMN">Rozmiar</x:String>
|
<x:String x:Key="STRING_CHOOSER_SIZE_COLUMN">Rozmiar</x:String>
|
||||||
<x:String x:Key="STRING_CHOOSER_PROMPT_FILE_ALREADY_EXISTS">{0} już istnieje. Czy zamienić istniejący plik?</x:String>
|
<x:String x:Key="STRING_CHOOSER_PROMPT_FILE_ALREADY_EXISTS">{0} już istnieje. Czy zamienić istniejący plik?</x:String>
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
@@ -14,8 +14,6 @@
|
|||||||
<x:String x:Key="STRING_MENU_CUT">Вырезать</x:String>
|
<x:String x:Key="STRING_MENU_CUT">Вырезать</x:String>
|
||||||
<x:String x:Key="STRING_MENU_COPY">Копировать</x:String>
|
<x:String x:Key="STRING_MENU_COPY">Копировать</x:String>
|
||||||
<x:String x:Key="STRING_MENU_PASTE">Вставить</x:String>
|
<x:String x:Key="STRING_MENU_PASTE">Вставить</x:String>
|
||||||
<!-- DrawerPage -->
|
|
||||||
<x:String x:Key="STRING_DRAWERPAGE_TOGGLE_NAVIGATION_DRAWER">Переключить панель навигации</x:String>
|
|
||||||
<!-- ManagedFileChooser -->
|
<!-- ManagedFileChooser -->
|
||||||
<x:String x:Key="STRING_CHOOSER_FILE_NAME">Имя файла</x:String>
|
<x:String x:Key="STRING_CHOOSER_FILE_NAME">Имя файла</x:String>
|
||||||
<x:String x:Key="STRING_CHOOSER_SHOW_HIDDEN_FILES">Показать скрытые файлы</x:String>
|
<x:String x:Key="STRING_CHOOSER_SHOW_HIDDEN_FILES">Показать скрытые файлы</x:String>
|
||||||
@@ -26,4 +24,4 @@
|
|||||||
<x:String x:Key="STRING_CHOOSER_TYPE_COLUMN">Тип</x:String>
|
<x:String x:Key="STRING_CHOOSER_TYPE_COLUMN">Тип</x:String>
|
||||||
<x:String x:Key="STRING_CHOOSER_SIZE_COLUMN">Размер</x:String>
|
<x:String x:Key="STRING_CHOOSER_SIZE_COLUMN">Размер</x:String>
|
||||||
<x:String x:Key="STRING_CHOOSER_PROMPT_FILE_ALREADY_EXISTS">{0} уже существует. Вы хотите заменить его?</x:String>
|
<x:String x:Key="STRING_CHOOSER_PROMPT_FILE_ALREADY_EXISTS">{0} уже существует. Вы хотите заменить его?</x:String>
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
@@ -14,8 +14,6 @@
|
|||||||
<x:String x:Key="STRING_MENU_CUT">Вирізати</x:String>
|
<x:String x:Key="STRING_MENU_CUT">Вирізати</x:String>
|
||||||
<x:String x:Key="STRING_MENU_COPY">Копіювати</x:String>
|
<x:String x:Key="STRING_MENU_COPY">Копіювати</x:String>
|
||||||
<x:String x:Key="STRING_MENU_PASTE">Вставити</x:String>
|
<x:String x:Key="STRING_MENU_PASTE">Вставити</x:String>
|
||||||
<!-- DrawerPage -->
|
|
||||||
<x:String x:Key="STRING_DRAWERPAGE_TOGGLE_NAVIGATION_DRAWER">Перемкнути панель навігації</x:String>
|
|
||||||
<!-- ManagedFileChooser -->
|
<!-- ManagedFileChooser -->
|
||||||
<x:String x:Key="STRING_CHOOSER_FILE_NAME">Ім'я файлу</x:String>
|
<x:String x:Key="STRING_CHOOSER_FILE_NAME">Ім'я файлу</x:String>
|
||||||
<x:String x:Key="STRING_CHOOSER_SHOW_HIDDEN_FILES">Показати приховані папки</x:String>
|
<x:String x:Key="STRING_CHOOSER_SHOW_HIDDEN_FILES">Показати приховані папки</x:String>
|
||||||
@@ -26,4 +24,4 @@
|
|||||||
<x:String x:Key="STRING_CHOOSER_TYPE_COLUMN">Тип</x:String>
|
<x:String x:Key="STRING_CHOOSER_TYPE_COLUMN">Тип</x:String>
|
||||||
<x:String x:Key="STRING_CHOOSER_SIZE_COLUMN">Розмір</x:String>
|
<x:String x:Key="STRING_CHOOSER_SIZE_COLUMN">Розмір</x:String>
|
||||||
<x:String x:Key="STRING_CHOOSER_PROMPT_FILE_ALREADY_EXISTS">{0} уже існує. Ви бажаєте замінити його?</x:String>
|
<x:String x:Key="STRING_CHOOSER_PROMPT_FILE_ALREADY_EXISTS">{0} уже існує. Ви бажаєте замінити його?</x:String>
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
@@ -14,8 +14,6 @@
|
|||||||
<x:String x:Key="STRING_MENU_CUT">剪切</x:String>
|
<x:String x:Key="STRING_MENU_CUT">剪切</x:String>
|
||||||
<x:String x:Key="STRING_MENU_COPY">复制</x:String>
|
<x:String x:Key="STRING_MENU_COPY">复制</x:String>
|
||||||
<x:String x:Key="STRING_MENU_PASTE">粘贴</x:String>
|
<x:String x:Key="STRING_MENU_PASTE">粘贴</x:String>
|
||||||
<!-- DrawerPage -->
|
|
||||||
<x:String x:Key="STRING_DRAWERPAGE_TOGGLE_NAVIGATION_DRAWER">切换导航抽屉</x:String>
|
|
||||||
<!-- ManagedFileChooser -->
|
<!-- ManagedFileChooser -->
|
||||||
<x:String x:Key="STRING_CHOOSER_FILE_NAME">文件名</x:String>
|
<x:String x:Key="STRING_CHOOSER_FILE_NAME">文件名</x:String>
|
||||||
<x:String x:Key="STRING_CHOOSER_SHOW_HIDDEN_FILES">显示隐藏文件</x:String>
|
<x:String x:Key="STRING_CHOOSER_SHOW_HIDDEN_FILES">显示隐藏文件</x:String>
|
||||||
@@ -26,4 +24,4 @@
|
|||||||
<x:String x:Key="STRING_CHOOSER_TYPE_COLUMN">类型</x:String>
|
<x:String x:Key="STRING_CHOOSER_TYPE_COLUMN">类型</x:String>
|
||||||
<x:String x:Key="STRING_CHOOSER_SIZE_COLUMN">大小</x:String>
|
<x:String x:Key="STRING_CHOOSER_SIZE_COLUMN">大小</x:String>
|
||||||
<x:String x:Key="STRING_CHOOSER_PROMPT_FILE_ALREADY_EXISTS">{0} 已经存在。您要替换它吗?</x:String>
|
<x:String x:Key="STRING_CHOOSER_PROMPT_FILE_ALREADY_EXISTS">{0} 已经存在。您要替换它吗?</x:String>
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
@@ -14,8 +14,6 @@
|
|||||||
<x:String x:Key="STRING_MENU_CUT">剪下</x:String>
|
<x:String x:Key="STRING_MENU_CUT">剪下</x:String>
|
||||||
<x:String x:Key="STRING_MENU_COPY">複製</x:String>
|
<x:String x:Key="STRING_MENU_COPY">複製</x:String>
|
||||||
<x:String x:Key="STRING_MENU_PASTE">貼上</x:String>
|
<x:String x:Key="STRING_MENU_PASTE">貼上</x:String>
|
||||||
<!-- DrawerPage -->
|
|
||||||
<x:String x:Key="STRING_DRAWERPAGE_TOGGLE_NAVIGATION_DRAWER">切換導覽抽屜</x:String>
|
|
||||||
<!-- ManagedFileChooser -->
|
<!-- ManagedFileChooser -->
|
||||||
<x:String x:Key="STRING_CHOOSER_FILE_NAME">檔案名</x:String>
|
<x:String x:Key="STRING_CHOOSER_FILE_NAME">檔案名</x:String>
|
||||||
<x:String x:Key="STRING_CHOOSER_SHOW_HIDDEN_FILES">顯示隱藏檔案</x:String>
|
<x:String x:Key="STRING_CHOOSER_SHOW_HIDDEN_FILES">顯示隱藏檔案</x:String>
|
||||||
@@ -26,4 +24,4 @@
|
|||||||
<x:String x:Key="STRING_CHOOSER_TYPE_COLUMN">類型</x:String>
|
<x:String x:Key="STRING_CHOOSER_TYPE_COLUMN">類型</x:String>
|
||||||
<x:String x:Key="STRING_CHOOSER_SIZE_COLUMN">大小</x:String>
|
<x:String x:Key="STRING_CHOOSER_SIZE_COLUMN">大小</x:String>
|
||||||
<x:String x:Key="STRING_CHOOSER_PROMPT_FILE_ALREADY_EXISTS">{0} 已經存在。您要取代它嗎?</x:String>
|
<x:String x:Key="STRING_CHOOSER_PROMPT_FILE_ALREADY_EXISTS">{0} 已經存在。您要取代它嗎?</x:String>
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
@@ -2,8 +2,8 @@
|
|||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFrameworks>net8.0;net10.0</TargetFrameworks>
|
<TargetFrameworks>net8.0;net10.0</TargetFrameworks>
|
||||||
<Version>12.0.1</Version>
|
<Version>12.0.0</Version>
|
||||||
<PackageReleaseNotes>Update to Semi.Avalonia 12.0.1</PackageReleaseNotes>
|
<PackageReleaseNotes>Update to Semi.Avalonia 12.0.0</PackageReleaseNotes>
|
||||||
<Title>Semi.Avalonia</Title>
|
<Title>Semi.Avalonia</Title>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
|
|||||||
@@ -6,4 +6,4 @@
|
|||||||
<StaticResource x:Key="DrawerPageTopBarBackground" ResourceKey="SemiColorBackground1" />
|
<StaticResource x:Key="DrawerPageTopBarBackground" ResourceKey="SemiColorBackground1" />
|
||||||
<!-- Pane button -->
|
<!-- Pane button -->
|
||||||
<StaticResource x:Key="DrawerPagePaneButtonForeground" ResourceKey="SemiColorText0" />
|
<StaticResource x:Key="DrawerPagePaneButtonForeground" ResourceKey="SemiColorText0" />
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
@@ -4,8 +4,4 @@
|
|||||||
|
|
||||||
<!-- DrawerPage pane button -->
|
<!-- DrawerPage pane button -->
|
||||||
<StaticResource x:Key="DrawerPageMenuGlyph" ResourceKey="SemiIconMenu" />
|
<StaticResource x:Key="DrawerPageMenuGlyph" ResourceKey="SemiIconMenu" />
|
||||||
|
|
||||||
<StaticResource x:Key="DrawerPageTitleFontSize" ResourceKey="SemiFontSizeHeader6" />
|
|
||||||
<StaticResource x:Key="DrawerPageTitleFontWeight" ResourceKey="SemiFontWeightBold" />
|
|
||||||
<Thickness x:Key="DrawerPageTitleMargin">8 0 0 0</Thickness>
|
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
|
|||||||
Reference in New Issue
Block a user