mirror of
https://github.com/babalae/better-genshin-impact.git
synced 2026-05-25 10:05:49 +08:00
引入新的 CronSchedulePicker 控件,提供预设(每日/每周)和手动两种输入模式,改善用户体验。用户可通过直观界面选择执行时间,无需手动编写复杂的 Cron 表达式。同时更新了默认触发时间并优化了相关验证逻辑。
168 lines
8.7 KiB
XML
168 lines
8.7 KiB
XML
<ui:FluentWindow x:Class="BetterGenshinImpact.View.Windows.GearTask.AddTriggerDialog"
|
|
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:ui="http://schemas.lepo.co/wpfui/2022/xaml"
|
|
xmlns:gearTask="clr-namespace:BetterGenshinImpact.ViewModel.Windows.GearTask"
|
|
xmlns:converters="clr-namespace:BetterGenshinImpact.View.Converters"
|
|
xmlns:hotKey="clr-namespace:BetterGenshinImpact.View.Controls.HotKey"
|
|
xmlns:controls="clr-namespace:BetterGenshinImpact.View.Controls"
|
|
d:DataContext="{d:DesignInstance Type=gearTask:AddTriggerDialogViewModel}"
|
|
Width="500"
|
|
Height="450"
|
|
MinWidth="450"
|
|
MinHeight="400"
|
|
ui:Design.Background="{DynamicResource ApplicationBackgroundBrush}"
|
|
ui:Design.Foreground="{DynamicResource TextFillColorPrimaryBrush}"
|
|
ExtendsContentIntoTitleBar="True"
|
|
FontFamily="{DynamicResource TextThemeFontFamily}"
|
|
ResizeMode="NoResize"
|
|
WindowStartupLocation="CenterOwner"
|
|
WindowStyle="SingleBorderWindow"
|
|
WindowBackdropType="Auto"
|
|
mc:Ignorable="d">
|
|
|
|
<ui:FluentWindow.Resources>
|
|
<converters:EnumToVisibilityConverter x:Key="EnumToVisibilityConverter" />
|
|
</ui:FluentWindow.Resources>
|
|
|
|
<Grid>
|
|
<Grid.RowDefinitions>
|
|
<RowDefinition Height="Auto" />
|
|
<RowDefinition Height="*" />
|
|
<RowDefinition Height="Auto" />
|
|
</Grid.RowDefinitions>
|
|
|
|
<!-- 标题栏 -->
|
|
<ui:TitleBar Grid.Row="0" Title="{Binding DialogTitle}">
|
|
<ui:TitleBar.Icon>
|
|
<ui:ImageIcon Source="pack://application:,,,/Resources/Images/logo.png" />
|
|
</ui:TitleBar.Icon>
|
|
</ui:TitleBar>
|
|
|
|
<!-- 主要内容 -->
|
|
<ScrollViewer Grid.Row="1" Margin="20" VerticalScrollBarVisibility="Auto">
|
|
<StackPanel>
|
|
|
|
<!-- 触发器名称 -->
|
|
<StackPanel>
|
|
<ui:TextBlock Text="触发器名称" FontWeight="SemiBold" Margin="0,0,0,8" />
|
|
<ui:TextBox x:Name="TriggerNameTextBox"
|
|
Text="{Binding TriggerName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
|
|
PlaceholderText="请输入触发器名称" />
|
|
</StackPanel>
|
|
|
|
<!-- 触发器类型 -->
|
|
<StackPanel Margin="0,16,0,0">
|
|
<ui:TextBlock Text="触发器类型" FontWeight="SemiBold" Margin="0,0,0,8" />
|
|
<ComboBox ItemsSource="{Binding TriggerTypes}"
|
|
SelectedValue="{Binding SelectedTriggerType, Mode=TwoWay}"
|
|
SelectedValuePath="Value"
|
|
DisplayMemberPath="DisplayName"
|
|
IsEnabled="{Binding IsTriggerTypeSelectionEnabled}" />
|
|
</StackPanel>
|
|
|
|
<!-- 定时触发设置 -->
|
|
<StackPanel Margin="0,16,0,0"
|
|
Visibility="{Binding SelectedTriggerType, Converter={StaticResource EnumToVisibilityConverter}, ConverterParameter=Timed}">
|
|
<ui:TextBlock Text="定时规则" FontWeight="SemiBold" Margin="0,0,0,8" />
|
|
<ComboBox ItemsSource="{Binding CronInputModes}"
|
|
SelectedValue="{Binding SelectedCronInputMode, Mode=TwoWay}"
|
|
SelectedValuePath="Value"
|
|
DisplayMemberPath="DisplayName" />
|
|
|
|
<StackPanel Margin="0,8,0,0"
|
|
Visibility="{Binding SelectedCronInputMode, Converter={StaticResource EnumToVisibilityConverter}, ConverterParameter=Preset}">
|
|
<controls:CronSchedulePicker CronExpression="{Binding CronExpression, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
|
|
</StackPanel>
|
|
|
|
<StackPanel Margin="0,8,0,0"
|
|
Visibility="{Binding SelectedCronInputMode, Converter={StaticResource EnumToVisibilityConverter}, ConverterParameter=Manual}">
|
|
<ui:TextBox Text="{Binding CronExpression, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
|
|
PlaceholderText="例如: 0 0 8 * * ? (每天8点)"
|
|
FontFamily="Consolas" />
|
|
</StackPanel>
|
|
|
|
<ui:TextBlock Text="最终格式: 秒 分 时 日 月 星期 [年]"
|
|
FontSize="12"
|
|
Foreground="{DynamicResource TextFillColorSecondaryBrush}"
|
|
Margin="0,4,0,0" />
|
|
</StackPanel>
|
|
|
|
<!-- 热键触发设置 -->
|
|
<StackPanel Margin="0,16,0,0"
|
|
Visibility="{Binding SelectedTriggerType, Converter={StaticResource EnumToVisibilityConverter}, ConverterParameter=Hotkey}">
|
|
<ui:TextBlock Text="快捷键设置" FontWeight="SemiBold" Margin="0,0,0,8" />
|
|
|
|
<!-- 快捷键类型选择 -->
|
|
<Grid Margin="0,0,0,8">
|
|
<Grid.ColumnDefinitions>
|
|
<ColumnDefinition Width="100" />
|
|
<ColumnDefinition Width="*" />
|
|
</Grid.ColumnDefinitions>
|
|
|
|
<ui:TextBlock Grid.Column="0"
|
|
Text="快捷键类型"
|
|
VerticalAlignment="Center" />
|
|
|
|
<ui:Button Grid.Column="1"
|
|
Height="33"
|
|
HorizontalAlignment="Left"
|
|
Command="{Binding SwitchHotKeyTypeCommand}"
|
|
Content="{Binding HotkeyTypeName, Mode=OneWay}"
|
|
MinWidth="100" />
|
|
</Grid>
|
|
|
|
<!-- 快捷键配置 -->
|
|
<Grid>
|
|
<Grid.ColumnDefinitions>
|
|
<ColumnDefinition Width="100" />
|
|
<ColumnDefinition Width="*" />
|
|
</Grid.ColumnDefinitions>
|
|
|
|
<ui:TextBlock Grid.Column="0"
|
|
Text="配置快捷键"
|
|
VerticalAlignment="Center" />
|
|
|
|
<hotKey:HotKeyTextBox Grid.Column="1"
|
|
Padding="16,6,16,6"
|
|
VerticalAlignment="Center"
|
|
HotKeyTypeName="{Binding HotkeyTypeName, Mode=OneWay}"
|
|
Hotkey="{Binding SelectedHotkey}"
|
|
Style="{StaticResource DefaultTextBoxStyle}"
|
|
TextAlignment="Center" />
|
|
</Grid>
|
|
</StackPanel>
|
|
|
|
<!-- 关联任务 -->
|
|
<StackPanel Margin="0,16,0,0">
|
|
<ui:TextBlock Text="关联任务定义" FontWeight="SemiBold" Margin="0,0,0,8" />
|
|
<ComboBox ItemsSource="{Binding AvailableTaskDefinitions}"
|
|
SelectedItem="{Binding SelectedTaskDefinitionName, Mode=TwoWay}"
|
|
IsEditable="True" />
|
|
</StackPanel>
|
|
|
|
</StackPanel>
|
|
</ScrollViewer>
|
|
|
|
<!-- 按钮栏 -->
|
|
<Border Grid.Row="2"
|
|
BorderBrush="{DynamicResource ControlStrokeColorDefaultBrush}"
|
|
BorderThickness="0,1,0,0"
|
|
Padding="20,16">
|
|
<StackPanel Orientation="Horizontal"
|
|
HorizontalAlignment="Right">
|
|
<ui:Button Content="取消"
|
|
Command="{Binding CancelCommand}"
|
|
Appearance="Secondary"
|
|
MinWidth="80" />
|
|
<ui:Button Content="确定"
|
|
Command="{Binding ConfirmCommand}"
|
|
Appearance="Primary"
|
|
MinWidth="80" />
|
|
</StackPanel>
|
|
</Border>
|
|
</Grid>
|
|
</ui:FluentWindow>
|