Files
personal-toolbox/PersonalToolBox/Views/ToolEditWindow.xaml
home-PC b715904439 新增工具/组合随软件启动自动运行功能
- ToolItem 模型新增 AutoRunOnStart 属性,持久化到配置文件
- App.OnStartup 启动后自动执行标记为自启动的工具/组合(间隔500ms)
- 工具编辑窗口和组合编辑窗口新增「随软件启动自动运行」CheckBox
- 主界面工具卡片左上角 Rocket 角标标识已启用自启的项目
2026-05-10 02:51:29 +08:00

270 lines
14 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<Window x:Class="PersonalToolBox.Views.ToolEditWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:models="clr-namespace:PersonalToolBox.Models"
xmlns:fa="http://schemas.awesome.incremented/wpf/xaml/fontawesome.sharp"
Title="{Binding WindowTitle}" Height="480" Width="520"
WindowStartupLocation="CenterOwner"
ResizeMode="NoResize"
Background="{DynamicResource Theme.Background}">
<Window.Resources>
<!-- ComboBox 下拉项样式 -->
<Style TargetType="ComboBoxItem">
<Setter Property="Background" Value="{DynamicResource Theme.InputBackground}"/>
<Setter Property="Foreground" Value="{DynamicResource Theme.Foreground}"/>
<Setter Property="Padding" Value="6,3"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ComboBoxItem">
<Border x:Name="Border"
Background="{TemplateBinding Background}"
Padding="{TemplateBinding Padding}">
<ContentPresenter VerticalAlignment="Center"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsHighlighted" Value="True">
<Setter TargetName="Border" Property="Background" Value="{DynamicResource Theme.Accent}"/>
<Setter Property="Foreground" Value="{DynamicResource Theme.ButtonForeground}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- ComboBox 整体样式(兼容 DisplayMemberPath 和 ItemTemplate -->
<Style TargetType="ComboBox">
<Setter Property="Background" Value="{DynamicResource Theme.InputBackground}"/>
<Setter Property="Foreground" Value="{DynamicResource Theme.Foreground}"/>
<Setter Property="BorderBrush" Value="{DynamicResource Theme.InputBorder}"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ComboBox">
<Grid>
<ToggleButton x:Name="ToggleButton"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
IsChecked="{Binding IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}"
ClickMode="Press">
<ToggleButton.Template>
<ControlTemplate TargetType="ToggleButton">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Padding="{TemplateBinding Padding}">
<Grid>
<ContentPresenter x:Name="ContentSite"
Content="{Binding SelectionBoxItem, RelativeSource={RelativeSource AncestorType={x:Type ComboBox}}}"
ContentTemplate="{Binding SelectionBoxItemTemplate, RelativeSource={RelativeSource AncestorType={x:Type ComboBox}}}"
ContentStringFormat="{Binding SelectionBoxItemStringFormat, RelativeSource={RelativeSource AncestorType={x:Type ComboBox}}}"
VerticalAlignment="Center"
HorizontalAlignment="Left"
Margin="6,0,0,0"/>
<Path x:Name="Arrow" Data="M0,0 L4,4 8,0" Stroke="{TemplateBinding Foreground}"
StrokeThickness="1.5" HorizontalAlignment="Right" Width="8"
VerticalAlignment="Center" Margin="0,0,6,0"/>
</Grid>
</Border>
</ControlTemplate>
</ToggleButton.Template>
</ToggleButton>
<Popup x:Name="Popup"
IsOpen="{TemplateBinding IsDropDownOpen}"
Placement="Bottom"
AllowsTransparency="True"
Focusable="False"
PopupAnimation="Slide">
<Grid MaxHeight="{TemplateBinding MaxDropDownHeight}"
MinWidth="{TemplateBinding ActualWidth}">
<Border Background="{DynamicResource Theme.InputBackground}"
BorderBrush="{DynamicResource Theme.InputBorder}"
BorderThickness="1"
SnapsToDevicePixels="True">
<ScrollViewer CanContentScroll="False">
<ItemsPresenter/>
</ScrollViewer>
</Border>
</Grid>
</Popup>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<Grid Margin="20">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="80"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="30"/>
</Grid.ColumnDefinitions>
<!-- 工具名称 -->
<TextBlock Grid.Row="0" Grid.Column="0"
Text="名称:"
Foreground="{DynamicResource Theme.Foreground}"
VerticalAlignment="Center" Margin="0,0,0,12"/>
<TextBox Grid.Row="0" Grid.Column="1" Grid.ColumnSpan="2"
Text="{Binding Name, UpdateSourceTrigger=PropertyChanged}"
Background="{DynamicResource Theme.InputBackground}"
Foreground="{DynamicResource Theme.Foreground}"
BorderBrush="{DynamicResource Theme.InputBorder}"
VerticalContentAlignment="Center"
Height="30" Margin="0,0,0,12" Padding="6,0"/>
<!-- 工具图标 -->
<TextBlock Grid.Row="1" Grid.Column="0"
Text="图标:"
Foreground="{DynamicResource Theme.Foreground}"
VerticalAlignment="Center" Margin="0,0,0,12"/>
<ComboBox Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="2"
ItemsSource="{Binding AvailableIconsView}"
SelectedItem="{Binding SelectedIcon}"
Height="30" Margin="0,0,0,12" Padding="4,0">
<ComboBox.GroupStyle>
<GroupStyle>
<GroupStyle.HeaderTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}"
FontWeight="SemiBold"
Foreground="{DynamicResource Theme.Accent}"
FontSize="11"
Margin="10,6,0,2"/>
</DataTemplate>
</GroupStyle.HeaderTemplate>
</GroupStyle>
</ComboBox.GroupStyle>
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<fa:IconBlock Icon="{Binding Icon}"
FontSize="16" Width="28"
Foreground="{DynamicResource Theme.Accent}"
VerticalAlignment="Center"/>
<TextBlock Text="{Binding Name}"
Foreground="{DynamicResource Theme.Foreground}"
VerticalAlignment="Center" Margin="8,0,0,0"/>
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<!-- 工具路径 -->
<TextBlock Grid.Row="2" Grid.Column="0"
Text="路径:"
Foreground="{DynamicResource Theme.Foreground}"
VerticalAlignment="Center" Margin="0,0,0,12"/>
<TextBox Grid.Row="2" Grid.Column="1"
Text="{Binding ExecutablePath, UpdateSourceTrigger=PropertyChanged}"
Background="{DynamicResource Theme.InputBackground}"
Foreground="{DynamicResource Theme.Foreground}"
BorderBrush="{DynamicResource Theme.InputBorder}"
VerticalContentAlignment="Center"
Height="30" Margin="0,0,0,12" Padding="6,0"/>
<Button Grid.Row="2" Grid.Column="2"
Content="..."
Command="{Binding BrowseFileCommand}"
Background="{DynamicResource Theme.ButtonBackground}"
Foreground="{DynamicResource Theme.ButtonForeground}"
BorderThickness="0"
Width="24" Height="24" Margin="6,3,0,12"
FontWeight="Bold" Cursor="Hand"/>
<!-- 运行参数 -->
<TextBlock Grid.Row="3" Grid.Column="0"
Text="参数:"
Foreground="{DynamicResource Theme.Foreground}"
VerticalAlignment="Center" Margin="0,0,0,12"/>
<TextBox Grid.Row="3" Grid.Column="1" Grid.ColumnSpan="2"
Text="{Binding Arguments, UpdateSourceTrigger=PropertyChanged}"
Background="{DynamicResource Theme.InputBackground}"
Foreground="{DynamicResource Theme.Foreground}"
BorderBrush="{DynamicResource Theme.InputBorder}"
VerticalContentAlignment="Center"
Height="30" Margin="0,0,0,12" Padding="6,0"/>
<!-- 所属分类 -->
<TextBlock Grid.Row="4" Grid.Column="0"
Text="分类:"
Foreground="{DynamicResource Theme.Foreground}"
VerticalAlignment="Center" Margin="0,0,0,12"/>
<ComboBox Grid.Row="4" Grid.Column="1" Grid.ColumnSpan="2"
ItemsSource="{Binding Categories}"
SelectedItem="{Binding SelectedCategory}"
DisplayMemberPath="Name"
Height="30" Margin="0,0,0,12" Padding="4,0"/>
<!-- 全局快捷键 -->
<TextBlock Grid.Row="5" Grid.Column="0"
Text="快捷键:"
Foreground="{DynamicResource Theme.Foreground}"
VerticalAlignment="Center" Margin="0,0,0,12"/>
<TextBox Grid.Row="5" Grid.Column="1" Grid.ColumnSpan="2"
Text="{Binding HotKey, UpdateSourceTrigger=PropertyChanged}"
Background="{DynamicResource Theme.InputBackground}"
Foreground="{DynamicResource Theme.Foreground}"
BorderBrush="{DynamicResource Theme.InputBorder}"
VerticalContentAlignment="Center"
Height="30" Margin="0,0,0,12" Padding="6,0"/>
<!-- 提示文字 -->
<TextBlock Grid.Row="6" Grid.Column="1" Grid.ColumnSpan="2"
Text="快捷键格式示例: Ctrl+Alt+T"
Foreground="{DynamicResource Theme.TextSecondary}"
FontSize="11" Margin="0,0,0,16"/>
<!-- 自动运行 -->
<CheckBox Grid.Row="7" Grid.Column="1" Grid.ColumnSpan="2"
IsChecked="{Binding AutoRunOnStart}"
Content="随软件启动自动运行"
Foreground="{DynamicResource Theme.Foreground}"
VerticalAlignment="Center"
Margin="0,0,0,12"/>
<!-- 分隔线 -->
<Border Grid.Row="8" Grid.ColumnSpan="3"
BorderBrush="{DynamicResource Theme.CardBorder}"
BorderThickness="0,1,0,0" Margin="0,0,0,14"/>
<!-- 按钮 -->
<StackPanel Grid.Row="9" Grid.Column="1" Grid.ColumnSpan="2"
Orientation="Horizontal" HorizontalAlignment="Right">
<Button Content="保存"
Command="{Binding SaveCommand}"
Background="{DynamicResource Theme.ButtonBackground}"
Foreground="{DynamicResource Theme.ButtonForeground}"
BorderThickness="0"
Width="80" Height="30"
FontSize="13"
Cursor="Hand"
Margin="0,0,10,0"/>
<Button Content="取消"
Command="{Binding CancelCommand}"
Background="{DynamicResource Theme.CardBackground}"
Foreground="{DynamicResource Theme.Foreground}"
BorderBrush="{DynamicResource Theme.CardBorder}"
BorderThickness="1"
Width="80" Height="30"
FontSize="13"
Cursor="Hand"/>
</StackPanel>
</Grid>
</Window>