Skip to content

Commit

Permalink
feat: close directly if next window is null.
Browse files Browse the repository at this point in the history
  • Loading branch information
rabbitism committed Feb 24, 2025
1 parent aa4507c commit dc2cf01
Show file tree
Hide file tree
Showing 5 changed files with 72 additions and 58 deletions.
4 changes: 2 additions & 2 deletions demo/Ursa.Demo/ViewModels/SplashViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,14 +24,14 @@ private bool OnUpdate()
}
else
{
RequestClose?.Invoke(this, null);
RequestClose?.Invoke(this, true);
return false;
}
}

public void Close()
{
RequestClose?.Invoke(this, null);
RequestClose?.Invoke(this, false);
}

public event EventHandler<object?>? RequestClose;
Expand Down
2 changes: 1 addition & 1 deletion demo/Ursa.Demo/Views/MainSplashWindow.axaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ public MainSplashWindow()
InitializeComponent();
}

protected override async Task<Window> CreateNextWindow()
protected override async Task<Window?> CreateNextWindow()
{
return new MainWindow()
{
Expand Down
98 changes: 52 additions & 46 deletions demo/Ursa.Demo/Views/MvvmSplashWindow.axaml
Original file line number Diff line number Diff line change
@@ -1,48 +1,54 @@
<u:SplashWindow xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:u="https://irihi.tech/ursa"
xmlns:viewModels="clr-namespace:Ursa.Demo.ViewModels"
xmlns:iri="https://irihi.tech/shared"
mc:Ignorable="d"
Width="400" Height="400"
CountDown="{x:Null}"
x:DataType="viewModels:SplashViewModel"
x:Class="Ursa.Demo.Views.MvvmSplashWindow"
Title="MvvmSplashWindow">
<Grid
<u:SplashWindow
x:Class="Ursa.Demo.Views.MvvmSplashWindow"
xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:iri="https://irihi.tech/shared"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:u="https://irihi.tech/ursa"
xmlns:viewModels="clr-namespace:Ursa.Demo.ViewModels"
Title="MvvmSplashWindow"
Width="400"
Height="400"
x:DataType="viewModels:SplashViewModel"
CountDown="{x:Null}"
mc:Ignorable="d">
<Grid
HorizontalAlignment="Center"
VerticalAlignment="Center"
ColumnDefinitions="Auto, Auto"
RowDefinitions="Auto, Auto, Auto">
<iri:IrihiLogo
Grid.Row="0"
Grid.Column="0"
Width="64"
Margin="0,0,16,0"
Fill="{DynamicResource SemiGrey5}" />
<StackPanel Grid.Row="0" Grid.Column="1">
<TextBlock
Classes="H2"
Text="铱泓科技"
Theme="{DynamicResource TitleTextBlock}" />
<TextBlock FontWeight="Bold" Text="IRIHI Technology" />
</StackPanel>
<ProgressBar
Grid.Row="1"
Grid.ColumnSpan="2"
Margin="0,16,0,0"
Value="{Binding Progress}" />
<StackPanel
Grid.Row="2"
Grid.Column="0"
Grid.ColumnSpan="2">
<TextBlock
Margin="0,12,0,0"
HorizontalAlignment="Center"
VerticalAlignment="Center"
ColumnDefinitions="Auto, Auto"
RowDefinitions="Auto, Auto, Auto">
<iri:IrihiLogo
Grid.Row="0"
Grid.Column="0"
Width="64"
Margin="0,0,16,0"
Fill="{DynamicResource SemiGrey5}" />
<StackPanel Grid.Row="0" Grid.Column="1">
<TextBlock
Classes="H2"
Text="铱泓科技"
Theme="{DynamicResource TitleTextBlock}" />
<TextBlock FontWeight="Bold" Text="IRIHI Technology" />
</StackPanel>
<ProgressBar Grid.Row="1" Grid.ColumnSpan="2" Value="{Binding Progress}" Margin="0 16 0 0"/>
<StackPanel
Grid.Row="2"
Grid.Column="0"
Grid.ColumnSpan="2">
<TextBlock
Margin="0,12,0,0"
HorizontalAlignment="Center"
FontSize="14"
Text="聚焦生产力的美学进化" />
<TextBlock
HorizontalAlignment="Center"
FontSize="14"
Text="Aesthetic Evolution of Productivity" />
</StackPanel>
</Grid>
FontSize="14"
Text="聚焦生产力的美学进化" />
<TextBlock
HorizontalAlignment="Center"
FontSize="14"
Text="Aesthetic Evolution of Productivity" />
</StackPanel>
</Grid>
</u:SplashWindow>
12 changes: 8 additions & 4 deletions demo/Ursa.Demo/Views/MvvmSplashWindow.axaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,15 @@ public MvvmSplashWindow()
InitializeComponent();
}

protected override async Task<Window> CreateNextWindow()
protected override async Task<Window?> CreateNextWindow()
{
return new MainWindow()
if (this.DialogResult is true)
{
DataContext = new MainViewViewModel()
};
return new MainWindow()
{
DataContext = new MainViewViewModel()
};
}
return null;
}
}
14 changes: 9 additions & 5 deletions src/Ursa/Windows/SplashWindow.cs
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,8 @@ private void OnDataContextChange(AvaloniaPropertyChangedEventArgs<object?> args)

private void OnContextRequestClose(object? sender, object? args)
{
Close(args);
DialogResult = args;
Close();
}

protected override void OnLoaded(RoutedEventArgs e)
Expand All @@ -46,9 +47,11 @@ protected override void OnLoaded(RoutedEventArgs e)
DispatcherTimer.RunOnce(Close, CountDown.Value);
}
}

protected object? DialogResult { get; private set; }

protected virtual Task<bool> CanClose() => Task.FromResult(true);
protected abstract Task<Window> CreateNextWindow();
protected abstract Task<Window?> CreateNextWindow();

private bool _canClose;

Expand All @@ -62,16 +65,17 @@ protected override sealed async void OnClosing(WindowClosingEventArgs e)
if (_canClose)
{
var nextWindow = await CreateNextWindow();
if (Application.Current?.ApplicationLifetime is IClassicDesktopStyleApplicationLifetime lifetime)
if (Application.Current?.ApplicationLifetime is IClassicDesktopStyleApplicationLifetime lifetime && nextWindow is not null)
{
lifetime.MainWindow = nextWindow;
}
nextWindow.Show();
nextWindow?.Show();
Close();
if (DataContext is IDialogContext idc)
{
idc.Close();
// unregister in advance in case developer try to raise event again.
idc.RequestClose -= OnContextRequestClose;
idc.Close();
}
return;
}
Expand Down

0 comments on commit dc2cf01

Please sign in to comment.