Files
MaaAssistantArknights/src/MaaWpfGui/Views/UI/TaskQueueView.xaml
2026-03-28 00:52:47 +08:00

923 lines
63 KiB
XML

<UserControl
x:Class="MaaWpfGui.Views.UI.TaskQueueView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:c="clr-namespace:CalcBinding;assembly=CalcBinding"
xmlns:controls="clr-namespace:MaaWpfGui.Styles.Controls"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:dd="urn:gong-wpf-dragdrop"
xmlns:enums="clr-namespace:MaaWpfGui.Constants.Enums"
xmlns:hc="https://handyorg.github.io/handycontrol"
xmlns:helper="clr-namespace:MaaWpfGui.Helper"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:properties="clr-namespace:MaaWpfGui.Styles.Properties"
xmlns:s="https://github.com/canton7/Stylet"
xmlns:taskQueue="clr-namespace:MaaWpfGui.Views.UserControl.TaskQueue"
xmlns:ui_vms="clr-namespace:MaaWpfGui.ViewModels.UI"
xmlns:userControl="clr-namespace:MaaWpfGui.Views.UserControl"
MinWidth="720"
d:Background="White"
d:DataContext="{d:DesignInstance {x:Type ui_vms:TaskQueueViewModel}}"
d:DesignHeight="495"
d:DesignWidth="800"
mc:Ignorable="d">
<Grid>
<userControl:GuideUserControl
x:Name="Guide"
VerticalAlignment="Stretch"
s:View.ActionTarget="{Binding DataContext, RelativeSource={RelativeSource Self}}"
DataContext="{Binding TaskSettingDataContext}"
Visibility="{c:Binding TaskSettingVisibilities.Guide}" />
<Grid Margin="20" Visibility="{c:Binding !TaskSettingVisibilities.Guide}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<!--<ColumnDefinition Width="5" />-->
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid Grid.Column="0" Margin="10">
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Border
Width="210"
MaxWidth="210"
Background="{DynamicResource RegionBrushOpacity25}"
BorderBrush="{DynamicResource BorderBrush}"
BorderThickness="1"
CornerRadius="4">
<Grid Width="190" Margin="0">
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="40" />
</Grid.RowDefinitions>
<ListBox
x:Name="TaskList"
Grid.Row="0"
Width="190"
MinHeight="220"
Margin="0,10,0,0"
HorizontalAlignment="Center"
d:ItemsSource="{d:SampleData ItemCount=16}"
dd:DragDrop.DragDropContext="{Binding RelativeSource={RelativeSource Self}}"
dd:DragDrop.IsDragSource="{Binding Idle}"
dd:DragDrop.IsDropTarget="{Binding Idle}"
Background="Transparent"
BorderThickness="0"
ItemsSource="{Binding TaskItemViewModels}"
Style="{DynamicResource NoSelectedHighlightListBoxStyle}"
ToolTip="{DynamicResource LabelSequenceTip}">
<ListBox.ItemTemplate>
<DataTemplate>
<Border CornerRadius="4">
<Border.Style>
<Style TargetType="Border">
<Setter Property="Background" Value="Transparent" />
<Setter Property="Opacity" Value="1" />
<Style.Triggers>
<!-- 运行中 - 蓝色 -->
<DataTrigger Binding="{Binding StatusDisplay}" Value="{x:Static enums:TaskItemStatus.InProgress}">
<Setter Property="Background" Value="{DynamicResource TaskQueue.TaskItemStatus.InProgress}" />
</DataTrigger>
<!-- 成功完成 - 绿色 -->
<DataTrigger Binding="{Binding StatusDisplay}" Value="{x:Static enums:TaskItemStatus.Completed}">
<Setter Property="Background" Value="{DynamicResource TaskQueue.TaskItemStatus.Completed}" />
</DataTrigger>
<!-- 出现错误 - 红色 -->
<DataTrigger Binding="{Binding StatusDisplay}" Value="{x:Static enums:TaskItemStatus.Error}">
<Setter Property="Background" Value="{DynamicResource TaskQueue.TaskItemStatus.Error}" />
</DataTrigger>
<!-- 已跳过 - 灰色 -->
<DataTrigger Binding="{Binding StatusDisplay}" Value="{x:Static enums:TaskItemStatus.Skipped}">
<Setter Property="Opacity" Value="0.5" />
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<CheckBox
Grid.Column="0"
MaxWidth="140"
Margin="6,0,0,0"
HorizontalAlignment="Left"
IsChecked="{Binding IsEnable}"
IsHitTestVisible="{Binding ElementName=TaskList, Path=DataContext.Idle}"
MouseRightButtonUp="{s:Action ToggleCheckBoxNullOnRightClick,
Target={x:Type helper:CheckBoxHelper}}">
<controls:TextBlock Text="{Binding Name}" Visibility="Hidden" />
<CheckBox.ToolTip>
<ToolTip>
<ToolTip.Style>
<Style BasedOn="{StaticResource ToolTipBaseStyle}" TargetType="{x:Type ToolTip}">
<Setter Property="Content" Value="{DynamicResource CheckBoxesNotSavedAsNull}" />
<Style.Triggers>
<DataTrigger Binding="{Binding Source={x:Static ui_vms:SettingsViewModel.GuiSettings}, Path=MainTasksInvertNullFunction}" Value="True">
<Setter Property="Content" Value="{DynamicResource CheckBoxesNotSavedAsNullInvert}" />
</DataTrigger>
</Style.Triggers>
</Style>
</ToolTip.Style>
</ToolTip>
</CheckBox.ToolTip>
</CheckBox>
<controls:TextBlock
Grid.Column="0"
Grid.ColumnSpan="2"
Margin="26,0,0,0"
HorizontalAlignment="Left"
Background="Transparent"
IsHitTestVisible="False"
Text="{Binding Name}">
<TextBlock.Style>
<Style BasedOn="{StaticResource TextBlockBaseStyle}" TargetType="{x:Type TextBlock}">
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Source={x:Static ui_vms:SettingsViewModel.GuiSettings}, Path=MainTasksInvertNullFunction}" Value="True" />
<Condition Binding="{Binding IsEnable}" Value="{x:Null}" />
</MultiDataTrigger.Conditions>
<Setter Property="Foreground" Value="{DynamicResource TraceLogBrush}" />
</MultiDataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</controls:TextBlock>
<hc:ButtonGroup Grid.Column="1" HorizontalAlignment="Stretch">
<RadioButton
x:Name="TaskSettingRadioButton"
Margin="0"
HorizontalAlignment="Stretch"
HorizontalContentAlignment="Right"
hc:IconElement.Geometry="{StaticResource ConfigGeometry}"
hc:VisualElement.HighlightBackground="Transparent"
hc:VisualElement.HighlightForeground="{DynamicResource PrimaryBrush}"
Background="Transparent"
BorderThickness="0"
ContextMenuService.IsEnabled="{Binding DataContext.Idle, RelativeSource={RelativeSource AncestorType=UserControl}}"
Foreground="{DynamicResource SecondaryTextBrush}"
GroupName="TaskSettings"
IsChecked="{Binding EnableSetting}"
Style="{DynamicResource RadioGroupItemSingle}">
<RadioButton.ToolTip>
<ToolTip>
<StackPanel>
<TextBlock FontWeight="SemiBold" Text="{DynamicResource LeftClick}" />
<TextBlock Text="{DynamicResource TaskSettings}" />
<TextBlock FontWeight="SemiBold" Text="{DynamicResource RightClick}" />
<TextBlock>
<Run Text="{DynamicResource RunTaskOnce}" />
<Run Text=" / " />
<Run Text="{DynamicResource Rename}" />
<Run Text=" / " />
<Run Text="{DynamicResource Delete}" />
</TextBlock>
</StackPanel>
</ToolTip>
</RadioButton.ToolTip>
<RadioButton.ContextMenu>
<ContextMenu Width="150">
<MenuItem
Command="{s:Action RunTaskOnce,
Target={x:Static helper:Instances.TaskQueueViewModel}}"
CommandParameter="{Binding PlacementTarget.DataContext, RelativeSource={RelativeSource AncestorType=ContextMenu}}"
Header="{DynamicResource RunTaskOnce}" />
<MenuItem
Command="{s:Action RenameTask,
Target={x:Static helper:Instances.TaskQueueViewModel}}"
CommandParameter="{Binding PlacementTarget.DataContext, RelativeSource={RelativeSource AncestorType=ContextMenu}}"
Header="{DynamicResource Rename}" />
<MenuItem
Command="{s:Action RemoveTask,
Target={x:Static helper:Instances.TaskQueueViewModel}}"
CommandParameter="{Binding PlacementTarget.DataContext, RelativeSource={RelativeSource AncestorType=ContextMenu}}"
Header="{DynamicResource Delete}" />
</ContextMenu>
</RadioButton.ContextMenu>
</RadioButton>
</hc:ButtonGroup>
</Grid>
</Border>
</DataTemplate>
</ListBox.ItemTemplate>
<ListBox.ItemContainerStyle>
<Style BasedOn="{StaticResource NoSelectedHighlightListBoxItemStyle}" TargetType="{x:Type ListBoxItem}">
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
<Setter Property="Padding" Value="0" />
<Setter Property="MinHeight" Value="24.5" />
<Setter Property="Height" Value="Auto" />
<Style.Triggers>
<DataTrigger Binding="{c:Binding 'Items.Count > 9', RelativeSource={RelativeSource AncestorType={x:Type ListBox}}}" Value="True">
<Setter Property="MaxHeight" Value="{c:Binding 'ActualHeight / (Items.Count + 1.5) less 24.5 ? 24.5 : ActualHeight / (Items.Count + 1.5)', RelativeSource={RelativeSource AncestorType={x:Type ListBox}}}" />
</DataTrigger>
</Style.Triggers>
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<hc:ContextMenuButton
Grid.Column="0"
Width="30"
Height="30"
Padding="0"
VerticalAlignment="Top"
hc:BorderElement.CornerRadius="4,0,0,4"
hc:IconElement.Geometry="{StaticResource TaskQueueAddTaskIcon}"
Foreground="{DynamicResource PrimaryTextBrush}"
IsEnabled="{Binding Idle}"
Style="{StaticResource MaaButtonDefaultStyle}">
<hc:ContextMenuButton.Menu>
<ContextMenu
Width="200"
Padding="0"
HorizontalOffset="-7"
Placement="Bottom"
VerticalOffset="-7">
<ContextMenu.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Vertical" />
</ItemsPanelTemplate>
</ContextMenu.ItemsPanel>
<MenuItem
Padding="0,3"
Command="{s:Action AddTaskQueueTask}"
CommandParameter="{Binding TaskTypeList[0].Value}"
Header="{Binding TaskTypeList[0].Display}" />
<MenuItem
Padding="0,3"
Command="{s:Action AddTaskQueueTask}"
CommandParameter="{Binding TaskTypeList[1].Value}"
Header="{Binding TaskTypeList[1].Display}" />
<MenuItem
Padding="0,3"
Command="{s:Action AddTaskQueueTask}"
CommandParameter="{Binding TaskTypeList[2].Value}"
Header="{Binding TaskTypeList[2].Display}" />
<MenuItem
Padding="0,3"
Command="{s:Action AddTaskQueueTask}"
CommandParameter="{Binding TaskTypeList[3].Value}"
Header="{Binding TaskTypeList[3].Display}" />
<MenuItem
Padding="0,3"
Command="{s:Action AddTaskQueueTask}"
CommandParameter="{Binding TaskTypeList[4].Value}"
Header="{Binding TaskTypeList[4].Display}" />
<MenuItem
Padding="0,3"
Command="{s:Action AddTaskQueueTask}"
CommandParameter="{Binding TaskTypeList[5].Value}"
Header="{Binding TaskTypeList[5].Display}" />
<MenuItem
Padding="0,3"
Command="{s:Action AddTaskQueueTask}"
CommandParameter="{Binding TaskTypeList[6].Value}"
Header="{Binding TaskTypeList[6].Display}" />
<MenuItem
Padding="0,3"
Command="{s:Action AddTaskQueueTask}"
CommandParameter="{Binding TaskTypeList[7].Value}"
Header="{Binding TaskTypeList[7].Display}" />
<MenuItem
Padding="0,3"
Command="{s:Action AddTaskQueueTask}"
CommandParameter="{Binding TaskTypeList[8].Value}"
Header="{Binding TaskTypeList[8].Display}" />
<MenuItem
Padding="0,3"
Command="{s:Action AddTaskQueueTask}"
CommandParameter="{Binding TaskTypeList[9].Value}"
Header="{Binding TaskTypeList[9].Display}"
Visibility="{c:Binding ShowDebugTask}" />
</ContextMenu>
</hc:ContextMenuButton.Menu>
</hc:ContextMenuButton>
<Button
Grid.Column="1"
Height="30"
Margin="-1,0"
HorizontalAlignment="Stretch"
VerticalAlignment="Top"
hc:BorderElement.CornerRadius="0"
Command="{s:Action SelectedAll}"
Content="{DynamicResource SelectAll}"
IsEnabled="{Binding Idle}" />
<hc:SplitButton
Grid.Column="2"
Height="30"
Padding="0,0,5,0"
HorizontalAlignment="Stretch"
VerticalAlignment="Top"
hc:BorderElement.CornerRadius="0,4,4,0"
Background="{DynamicResource RegionBrushOpacity25}"
Command="{s:Action InverseSelected}"
Content="{Binding InverseShowText}"
IsEnabled="{Binding Idle}"
Visibility="{c:Binding ShowInverse}">
<hc:SplitButton.DropDownContent>
<Menu>
<Menu.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Vertical" />
</ItemsPanelTemplate>
</Menu.ItemsPanel>
<MenuItem Command="{s:Action ChangeInverseMode}">
<MenuItem.HeaderTemplate>
<DataTemplate>
<TextBlock
Padding="10,0,0,0"
HorizontalAlignment="Center"
Text="{Binding DataContext.InverseMenuText, RelativeSource={RelativeSource AncestorType=hc:SplitButton}}"
TextAlignment="Center" />
</DataTemplate>
</MenuItem.HeaderTemplate>
</MenuItem>
</Menu>
</hc:SplitButton.DropDownContent>
</hc:SplitButton>
<Button
Grid.Column="2"
Height="30"
HorizontalAlignment="Stretch"
VerticalAlignment="Top"
Command="{s:Action InverseSelected}"
Content="{Binding InverseShowText}"
IsEnabled="{Binding Idle}"
Visibility="{c:Binding !ShowInverse}" />
</Grid>
</Grid>
</Border>
<StackPanel
Grid.Row="1"
Width="210"
HorizontalAlignment="Stretch"
Orientation="Horizontal">
<StackPanel
Width="185"
Margin="0,10,0,10"
HorizontalAlignment="Left"
Orientation="Vertical">
<controls:TextBlock
Margin="20,5,0,0"
HorizontalAlignment="Center"
Text="{Binding PostActionSetting.ActionTitle}"
TextAlignment="Center" />
<hc:Divider Margin="10,2,10,5" />
<controls:TextBlock
Width="160"
Margin="20,0,0,0"
HorizontalAlignment="Center"
Text="{Binding PostActionSetting.ActionDescription}"
TextAlignment="Center"
TextWrapping="Wrap" />
</StackPanel>
<hc:ButtonGroup HorizontalAlignment="Right" VerticalAlignment="Center">
<!-- ReSharper disable once Xaml.StaticResourceNotResolved -->
<RadioButton
hc:IconElement.Geometry="{StaticResource ConfigGeometry}"
hc:VisualElement.HighlightBackground="Transparent"
hc:VisualElement.HighlightForeground="{DynamicResource PrimaryBrush}"
Background="Transparent"
BorderThickness="0"
Foreground="{DynamicResource SecondaryTextBrush}"
GroupName="TaskSettings"
IsChecked="{Binding EnableAfterActionSetting}"
Style="{DynamicResource RadioGroupItemSingle}"
ToolTip="{DynamicResource TaskSettings}" />
</hc:ButtonGroup>
</StackPanel>
<Grid
Grid.Row="2"
Height="Auto"
HorizontalAlignment="Center">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Button
Width="100"
Height="50"
Margin="5"
Command="{s:Action LinkStart}"
Content="{DynamicResource LinkStart}"
IsEnabled="{c:Binding 'Inited and !TaskSettingVisibilities.Guide'}"
Visibility="{c:Binding '!Inited or (Idle and !Stopping)'}">
<Button.Style>
<Style BasedOn="{StaticResource MaaButtonDefaultStyle}" TargetType="Button">
<Setter Property="hc:IconElement.Geometry" Value="{x:Null}" />
<Setter Property="Foreground" Value="{DynamicResource PrimaryTextBrush}" />
<Style.Triggers>
<DataTrigger Binding="{Binding ShowDeepSleepIcon}" Value="True">
<Setter Property="hc:IconElement.Geometry" Value="{StaticResource DeepSleep}" />
<Setter Property="Foreground" Value="{DynamicResource DeepSleepBrush}" />
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
<Button
Width="100"
Height="50"
Margin="5"
Command="{s:Action ManualStop}"
Content="{DynamicResource Stop}"
IsEnabled="{c:Binding '!Stopping'}"
Visibility="{c:Binding 'Inited and (!Idle or Stopping) and !(RoguelikeInCombatAndShowWait and !Waiting)'}" />
<Button
Width="100"
Height="50"
Margin="5"
Command="{s:Action WaitAndStop}"
Content="{DynamicResource WaitAndStop}"
Visibility="{c:Binding 'Inited and !Idle and (RoguelikeInCombatAndShowWait and !Waiting)'}" />
<CheckBox
Grid.Row="1"
VerticalAlignment="Center"
Content="Auto Reload Resource"
IsChecked="{Binding EnableAutoReload}"
Visibility="{c:Binding CanShowAutoReload}" />
</Grid>
<!--<StackPanel Grid.Row="1" Orientation="Horizontal" HorizontalAlignment ="Center" >-->
<!--<CheckBox IsChecked="{Binding Shutdown}" Content="自动关机" HorizontalAlignment="Center" VerticalAlignment="Center">
<CheckBox.InputBindings>
<KeyBinding Key="H" Command="{s:Action ShowButton}" />
</CheckBox.InputBindings>
</CheckBox>
<CheckBox IsChecked="{Binding Hibernate}" Content="休眠" Visibility="{Binding Visible}" HorizontalAlignment="Center" VerticalAlignment="Center" />
<CheckBox IsChecked="{Binding Suspend}" Content="待机" Visibility="{Binding Visible}" HorizontalAlignment="Center" VerticalAlignment="Center" />-->
<!--</StackPanel>-->
</Grid>
<Grid Grid.Column="1">
<Grid.RowDefinitions>
<RowDefinition Height="*" MinHeight="360" />
<RowDefinition Height="Auto" />
<RowDefinition Height="*" MaxHeight="250" />
</Grid.RowDefinitions>
<hc:ScrollViewer
Grid.Row="0"
Grid.RowSpan="{c:Binding 'TaskSettingVisibilities.PostAction ? 2:1'}"
Margin="10"
HorizontalAlignment="Center"
VerticalAlignment="Top"
HorizontalScrollBarVisibility="Auto"
IsInertiaEnabled="True"
PanningMode="Both"
VerticalScrollBarVisibility="Auto">
<hc:SimpleStackPanel Width="220" Margin="0,0,10,0">
<taskQueue:FightSettingsUserControl
d:Visibility="Visible"
DataContext="{Binding FightTask}"
Visibility="{c:Binding DataContext.TaskSettingVisibilities.Fight,
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType={x:Type UserControl}}}" />
<taskQueue:RecruitSettingsUserControl
DataContext="{Binding RecruitTask}"
IsEnabled="{Binding DataContext.Idle, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}}"
Visibility="{c:Binding DataContext.TaskSettingVisibilities.Recruit,
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType={x:Type UserControl}}}" />
<taskQueue:StartUpTaskUserControl
DataContext="{Binding StartUpTask}"
IsEnabled="{Binding DataContext.Idle, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}}"
Visibility="{c:Binding DataContext.TaskSettingVisibilities.StartUp,
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType={x:Type UserControl}}}" />
<taskQueue:InfrastSettingsUserControl
DataContext="{Binding InfrastTask}"
IsEnabled="{Binding DataContext.Idle, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}}"
Visibility="{c:Binding DataContext.TaskSettingVisibilities.Infrast,
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType={x:Type UserControl}}}" />
<taskQueue:MallSettingsUserControl
DataContext="{Binding MallTask}"
IsEnabled="{Binding DataContext.Idle, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}}"
Visibility="{c:Binding DataContext.TaskSettingVisibilities.Mall,
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType={x:Type UserControl}}}" />
<taskQueue:AwardSettingsUserControl
DataContext="{Binding AwardTask}"
IsEnabled="{Binding DataContext.Idle, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}}"
Visibility="{c:Binding DataContext.TaskSettingVisibilities.Award,
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType={x:Type UserControl}}}" />
<taskQueue:RoguelikeSettingsUserControl DataContext="{Binding RoguelikeTask}" Visibility="{c:Binding DataContext.TaskSettingVisibilities.Roguelike, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}}" />
<taskQueue:ReclamationSettingsUserControl DataContext="{Binding ReclamationTask}" Visibility="{c:Binding DataContext.TaskSettingVisibilities.Reclamation, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}}" />
<taskQueue:UserDataUpdateSettingsUserControl
DataContext="{Binding UserDataUpdateTask}"
IsEnabled="{Binding DataContext.Idle, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}}"
Visibility="{c:Binding DataContext.TaskSettingVisibilities.UserDataUpdate,
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType={x:Type UserControl}}}" />
<taskQueue:CustomUserControl DataContext="{Binding CustomTask}" Visibility="{c:Binding DataContext.TaskSettingVisibilities.Custom, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}}" />
<taskQueue:PostActionUserControl DataContext="{Binding PostActionSetting}" Visibility="{c:Binding DataContext.TaskSettingVisibilities.PostAction, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}}" />
</hc:SimpleStackPanel>
</hc:ScrollViewer>
<hc:ButtonGroup
Grid.Row="1"
Width="220"
Margin="0,0,10,0"
Orientation="Horizontal"
Visibility="{c:Binding !TaskSettingVisibilities.PostAction,
FalseToVisibility=Hidden}">
<RadioButton
hc:VisualElement.HighlightBackground="{DynamicResource RegionBrushOpacity25}"
Background="{DynamicResource RegionBrushOpacity25}"
Content="{DynamicResource GeneralSettings}"
IsChecked="{c:Binding !TaskSettingVisibilities.EnableAdvancedSettings}"
IsEnabled="True" />
<RadioButton
hc:VisualElement.HighlightBackground="{DynamicResource RegionBrushOpacity25}"
Background="{DynamicResource RegionBrushOpacity25}"
Content="{DynamicResource AdvancedSettings}"
IsChecked="{c:Binding TaskSettingVisibilities.EnableAdvancedSettings}"
IsEnabled="{c:Binding TaskSettingVisibilities.AdvancedSettingsVisibility}" />
</hc:ButtonGroup>
<Grid
Grid.Row="2"
HorizontalAlignment="Center"
VerticalAlignment="Bottom">
<hc:ScrollViewer
Width="200"
Margin="0,10,10,10"
PanningMode="Both">
<controls:TextBlock
d:Text="{DynamicResource TodaysStageTip}"
Text="{Binding StagesOfToday}"
TextWrapping="Wrap" />
</hc:ScrollViewer>
<Border Width="200" Margin="0,10,30,10">
<controls:TooltipBlock
HorizontalAlignment="Right"
VerticalContentAlignment="Top"
NormalOpacity="0.5">
<controls:TooltipBlock.TooltipText>
<MultiBinding StringFormat="{}{0}&#x0a;{1}: {2}">
<Binding Source="{StaticResource InventoryUpdateTip}" />
<Binding Source="{StaticResource LastSyncTime}" />
<Binding Path="LastDepotSyncTimeText" Source="{x:Static helper:Instances.ToolboxViewModel}" />
</MultiBinding>
</controls:TooltipBlock.TooltipText>
</controls:TooltipBlock>
</Border>
</Grid>
</Grid>
<!--<GridSplitter Grid.Column="2" Width="5" HorizontalAlignment="Stretch" />-->
<!--<Rectangle Grid.Column="2" VerticalAlignment="Stretch" Fill="{DynamicResource BorderBrush}" Width="4" />-->
<Grid
Grid.Column="2"
Margin="10,10,0,10"
HorizontalAlignment="Stretch"
VerticalAlignment="Top"
Visibility="{c:Binding !TaskSettingVisibilities.Guide}">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<!-- Logs (download + feed cards) -->
<Grid Grid.Row="1">
<!-- 内容层:下载卡片 + 信息流 -->
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<!-- Download area: shown when there is a download log item -->
<ContentControl
Grid.Row="0"
Margin="0,0,0,10"
HorizontalAlignment="Stretch"
VerticalAlignment="Top"
Content="{Binding DownloadLogItemViewModel}"
Visibility="{c:Binding 'DownloadLogItemViewModel.Content.Length > 0'}">
<ContentControl.ContentTemplate>
<DataTemplate>
<StackPanel>
<Grid Visibility="{c:Binding !UseCardLog, Source={x:Static ui_vms:SettingsViewModel.GuiSettings}}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<!-- 时间 -->
<controls:TextBlock
Grid.Column="0"
Margin="0,5,10,5"
VerticalAlignment="Top"
Foreground="{DynamicResource TraceLogBrush}"
Text="{Binding Time}" />
<!-- 内容 -->
<Grid
Grid.Column="1"
Margin="0,5"
HorizontalAlignment="Left"
ToolTip="{Binding ToolTip}"
ToolTipService.InitialShowDelay="200">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<controls:TextBlock
FontWeight="{Binding Weight}"
ForegroundKey="{Binding Color}"
Text="{Binding DisplayContent}"
TextWrapping="Wrap" />
<controls:TooltipBlock
Grid.Column="1"
Margin="10,0,0,0"
PathDate="{StaticResource LogToolTip}"
PathStrokeThickness="1.5"
TextBlockText=""
Visibility="{c:Binding ShowToolTip}" />
</Grid>
</Grid>
<Border
MaxWidth="420"
Margin="0,0,0,2.5"
Padding="5,0,1,5"
Background="{DynamicResource MouseOverRegionBrushOpacity10}"
BorderBrush="{DynamicResource BorderBrush}"
BorderThickness="1"
CornerRadius="4"
Visibility="{c:Binding UseCardLog,
Source={x:Static ui_vms:SettingsViewModel.GuiSettings}}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid Width="60">
<controls:TextBlock
Grid.Row="0"
Margin="0,5,0,0"
HorizontalAlignment="Center"
Foreground="{DynamicResource TraceLogBrush}"
Text="{Binding Time}"
TextWrapping="Wrap" />
</Grid>
<Grid
Grid.Column="1"
Margin="10,0,0,0"
HorizontalAlignment="Left"
ToolTip="{Binding ToolTip}"
ToolTipService.InitialShowDelay="200">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<controls:TextBlock
Grid.Column="0"
Margin="0,5,0,0"
FontWeight="{Binding Weight}"
ForegroundKey="{Binding Color}"
Text="{Binding DisplayContent}"
TextWrapping="Wrap" />
<controls:TooltipBlock
Grid.Column="1"
Margin="10,0,0,0"
PathDate="{StaticResource LogToolTip}"
PathStrokeThickness="1.5"
TextBlockText=""
Visibility="{c:Binding ShowToolTip}" />
</Grid>
</Grid>
</Border>
</StackPanel>
</DataTemplate>
</ContentControl.ContentTemplate>
</ContentControl>
<!-- Main log scroll area -->
<hc:ScrollViewer
Grid.Row="1"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
properties:AutoScroll.AutoScroll="True"
HorizontalScrollBarVisibility="Disabled"
IsInertiaEnabled="True"
PanningMode="Both">
<Grid>
<!-- Plain text log style -->
<ItemsControl
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
d:ItemsSource="{d:SampleData ItemCount=20}"
d:Visibility="Collapsed"
ItemsSource="{Binding LogItemViewModels}"
Visibility="{c:Binding !UseCardLog,
Source={x:Static ui_vms:SettingsViewModel.GuiSettings}}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<!-- 时间 -->
<controls:TextBlock
Grid.Column="0"
Margin="0,5,10,5"
VerticalAlignment="Top"
Foreground="{DynamicResource TraceLogBrush}"
Text="{Binding Time}" />
<!-- 内容 -->
<Grid
Grid.Column="1"
Margin="0,5"
HorizontalAlignment="Left"
ToolTip="{Binding ToolTip}"
ToolTipService.InitialShowDelay="200">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<controls:TextBlock
FontWeight="{Binding Weight}"
ForegroundKey="{Binding Color}"
Text="{Binding DisplayContent}"
TextWrapping="Wrap" />
<controls:TooltipBlock
Grid.Column="1"
Margin="10,0,0,0"
PathDate="{StaticResource LogToolTip}"
PathStrokeThickness="1.5"
TextBlockText=""
Visibility="{c:Binding ShowToolTip}" />
</Grid>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<!-- Card log style -->
<ItemsControl
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
d:ItemsSource="{d:SampleData ItemCount=20}"
d:Visibility="Visible"
ItemsSource="{Binding LogCardViewModels}"
Visibility="{c:Binding UseCardLog,
Source={x:Static ui_vms:SettingsViewModel.GuiSettings}}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border
MaxWidth="420"
Margin="0,0,0,2.5"
Padding="5,0,1,5"
Background="{DynamicResource MouseOverRegionBrushOpacity10}"
BorderBrush="{DynamicResource BorderBrush}"
BorderThickness="1"
CornerRadius="4"
Visibility="{c:Binding 'Items.Count > 0'}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid
Width="60"
Margin="0,5,0,0"
VerticalAlignment="Stretch">
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<controls:TextBlock
Grid.Row="0"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Foreground="{DynamicResource TraceLogBrush}"
Text="{Binding StartTime}"
TextWrapping="Wrap" />
<Image
Grid.Row="1"
Source="{Binding Thumbnail}"
Stretch="UniformToFill"
ToolTipService.InitialShowDelay="200"
Visibility="{c:Binding ShowThumbnail}">
<Image.ToolTip>
<ToolTip>
<Image Source="{Binding Thumbnail}" />
</ToolTip>
</Image.ToolTip>
</Image>
<TextBlock
Grid.Row="2"
HorizontalAlignment="Center"
Foreground="{DynamicResource TraceLogBrush}"
Text="{Binding EndTime}"
TextWrapping="Wrap"
Visibility="{c:Binding 'StartTime != EndTime or Items.Count > 1'}" />
</Grid>
<Grid Grid.Column="1" Margin="10,0,0,0">
<ItemsControl ItemsSource="{Binding Items}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid
Margin="0,5,0,0"
HorizontalAlignment="Left"
ToolTip="{Binding ToolTip}"
ToolTipService.InitialShowDelay="200">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<controls:TextBlock
FontWeight="{Binding Weight}"
ForegroundKey="{Binding Color}"
Text="{Binding DisplayContent}"
TextWrapping="Wrap" />
<controls:TooltipBlock
Grid.Column="1"
Margin="10,0,0,0"
PathDate="{StaticResource LogToolTip}"
PathStrokeThickness="1.5"
TextBlockText=""
Visibility="{c:Binding ShowToolTip}" />
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
</Grid>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
</hc:ScrollViewer>
</Grid>
<!-- 覆盖层:悬浮窗按钮,绑定到信息流区域右上角(不占布局) -->
<Grid
HorizontalAlignment="Right"
VerticalAlignment="Top"
Panel.ZIndex="200">
<Path
Width="15"
Height="15"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Fill="{DynamicResource PrimaryTextBrush}"
IsHitTestVisible="False"
Stretch="Uniform"
StrokeThickness="1">
<Path.Style>
<Style TargetType="Path">
<Setter Property="Data" Value="{StaticResource CarbonUnlink}" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsOverlayEnabled}" Value="True">
<Setter Property="Data" Value="{StaticResource CarbonLink}" />
</DataTrigger>
</Style.Triggers>
</Style>
</Path.Style>
</Path>
<Button
Width="27"
Height="27"
Click="{s:Action ToggleOverlay,
Target={x:Type ui_vms:TaskQueueViewModel}}"
MouseRightButtonDown="{s:Action ChooseOverlayTarget,
Target={x:Type ui_vms:TaskQueueViewModel}}" />
<controls:TooltipBlock
HorizontalAlignment="Right"
VerticalAlignment="Top"
MouseLeftButtonDown="{s:Action ToggleOverlay,
Target={x:Type ui_vms:TaskQueueViewModel}}"
MouseRightButtonDown="{s:Action ChooseOverlayTarget,
Target={x:Type ui_vms:TaskQueueViewModel}}"
NormalOpacity="0.25"
TooltipText="{DynamicResource ProcessPickerToolTip}" />
</Grid>
</Grid>
</Grid>
</Grid>
</Grid>
</UserControl>