Skip to content

Commit e1aee9f

Browse files
committed
feat: Upgrade UI.
1 parent b716fed commit e1aee9f

File tree

5 files changed

+96
-52
lines changed

5 files changed

+96
-52
lines changed
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
using Avalonia.Data.Converters;
2+
3+
namespace Common.Avalonia.Converters;
4+
5+
public class ProgressConverter
6+
{
7+
public static readonly IValueConverter ProgressToOpacityConverter =
8+
new FuncValueConverter<double, double>(progress =>
9+
{
10+
double MaxOpacity = 1;
11+
double MinOpacity = 0.2;
12+
double MaxProgress = 100;
13+
double range = MaxOpacity - MinOpacity;
14+
double opacity = MinOpacity + progress / MaxProgress * range;
15+
16+
return Math.Clamp(opacity, MinOpacity, MaxOpacity);
17+
});
18+
}

src/Upgrade.Avalonia/ViewModels/MainViewViewModel.cs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,14 @@
66
using Common.Avalonia.Services;
77
using CommunityToolkit.Mvvm.ComponentModel;
88
using CommunityToolkit.Mvvm.Input;
9+
using Ursa.Controls;
910

1011
namespace Upgrade.Avalonia.ViewModels;
1112

1213
public partial class MainViewViewModel : ViewModelBase
1314
{
1415
private readonly IDownloadService _downloadService;
15-
private readonly WindowNotificationManager _notificationManager;
16+
private readonly WindowToastManager _notificationManager;
1617

1718
[ObservableProperty] private DownloadStatistics _statistics;
1819

@@ -22,7 +23,7 @@ [ObservableProperty] [NotifyCanExecuteChangedFor(nameof(StartCommand), nameof(St
2223
public MainViewViewModel(IDownloadService downloadService)
2324
{
2425
_downloadService = downloadService;
25-
_notificationManager = new WindowNotificationManager(ResolveDefaultTopLevel());
26+
_notificationManager = new WindowToastManager(ResolveDefaultTopLevel());
2627

2728
_downloadService.ProgressChanged += stats => Statistics = stats;
2829
_downloadService.StatusChanged += status => Status = status;
@@ -51,10 +52,10 @@ public MainViewViewModel(IDownloadService downloadService)
5152

5253
private void OnDownloadCompleted()
5354
{
54-
_notificationManager.Show(new Notification(
55-
"更新完成",
56-
$"已更新到最新版本,版本号:{Statistics.Version}",
57-
NotificationType.Success));
55+
_notificationManager.Show(
56+
new Toast($"已更新到最新版本,版本号:{Statistics.Version}"),
57+
type: NotificationType.Success,
58+
classes: ["Light"]);
5859
}
5960

6061
private static TopLevel? ResolveDefaultTopLevel()

src/Upgrade.Avalonia/Views/MainView.axaml

Lines changed: 39 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
xmlns:vm="clr-namespace:Upgrade.Avalonia.ViewModels"
77
xmlns:services="clr-namespace:Common.Avalonia.Services;assembly=Common.Avalonia"
88
xmlns:cvt="clr-namespace:Common.Avalonia.Converters;assembly=Common.Avalonia"
9+
xmlns:u="https://irihi.tech/ursa"
910
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
1011
x:Class="Upgrade.Avalonia.Views.MainView"
1112
x:DataType="vm:MainViewViewModel">
@@ -16,18 +17,45 @@
1617
</UserControl.Resources>
1718

1819
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center" Spacing="10" MinWidth="550">
19-
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
20-
<Image
21-
Margin="30"
22-
Width="150"
23-
Height="150"
24-
Source="/Assets/GeneralUpdate.png" />
25-
<Image
26-
Margin="30"
20+
<Panel>
21+
<ProgressBar
22+
Name="Bar"
23+
Theme="{DynamicResource ProgressRing}"
24+
Width="200"
25+
Height="200"
26+
Classes.Success="{Binding Status,
27+
Converter={StaticResource EnumToBooleanConverter},
28+
ConverterParameter={x:Static services:DownloadStatus.Completed},
29+
Mode=OneWay}"
30+
Value="{Binding Statistics.ProgressPercentage}">
31+
<ProgressBar.Styles>
32+
<Style Selector="ProgressBar">
33+
<Setter Property="Transitions">
34+
<Transitions>
35+
<DoubleTransition Easing="CubicEaseInOut" Property="Value" Duration="0:0:0.3" />
36+
<BrushTransition Property="Foreground" Duration="0:0:0.3" />
37+
</Transitions>
38+
</Setter>
39+
</Style>
40+
</ProgressBar.Styles>
41+
</ProgressBar>
42+
<u:Avatar
2743
Width="150"
2844
Height="150"
29-
Source="{SvgImage /Assets/Ursa.svg}" />
30-
</StackPanel>
45+
Opacity="{Binding Statistics.ProgressPercentage,
46+
Converter={x:Static cvt:ProgressConverter.ProgressToOpacityConverter}}"
47+
Source="/Assets/GeneralUpdate.png">
48+
<u:Avatar.Styles>
49+
<Style Selector="Image">
50+
<Setter Property="Transitions">
51+
<Transitions>
52+
<DoubleTransition Easing="CubicEaseInOut" Property="Opacity" Duration="0:0:0.3" />
53+
</Transitions>
54+
</Setter>
55+
</Style>
56+
</u:Avatar.Styles>
57+
</u:Avatar>
58+
</Panel>
3159

3260
<SelectableTextBlock
3361
HorizontalAlignment="Center"
@@ -66,25 +94,7 @@
6694
Text="{Binding Status,Converter={x:Static cvt:EnumConverter.EnumToDescriptionConverter}}" />
6795
</Panel>
6896

69-
<ProgressBar
70-
Name="Bar"
71-
ShowProgressText="True"
72-
Classes.Success="{Binding Status,
73-
Converter={StaticResource EnumToBooleanConverter},
74-
ConverterParameter={x:Static services:DownloadStatus.Completed},
75-
Mode=OneWay}"
76-
Value="{Binding Statistics.ProgressPercentage}">
77-
<ProgressBar.Styles>
78-
<Style Selector="ProgressBar">
79-
<Setter Property="Transitions">
80-
<Transitions>
81-
<DoubleTransition Easing="CubicEaseInOut" Property="Value" Duration="0:0:0.3" />
82-
<BrushTransition Property="Foreground" Duration="0:0:0.3" />
83-
</Transitions>
84-
</Setter>
85-
</Style>
86-
</ProgressBar.Styles>
87-
</ProgressBar>
97+
8898
<Border
8999
Padding="10"
90100
Background="{DynamicResource SemiBackground0Color}"
Lines changed: 30 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,31 @@
1-
<Window xmlns="https://github.com/avaloniaui"
2-
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
3-
xmlns:vm="clr-namespace:Upgrade.Avalonia.ViewModels"
4-
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
5-
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
6-
xmlns:views="clr-namespace:Upgrade.Avalonia.Views"
7-
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
8-
x:Class="Upgrade.Avalonia.Views.MainWindow"
9-
x:DataType="vm:MainWindowViewModel"
10-
Icon="/Assets/avalonia-logo.ico"
11-
RequestedThemeVariant="Dark"
12-
Width="800" Height="450"
13-
WindowStartupLocation="CenterScreen"
14-
Title="General Update 服务端">
1+
<u:UrsaWindow
2+
xmlns="https://github.com/avaloniaui"
3+
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4+
xmlns:vm="clr-namespace:Upgrade.Avalonia.ViewModels"
5+
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
6+
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
7+
xmlns:views="clr-namespace:Upgrade.Avalonia.Views"
8+
xmlns:u="https://irihi.tech/ursa"
9+
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
10+
x:Class="Upgrade.Avalonia.Views.MainWindow"
11+
x:DataType="vm:MainWindowViewModel"
12+
Icon="/Assets/avalonia-logo.ico"
13+
Width="800" Height="450"
14+
WindowStartupLocation="CenterScreen"
15+
Title="General Update 服务端">
16+
<u:UrsaWindow.RightContent>
17+
<StackPanel Orientation="Horizontal">
18+
<u:ThemeToggleButton
19+
Padding="8"
20+
IsThreeState="True"
21+
Mode="Controller">
22+
<u:ThemeToggleButton.Styles>
23+
<Style Selector="u|ThemeToggleButton /template/ PathIcon#PART_Icon">
24+
<Setter Property="Theme" Value="{StaticResource InnerPathIcon}" />
25+
</Style>
26+
</u:ThemeToggleButton.Styles>
27+
</u:ThemeToggleButton>
28+
</StackPanel>
29+
</u:UrsaWindow.RightContent>
1530
<views:MainView />
16-
</Window>
31+
</u:UrsaWindow>

src/Upgrade.Avalonia/Views/MainWindow.axaml.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
using Avalonia.Controls;
21
using Avalonia.Interactivity;
32
using Microsoft.Extensions.DependencyInjection;
43
using Upgrade.Avalonia.ViewModels;
4+
using Ursa.Controls;
55

66
namespace Upgrade.Avalonia.Views;
77

8-
public partial class MainWindow : Window
8+
public partial class MainWindow : UrsaWindow
99
{
1010
public MainWindow()
1111
{

0 commit comments

Comments
 (0)