Skip to content

Commit

Permalink
增加退出确认
Browse files Browse the repository at this point in the history
  • Loading branch information
Genteure committed Apr 15, 2019
1 parent 12ac0b7 commit 5473991
Show file tree
Hide file tree
Showing 4 changed files with 115 additions and 5 deletions.
7 changes: 7 additions & 0 deletions BililiveRecorder.WPF/BililiveRecorder.WPF.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,9 @@
</Compile>
<Compile Include="CommandLineOption.cs" />
<Compile Include="EnumerableExtensions.cs" />
<Compile Include="TimedMessageBox.xaml.cs">
<DependentUpon>TimedMessageBox.xaml</DependentUpon>
</Compile>
<Compile Include="ValueConverters.cs" />
<Compile Include="SettingsWindow.xaml.cs">
<DependentUpon>SettingsWindow.xaml</DependentUpon>
Expand Down Expand Up @@ -167,6 +170,10 @@
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="TimedMessageBox.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="UpdateBarUserControl.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
Expand Down
17 changes: 12 additions & 5 deletions BililiveRecorder.WPF/MainWindow.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -120,13 +120,20 @@ private void Window_Loaded(object sender, RoutedEventArgs e)

private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
_AddLog = null;
Recorder.Shutdown();
try
if (new TimedMessageBox { Title = "关闭录播姬?", Message = "确定要关闭录播姬吗?", CountDown = 10 }.ShowDialog() == true)
{
File.WriteAllText(LAST_WORK_DIR_FILE, Recorder.Config.WorkDirectory);
_AddLog = null;
Recorder.Shutdown();
try
{
File.WriteAllText(LAST_WORK_DIR_FILE, Recorder.Config.WorkDirectory);
}
catch (Exception) { }
}
else
{
e.Cancel = true;
}
catch (Exception) { }
}

private void TextBlock_MouseRightButtonUp(object sender, MouseButtonEventArgs e)
Expand Down
27 changes: 27 additions & 0 deletions BililiveRecorder.WPF/TimedMessageBox.xaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<Window x:Class="BililiveRecorder.WPF.TimedMessageBox"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
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:local="clr-namespace:BililiveRecorder.WPF"
mc:Ignorable="d" ResizeMode="NoResize"
Title="TimedMessageBox" Height="200" Width="320"
Loaded="Window_Loaded">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="5*"/>
<RowDefinition Height="3*"/>
</Grid.RowDefinitions>
<TextBlock Grid.ColumnSpan="2" VerticalAlignment="Center" TextAlignment="Center" TextWrapping="Wrap" FontSize="16" Text="{Binding Message}"/>
<Button Grid.Row="1" Grid.Column="0" Margin="10" FontSize="20" Click="ConfirmClick">
确定
</Button>
<Button Grid.Row="1" Grid.Column="1" Margin="10" Click="CancelClick">
<TextBlock FontSize="20">取消 (<TextBlock Text="{Binding CountDown}"/>)</TextBlock>
</Button>
</Grid>
</Window>
69 changes: 69 additions & 0 deletions BililiveRecorder.WPF/TimedMessageBox.xaml.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Windows;
using System.Windows.Threading;

namespace BililiveRecorder.WPF
{
/// <summary>
/// TimedMessageBox.xaml 的交互逻辑
/// </summary>
public partial class TimedMessageBox : Window, INotifyPropertyChanged
{
public string Message { get => _message; set => SetField(ref _message, value); }
private string _message = string.Empty;

public int CountDown { get => _countdown; set => SetField(ref _countdown, value); }
private int _countdown = 10;

private DispatcherTimer timer;

public TimedMessageBox()
{
timer = new DispatcherTimer { Interval = TimeSpan.FromSeconds(1), IsEnabled = false };
timer.Tick += (sender, e) =>
{
CountDown -= 1;
if (CountDown <= 0)
{
Cancel();
timer.Stop();
timer = null;
}
};

DataContext = this;

InitializeComponent();
}

private void ConfirmClick(object sender, RoutedEventArgs e)
{
DialogResult = true;
Close();
}

private void CancelClick(object sender, RoutedEventArgs e) => Cancel();

private void Cancel()
{
DialogResult = false;
Close();
}

private void Window_Loaded(object sender, RoutedEventArgs e)
{
timer?.Start();
}

public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
protected bool SetField<T>(ref T field, T value, [CallerMemberName] string propertyName = "")
{
if (EqualityComparer<T>.Default.Equals(field, value)) { return false; }
field = value; OnPropertyChanged(propertyName); return true;
}
}
}

0 comments on commit 5473991

Please sign in to comment.