Files
better-genshin-impact/BetterGenshinImpact/View/Windows/GearTask/PathingTaskSelectionWindow.xaml

244 lines
13 KiB
XML

<ui:FluentWindow x:Class="BetterGenshinImpact.View.Windows.GearTask.PathingTaskSelectionWindow"
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:local="clr-namespace:BetterGenshinImpact.View.Windows.GearTask"
xmlns:vm="clr-namespace:BetterGenshinImpact.ViewModel.Windows.GearTask"
mc:Ignorable="d"
Title="选择地图追踪任务"
Height="800"
Width="1100"
MinHeight="500"
MinWidth="700"
WindowStartupLocation="CenterOwner"
Background="{DynamicResource ApplicationBackgroundBrush}"
ExtendsContentIntoTitleBar="True"
WindowBackdropType="Mica"
d:DataContext="{d:DesignInstance Type=vm:PathingTaskSelectionViewModel}">
<ui:FluentWindow.Resources>
<BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" />
<local:BooleanToVisibilityParameterConverter x:Key="BooleanToVisibilityParameterConverter" />
<local:NullToVisibilityConverter x:Key="NullToVisibilityConverter" />
<Style x:Key="IconImageStyle" TargetType="Image">
<Setter Property="Width" Value="16" />
<Setter Property="Height" Value="16" />
<Setter Property="Margin" Value="0,0,8,0" />
</Style>
</ui:FluentWindow.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<!-- 标题栏 -->
<ui:TitleBar Grid.Row="0"
Title="选择地图追踪任务"
Icon="{ui:SymbolIcon Navigation24}" />
<!-- 主内容区域 -->
<Grid Grid.Row="1" Margin="16">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<!-- 主内容区域 -->
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="2*" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="4*" />
</Grid.ColumnDefinitions>
<!-- 左侧任务列表 -->
<ui:Border Grid.Column="0"
Background="{DynamicResource CardBackground}"
BorderBrush="{DynamicResource CardBorderBrush}"
BorderThickness="1"
CornerRadius="{DynamicResource ControlCornerRadius}"
Padding="8">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<!-- 搜索框 -->
<ui:TextBox Grid.Row="0"
Text="{Binding SearchKeyword, UpdateSourceTrigger=PropertyChanged}"
PlaceholderText="搜索地图追踪任务..."
Icon="{ui:SymbolIcon Search24}"
Margin="0,0,0,8" />
<!-- TreeView -->
<TreeView Grid.Row="1"
ItemsSource="{Binding FilteredPathingTasks}"
Background="Transparent"
BorderThickness="0"
x:Name="TaskTreeView">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Children}">
<Grid Margin="4">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<!-- 图标 -->
<Grid Grid.Column="0" Width="20" Height="20" Margin="0,0,8,0"
VerticalAlignment="Center">
<!-- WPF图标 -->
<ui:SymbolIcon
Symbol="{Binding IsDirectory, Converter={x:Static local:PathingTaskSelectionWindow.DirectoryToSymbolConverter}}"
FontSize="16"
VerticalAlignment="Center"
Visibility="{Binding UseSystemIcon, Converter={StaticResource BooleanToVisibilityConverter}}" />
</Grid>
<!-- 任务信息 -->
<StackPanel Grid.Column="1">
<ui:TextBlock Text="{Binding Name}"
FontWeight="Medium"
TextTrimming="CharacterEllipsis" />
</StackPanel>
</Grid>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
</Grid>
</ui:Border>
<!-- 分隔线 -->
<GridSplitter Grid.Column="1"
Width="8"
HorizontalAlignment="Center"
VerticalAlignment="Stretch"
Background="Transparent"
ResizeBehavior="PreviousAndNext" />
<!-- 右侧详情区域 -->
<ui:Border Grid.Column="2"
Background="{DynamicResource CardBackground}"
BorderBrush="{DynamicResource CardBorderBrush}"
BorderThickness="1"
CornerRadius="{DynamicResource ControlCornerRadius}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<!-- 详情标题 -->
<ui:TextBlock Grid.Row="0"
Text="{Binding DisplayContentType, StringFormat={}{0} 内容}"
FontWeight="SemiBold"
Margin="12,12,12,8"
Visibility="{Binding SelectedTask, Converter={StaticResource NullToVisibilityConverter}}" />
<!-- 详情内容 -->
<ScrollViewer Grid.Row="1"
VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Auto"
Margin="12,0,12,12"
Visibility="{Binding SelectedTask, Converter={StaticResource NullToVisibilityConverter}}">
<ui:TextBox Text="{Binding DisplayContent}"
IsReadOnly="True"
TextWrapping="Wrap"
AcceptsReturn="True"
VerticalScrollBarVisibility="Disabled"
HorizontalScrollBarVisibility="Disabled"
BorderThickness="0"
Background="Transparent"
FontFamily="Consolas" />
</ScrollViewer>
<!-- 空状态提示 -->
<StackPanel Grid.Row="1"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Visibility="{Binding SelectedTask, Converter={StaticResource NullToVisibilityConverter}, ConverterParameter=Invert}">
<ui:SymbolIcon Symbol="Cursor24"
FontSize="48"
Foreground="{DynamicResource TextFillColorTertiaryBrush}"
Margin="0,0,0,12" />
<ui:TextBlock Text="请选择一个地图追踪任务查看详情"
Foreground="{DynamicResource TextFillColorSecondaryBrush}"
HorizontalAlignment="Center" />
</StackPanel>
</Grid>
</ui:Border>
</Grid>
<!-- 底部区域 -->
<Grid Grid.Row="2" Margin="0,12,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<!-- 左侧:任务导入方式开关 -->
<StackPanel Grid.Column="0" Orientation="Horizontal" VerticalAlignment="Center">
<ui:TextBlock Text="任务导入方式:" VerticalAlignment="Center" Margin="0,0,8,0" />
<ui:ToggleSwitch IsChecked="{Binding IsGroupImportMode}"
OnContent="按组引用"
OffContent="逐个添加"
VerticalAlignment="Center" />
</StackPanel>
<!-- 右侧:动态按钮 -->
<StackPanel Grid.Column="1" Orientation="Horizontal">
<!-- 按组引用模式的按钮 -->
<ui:Button Content="添加选中目录"
Appearance="Primary"
Command="{Binding AddFolderTaskCommand}"
Margin="0,0,8,0"
MinWidth="120"
Visibility="{Binding IsGroupImportMode, Converter={StaticResource BooleanToVisibilityParameterConverter}}" />
<!-- 添加文件夹引用,保持目录结构 -->
<ui:Button Content="保持目录结构添加"
Command="{Binding AddFolderTasksWithStructureCommand}"
Margin="0,0,8,0"
MinWidth="180"
Appearance="Primary"
Visibility="{Binding IsGroupImportMode, Converter={StaticResource BooleanToVisibilityParameterConverter}}" />
<!-- 添加目录下所有文件,不要目录结构 -->
<ui:Button Content="添加目录下所有文件任务"
Appearance="Primary"
Command="{Binding AddAllFileTasksCommand}"
Margin="0,0,8,0"
MinWidth="160"
Visibility="{Binding IsGroupImportMode, Converter={StaticResource BooleanToVisibilityParameterConverter}, ConverterParameter=Invert}" />
<!-- 保持目录结构添加所有目录下文件 -->
<ui:Button Command="{Binding AddFileTasksWithStructureCommand}"
Margin="0,0,8,0"
MinWidth="180"
Appearance="Primary"
Visibility="{Binding IsGroupImportMode, Converter={StaticResource BooleanToVisibilityParameterConverter}, ConverterParameter=Invert}">
<ui:Button.Content>
<ui:TextBlock>
<Run Text="保持目录结构添加所有文件任务" />
<Run Text="{Binding SelectedDirectoryTaskCount}" />
<Run Text="个任务" />
</ui:TextBlock>
</ui:Button.Content>
</ui:Button>
<ui:Button Content="取消"
Click="OnCancelClick"
MinWidth="80" />
</StackPanel>
</Grid>
</Grid>
</Grid>
</ui:FluentWindow>