Files
MaaAssistantArknights/src/MaaWpfGui/Views/UI/CopilotView.xaml
2026-03-30 21:49:40 +08:00

856 lines
50 KiB
XML

<UserControl
x:Class="MaaWpfGui.Views.UI.CopilotView"
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: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:ui_vms="clr-namespace:MaaWpfGui.ViewModels.UI"
d:Background="White"
d:DataContext="{d:DesignInstance {x:Type ui_vms:CopilotViewModel}}"
d:DesignHeight="550"
d:DesignWidth="800"
AllowDrop="True"
Drop="{s:Action DropFile}"
KeyDown="{s:Action KeyDown}"
MouseDown="{s:Action MouseDown}"
mc:Ignorable="d">
<Grid Margin="20">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="4*" />
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition Width="4*" />
</Grid.ColumnDefinitions>
<Grid Grid.ColumnSpan="{c:Binding 'UseCopilotList ? 3 : 2'}" d:Grid.ColumnSpan="3">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<StackPanel
Grid.Row="0"
HorizontalAlignment="Center"
Orientation="Vertical">
<Border
Padding="2"
Background="{DynamicResource MouseOverRegionBrushOpacity75}"
CornerRadius="4">
<Grid x:Name="CopilotTabHost">
<Border
x:Name="CopilotTabIndicator"
Width="0"
Height="0"
HorizontalAlignment="Left"
VerticalAlignment="Top"
Background="{DynamicResource RegionBrush}"
CornerRadius="4"
IsHitTestVisible="False"
Opacity="0">
<Border.RenderTransform>
<TranslateTransform />
</Border.RenderTransform>
</Border>
<ListBox
x:Name="CopilotTabList"
Padding="0"
HorizontalAlignment="Center"
Background="Transparent"
BorderThickness="0"
IsEnabled="{Binding Idle}"
Loaded="CopilotTabList_Loaded"
SelectedIndex="{Binding CopilotTabIndex}"
SelectionChanged="CopilotTabList_SelectionChanged"
SizeChanged="CopilotTabList_SizeChanged">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel IsItemsHost="True" />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemContainerStyle>
<Style BasedOn="{StaticResource NoSelectedHighlightListBoxItemStyle}" TargetType="{x:Type ListBoxItem}">
<Setter Property="Background" Value="Transparent" />
<Setter Property="BorderThickness" Value="0" />
<Setter Property="Margin" Value="0" />
<Setter Property="MinHeight" Value="28" />
<Setter Property="Padding" Value="12,2" />
<Setter Property="HorizontalContentAlignment" Value="Center" />
<EventSetter Event="Loaded" Handler="CopilotTabItem_Loaded" />
<EventSetter Event="SizeChanged" Handler="CopilotTabItem_SizeChanged" />
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="Transparent" />
</Trigger>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="Transparent" />
<Setter Property="Foreground" Value="{DynamicResource PrimaryTextBrush}" />
</Trigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsSelected" Value="True" />
<Condition Property="IsMouseOver" Value="True" />
</MultiTrigger.Conditions>
<Setter Property="Background" Value="Transparent" />
</MultiTrigger>
</Style.Triggers>
</Style>
</ListBox.ItemContainerStyle>
<ListBoxItem Content="{DynamicResource MainStageStoryCollectionSideStory}" />
<ListBoxItem Content="{DynamicResource SSS}" />
<ListBoxItem Content="{DynamicResource ParadoxSimulation}" />
<ListBoxItem Content="{DynamicResource OtherActivityStage}" />
</ListBox>
</Grid>
</Border>
<Grid Margin="0,5">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid Grid.Column="0">
<TextBox
x:Name="FileTextBox"
Height="30"
hc:BorderElement.CornerRadius="4,0,0,4"
hc:InfoElement.Placeholder="{DynamicResource CopilotLocation}"
IsEnabled="{Binding Idle}"
Text="{Binding DisplayFilename, UpdateSourceTrigger=PropertyChanged}" />
<Border
Margin="1"
HorizontalAlignment="Right"
VerticalAlignment="Stretch"
Background="{DynamicResource RegionBrushOpacity25}"
BorderThickness="0"
Cursor="Hand"
Focusable="False"
IsEnabled="{Binding Idle}"
MouseUp="Border_MouseUp">
<Grid
Width="28"
Height="28"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Opacity="{c:Binding 'Idle ? 1 : 0.5'}">
<Path
Width="12"
Height="12"
HorizontalAlignment="Center"
VerticalAlignment="Center"
d:Visibility="Visible"
Data="{StaticResource DownGeometry}"
Fill="{DynamicResource PrimaryTextBrush}"
Stretch="Uniform"
Visibility="{c:Binding !IsFilePopupOpen}" />
<Path
Width="12"
Height="12"
HorizontalAlignment="Center"
VerticalAlignment="Center"
d:Visibility="Collapsed"
Data="{StaticResource UpGeometry}"
Fill="{DynamicResource PrimaryTextBrush}"
Stretch="Uniform"
Visibility="{c:Binding IsFilePopupOpen}" />
</Grid>
</Border>
<Popup
MinWidth="{c:Binding 'ActualWidth + 90',
ElementName=FileTextBox}"
IsOpen="{Binding IsFilePopupOpen}"
LostFocus="Popup_LostFocus"
Placement="Bottom"
PlacementRectangle="0,30,0,0"
PlacementTarget="{Binding ElementName=FileTextBox}"
StaysOpen="False">
<Popup.Resources>
<Style TargetType="Popup">
<Style.Triggers>
<Trigger Property="IsOpen" Value="True">
<Setter Property="FocusManager.FocusedElement" Value="{Binding RelativeSource={RelativeSource Self}, Path=Child}" />
</Trigger>
</Style.Triggers>
</Style>
</Popup.Resources>
<Border
MinWidth="{c:Binding 'ActualWidth + 90',
ElementName=FileTextBox}"
Background="{DynamicResource RegionBrush}"
BorderBrush="{DynamicResource BorderBrush}"
BorderThickness="1"
CornerRadius="4">
<TreeView
x:Name="FileTreeView"
Background="Transparent"
BorderThickness="0"
ItemsSource="{Binding FileItems}"
SelectedItemChanged="FileTreeView_SelectedItemChanged">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Children}">
<controls:TextBlock
Margin="5"
HorizontalAlignment="Left"
Text="{Binding Name}" />
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
<TreeView.ItemContainerStyle>
<Style BasedOn="{StaticResource FileTreeViewItemStyle}" TargetType="{x:Type TreeViewItem}" />
</TreeView.ItemContainerStyle>
</TreeView>
</Border>
</Popup>
</Grid>
<Button
Grid.Column="1"
Height="30"
MinWidth="30"
Padding="0,5"
hc:BorderElement.CornerRadius="0"
hc:IconElement.Geometry="{StaticResource FolderOpen20Regular}"
BorderThickness="0,1,1,1"
Command="{s:Action SelectFile}"
IsEnabled="{c:Binding '(Idle) and (StartEnabled)'}" />
<Button
Grid.Column="2"
Height="30"
MinWidth="30"
Padding="0,5"
hc:BorderElement.CornerRadius="0"
hc:IconElement.Geometry="{StaticResource ClipboardLink20Regular}"
BorderThickness="0,1,1,1"
Command="{s:Action PasteClipboard}"
IsEnabled="{c:Binding '(Idle) and (StartEnabled)'}" />
<Button
Grid.Column="3"
Height="30"
MinWidth="30"
Padding="0,5"
hc:BorderElement.CornerRadius="0,4,4,0"
hc:IconElement.Geometry="{StaticResource ClipboardLinkSet20Regular}"
BorderThickness="0,1,1,1"
Command="{s:Action PasteClipboardCopilotSet}"
IsEnabled="{c:Binding '(Idle) and (StartEnabled)'}" />
<controls:TooltipBlock
Grid.Column="1"
HorizontalAlignment="Right"
VerticalAlignment="Top"
MouseLeftButtonDown="{s:Action SelectFile}"
NormalOpacity="0.25"
TooltipText="{DynamicResource SelectTheFileTip}" />
<controls:TooltipBlock
Grid.Column="2"
HorizontalAlignment="Right"
VerticalAlignment="Top"
MouseLeftButtonDown="{s:Action PasteClipboard}"
NormalOpacity="0.25"
TooltipText="{DynamicResource PasteClipboardTip}" />
<controls:TooltipBlock
Grid.Column="3"
Margin="0,0,-2,0"
HorizontalAlignment="Right"
VerticalAlignment="Top"
NormalOpacity="0.25"
TooltipText="{DynamicResource PasteClipboardCopilotSetTip}" />
</Grid>
</StackPanel>
<Grid Grid.Row="1" HorizontalAlignment="Center">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition />
</Grid.RowDefinitions>
<Grid
Grid.Row="0"
Margin="0,5,0,10"
HorizontalAlignment="Center"
VerticalAlignment="Bottom">
<Button
Width="120"
Height="50"
Command="{s:Action Start}"
Content="{DynamicResource Start}"
IsEnabled="{c:Binding 'StartEnabled and Inited'}"
Visibility="{c:Binding Idle}" />
<Button
Width="120"
Height="50"
Command="{s:Action Stop}"
Content="{DynamicResource Stop}"
IsEnabled="{c:Binding Inited}"
Visibility="{c:Binding !Idle}" />
</Grid>
<StackPanel
Grid.Row="1"
HorizontalAlignment="Center"
IsEnabled="{Binding Idle}">
<!-- AutoSquad -->
<StackPanel
Margin="2.5,5"
Orientation="Horizontal"
Visibility="{c:Binding 'CopilotTabIndex == 0 or CopilotTabIndex == 3'}">
<CheckBox
Height="20"
Content="{DynamicResource AutoSquad}"
IsChecked="{Binding Form}" />
<controls:TooltipBlock TooltipText="{DynamicResource AutoSquadTip}" />
</StackPanel>
<!-- UseFormation -->
<StackPanel
Height="28"
Orientation="Horizontal"
Visibility="{c:Binding '(CopilotTabIndex == 0 or CopilotTabIndex == 3) and Form'}">
<CheckBox
Margin="2.5,5"
Content="{DynamicResource UseFormation}"
IsChecked="{c:Binding UseFormation}" />
<ComboBox
DisplayMemberPath="Display"
ItemsSource="{Binding FormationSelectList}"
SelectedValue="{Binding FormationIndex}"
SelectedValuePath="Value"
Visibility="{c:Binding UseFormation}" />
</StackPanel>
<!-- IgnoreRequirements -->
<StackPanel
Margin="2.5,5"
Orientation="Horizontal"
Visibility="{c:Binding 'Form and (CopilotTabIndex == 0 or CopilotTabIndex == 3)'}">
<CheckBox Content="{DynamicResource Copilot.IgnoreRequirements}" IsChecked="{Binding IgnoreRequirements}" />
<controls:TooltipBlock TooltipText="{DynamicResource Copilot.IgnoreRequirements.Tip}" />
</StackPanel>
<!-- SupportUnitUsage -->
<WrapPanel Orientation="Vertical" Visibility="{c:Binding 'Form and (CopilotTabIndex == 0 or CopilotTabIndex == 3)'}">
<StackPanel Orientation="Horizontal">
<CheckBox
Margin="2.5,5"
Content="{DynamicResource SupportUnitUsage}"
IsChecked="{Binding UseSupportUnitUsage}" />
<controls:TooltipBlock TooltipText="{DynamicResource SupportUnitUsage.Tip}" />
</StackPanel>
<hc:ComboBox
MinWidth="100"
Margin="24,0,0,0"
DisplayMemberPath="Display"
ItemsSource="{Binding SupportUnitUsageList}"
SelectedValue="{Binding SupportUnitUsage}"
SelectedValuePath="Value"
Visibility="{c:Binding UseSupportUnitUsage}" />
</WrapPanel>
<!-- AddTrust -->
<CheckBox
Margin="2.5,5"
Content="{DynamicResource AddTrust}"
IsChecked="{Binding AddTrust}"
Visibility="{c:Binding 'Form and (CopilotTabIndex == 0 or CopilotTabIndex == 3)'}" />
<!-- AddUserAdditional -->
<WrapPanel Orientation="Horizontal" Visibility="{c:Binding 'Form and (CopilotTabIndex == 0 or CopilotTabIndex == 3)'}">
<CheckBox
Margin="2.5,5"
Content="{DynamicResource AddUserAdditional}"
IsChecked="{Binding AddUserAdditional}" />
<StackPanel Orientation="Horizontal">
<Button
x:Name="UserAdditionalButton"
Width="15"
Height="15"
MinWidth="20"
Margin="2.5,5,0,5"
Padding="0"
hc:IconElement.Geometry="{StaticResource ConfigGeometry}"
BorderThickness="0"
Command="{s:Action OpenUserAdditionalPopup}"
ToolTip="{Binding UserAdditionalPrettyJson}"
ToolTipService.ShowOnDisabled="True" />
<controls:TooltipBlock TooltipText="{DynamicResource AddUserAdditionalTip}" />
<Popup
IsOpen="{Binding IsUserAdditionalPopupOpen}"
Placement="Center"
PlacementTarget="{Binding ElementName=UserAdditionalButton}"
PopupAnimation="Slide"
StaysOpen="False">
<Border
MaxWidth="600"
MaxHeight="500"
Padding="10"
Background="{DynamicResource RegionBrush}"
BorderBrush="{DynamicResource BorderBrush}"
BorderThickness="1"
CornerRadius="4">
<StackPanel>
<TextBlock Margin="0,0,0,5" Text="{DynamicResource AddUserAdditional}" />
<DataGrid
x:Name="UserAdditionalDataGrid"
MaxHeight="350"
AutoGenerateColumns="False"
Background="{DynamicResource RegionBrush}"
CanUserAddRows="False"
CanUserDeleteRows="False"
CanUserResizeColumns="False"
CanUserResizeRows="False"
HeadersVisibility="Column"
ItemsSource="{Binding UserAdditionalItems}"
RowHeight="40"
SelectionMode="Single">
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Setter Property="Background" Value="{DynamicResource RegionBrushOpacity25}" />
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="{DynamicResource RegionBrushOpacity25}" />
</Trigger>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="{DynamicResource MouseOverRegionBrushOpacity75}" />
</Trigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
<DataGrid.Columns>
<DataGridTextColumn
Width="Auto"
Binding="{Binding Name, UpdateSourceTrigger=PropertyChanged}"
Foreground="{DynamicResource PrimaryTextBrush}"
Header="{DynamicResource UserAdditional.OperatorName}" />
<DataGridTemplateColumn Width="80" Header="{DynamicResource UserAdditional.Skill}">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<hc:NumericUpDown
Height="20"
InputMethod.IsInputMethodEnabled="False"
Maximum="3"
Minimum="0"
Value="{Binding Skill, UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Width="140" Header="{DynamicResource CopilotModule}">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox
Height="24"
DisplayMemberPath="Key"
ItemsSource="{Binding DataContext.ModuleMapping, RelativeSource={RelativeSource AncestorType=DataGrid}}"
SelectedValue="{Binding Module, UpdateSourceTrigger=PropertyChanged}"
SelectedValuePath="Value">
<!-- TODO: 后续可改为绑定到单独的 Module 选项列表 -->
</ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Width="Auto" Header="{DynamicResource UserAdditional.Action}">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button
Width="20"
Height="20"
MinWidth="20"
Padding="0"
hc:IconElement.Geometry="{StaticResource CloseGeometry}"
BorderThickness="0"
Command="{s:Action RemoveUserAdditionalItem}"
CommandParameter="{Binding}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
<Grid Margin="0,5,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Button
Grid.Column="0"
Width="80"
Height="25"
Padding="0"
HorizontalAlignment="Left"
Command="{s:Action AddUserAdditionalItem}"
Content="{DynamicResource UserAdditional.Add}" />
<Button
Grid.Column="1"
Width="60"
Height="25"
Padding="0"
Command="{s:Action SaveUserAdditional}"
Content="{DynamicResource Ok}" />
<Button
Grid.Column="2"
Width="60"
Height="25"
Margin="5,0,0,0"
Padding="0"
Command="{s:Action CancelUserAdditionalEdit}"
Content="{DynamicResource Cancel}" />
</Grid>
</StackPanel>
</Border>
</Popup>
</StackPanel>
</WrapPanel>
<!-- UseCopilotList -->
<StackPanel
Margin="2.5,5"
IsEnabled="{c:Binding 'CopilotTabIndex == 0 or CopilotTabIndex == 2'}"
Orientation="Horizontal">
<CheckBox Content="{DynamicResource UseCopilotList}" IsChecked="{Binding UseCopilotList}" />
<controls:TooltipBlock TooltipText="{DynamicResource UseCopilotListTip}" />
</StackPanel>
<!-- UseSanityPotion -->
<CheckBox
Margin="2.5,5"
Content="{DynamicResource UseSanityPotion}"
IsChecked="{Binding UseSanityPotion}"
Visibility="{c:Binding 'UseCopilotList and CopilotTabIndex == 0'}" />
<!-- Loop / LoopTimes -->
<StackPanel Orientation="Horizontal" Visibility="{c:Binding '!UseCopilotList and CopilotTabIndex != 0 and CopilotTabIndex != 2'}">
<CheckBox
Margin="2.5,5"
Content="{DynamicResource LoopTimes}"
IsChecked="{Binding Loop}" />
<hc:NumericUpDown
Height="20"
InputMethod.IsInputMethodEnabled="False"
Maximum="9999"
Minimum="0"
Value="{Binding LoopTimes}" />
</StackPanel>
</StackPanel>
</Grid>
<Grid
Grid.Column="1"
Margin="5,0,0,10"
Visibility="{c:Binding '(UseCopilotList and (CopilotTabIndex == 0 or CopilotTabIndex == 2)) or CopilotTabIndex == 1 or CopilotTabIndex == 3'}">
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<ListBox
x:Name="CopilotList"
Grid.Row="0"
Grid.ColumnSpan="4"
HorizontalContentAlignment="Stretch"
d:ItemsSource="{d:SampleData ItemCount=7}"
dd:DragDrop.DragDropContext="{Binding RelativeSource={RelativeSource Self}}"
dd:DragDrop.IsDragSource="{Binding Idle}"
dd:DragDrop.IsDropTarget="{Binding Idle}"
hc:BorderElement.CornerRadius="4,4,0,0"
properties:AutoScroll.AutoScroll="True"
BorderThickness="1,1,1,0"
IsEnabled="{c:Binding StartEnabled}"
ItemsSource="{Binding Path=CopilotItemViewModels}"
Style="{DynamicResource NoSelectedHighlightListBoxStyle}"
ToolTip="{DynamicResource LabelSequenceTip}">
<ListBox.ItemContainerStyle>
<Style BasedOn="{StaticResource NoSelectedHighlightListBoxItemStyle}" TargetType="ListBoxItem">
<Setter Property="Background" Value="Transparent" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsRaid}" Value="True">
<Setter Property="Background" Value="#33FF0000" />
</DataTrigger>
</Style.Triggers>
</Style>
</ListBox.ItemContainerStyle>
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<CheckBox
Grid.Column="0"
IsChecked="{Binding IsChecked}"
IsEnabled="{Binding ElementName=CopilotList, Path=DataContext.Idle}"
IsHitTestVisible="{Binding ElementName=CopilotList, Path=DataContext.Idle}"
ToolTip="{c:Binding CopilotId}"
Visibility="{c:Binding 'DataContext.CopilotTabIndex != 1 and DataContext.CopilotTabIndex != 3',
RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}">
<TextBlock Text="{Binding Name}" ToolTip="{Binding CopilotId}" />
</CheckBox>
<controls:TextBlock
Grid.Column="0"
HorizontalAlignment="Left"
Text="{Binding Name}"
ToolTip="{Binding CopilotId}"
Visibility="{c:Binding 'DataContext.CopilotTabIndex == 1 or DataContext.CopilotTabIndex == 3',
RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" />
<Button
Grid.Column="1"
Margin="0"
Padding="5,6"
hc:IconElement.Geometry="{StaticResource CopilotListItemToParse}"
hc:VisualElement.HighlightBackground="Transparent"
hc:VisualElement.HighlightForeground="{DynamicResource PrimaryBrush}"
Background="Transparent"
BorderThickness="0"
Foreground="{DynamicResource SecondaryTextBrush}"
IsEnabled="{Binding ElementName=CopilotList, Path=DataContext.Idle}"
MouseRightButtonUp="{s:Action SelectCopilotTask}"
PreviewMouseLeftButtonUp="{s:Action SelectCopilotTask}"
Tag="{c:Binding Index}" />
<Button
Grid.Column="2"
Margin="0"
Padding="5,0,10,0"
hc:IconElement.Geometry="{StaticResource CloseGeometry}"
hc:VisualElement.HighlightBackground="Transparent"
hc:VisualElement.HighlightForeground="{DynamicResource PrimaryBrush}"
Background="Transparent"
BorderThickness="0"
Command="{s:Action DeleteCopilotTask}"
CommandParameter="{c:Binding Index}"
IsEnabled="{Binding ElementName=CopilotList, Path=DataContext.Idle}" />
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<Grid Grid.Row="1" Grid.Column="1">
<hc:TextBox
Height="30"
MinWidth="80"
HorizontalContentAlignment="Center"
VerticalContentAlignment="Center"
hc:BorderElement.CornerRadius="0"
hc:InfoElement.Placeholder="{DynamicResource CopilotTaskName}"
IsEnabled="{Binding Idle}"
MaxLines="1"
Text="{Binding CopilotTaskName, UpdateSourceTrigger=LostFocus}" />
<controls:TooltipBlock
HorizontalAlignment="Right"
VerticalAlignment="Top"
NormalOpacity="0.25"
TooltipText="{DynamicResource CopilotTaskNameTip}" />
</Grid>
<Grid Grid.Row="1" Grid.Column="0">
<Button
Height="30"
MinWidth="30"
hc:BorderElement.CornerRadius="0,0,0,4"
hc:IconElement.Geometry="{StaticResource FolderAdd20Regular}"
BorderThickness="1,1,0,1"
Command="{s:Action ImportFiles}"
IsEnabled="{c:Binding '(Idle) and (StartEnabled)'}" />
<controls:TooltipBlock
HorizontalAlignment="Right"
VerticalAlignment="Top"
MouseLeftButtonDown="{s:Action ImportFiles}"
NormalOpacity="0.25"
TooltipText="{DynamicResource ImportFilesTip}" />
</Grid>
<Grid Grid.Row="1" Grid.Column="2">
<Button
Height="30"
MinWidth="30"
hc:BorderElement.CornerRadius="0"
hc:IconElement.Geometry="{StaticResource Add20Regular}"
BorderThickness="0,1"
Command="{s:Action AddCopilotTask}"
IsEnabled="{c:Binding '(Idle) and (StartEnabled)'}"
MouseRightButtonUp="{s:Action AddCopilotTask_Adverse}" />
<controls:TooltipBlock
HorizontalAlignment="Right"
VerticalAlignment="Top"
MouseLeftButtonDown="{s:Action AddCopilotTask}"
MouseRightButtonUp="{s:Action AddCopilotTask_Adverse}"
NormalOpacity="0.25"
TooltipText="{DynamicResource CopilotAddTask}" />
</Grid>
<Grid Grid.Row="1" Grid.Column="3">
<Button
Height="30"
MinWidth="30"
hc:BorderElement.CornerRadius="0,0,4,0"
hc:IconElement.Geometry="{StaticResource DismissSquareMultiple20Regular}"
BorderThickness="1"
Command="{s:Action ClearCopilotTask}"
Foreground="{DynamicResource DangerBrush}"
IsEnabled="{c:Binding Idle}"
MouseRightButtonUp="{s:Action CleanUnableCopilotTask}" />
<controls:TooltipBlock
HorizontalAlignment="Right"
VerticalAlignment="Top"
MouseLeftButtonDown="{s:Action ClearCopilotTask}"
MouseRightButtonUp="{s:Action CleanUnableCopilotTask}"
NormalOpacity="0.25"
TooltipText="{DynamicResource CopilotClearTask}" />
</Grid>
</Grid>
</Grid>
<controls:TextBlock Grid.Row="2" Block.TextAlignment="Center">
<Hyperlink
Cursor="Hand"
NavigateUri="{Binding CopilotUrl}"
TextDecorations="None">
<TextBlock d:Text="PrtsPlus" Text="{Binding UrlText}" />
</Hyperlink>
</controls:TextBlock>
</Grid>
<Grid
Grid.Column="{c:Binding 'UseCopilotList ? 3 : 2'}"
Grid.ColumnSpan="{c:Binding 'UseCopilotList ? 1 : 2'}"
d:Grid.Column="3"
d:Grid.ColumnSpan="1">
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<!-- 覆盖层:悬浮窗按钮,绑定到信息流区域右上角(不占布局) -->
<Grid
Margin="0,10,0,0"
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, Source={x:Static helper:Instances.TaskQueueViewModel}}" 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>
<hc:ScrollViewer
properties:AutoScroll.AutoScroll="True"
HorizontalScrollBarVisibility="Disabled"
IsInertiaEnabled="True"
PanningMode="VerticalOnly">
<ItemsControl ItemsSource="{Binding LogItemViewModels}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<controls:TextBlock
Grid.Column="0"
Margin="0,5,12,0"
HorizontalAlignment="Left"
VerticalAlignment="Stretch"
Foreground="{DynamicResource TraceLogBrush}"
Text="{Binding Time}"
TextWrapping="Wrap"
Visibility="{c:Binding ShowTime}" />
<controls:TextBlock
Grid.Column="1"
Margin="0,5"
HorizontalAlignment="Left"
VerticalAlignment="Stretch"
FontWeight="{Binding Weight}"
ForegroundKey="{Binding Color}"
Text="{Binding Content}"
TextWrapping="Wrap" />
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</hc:ScrollViewer>
<Grid
Grid.Row="1"
HorizontalAlignment="Center"
VerticalAlignment="Bottom"
Visibility="{c:Binding CouldLikeWebJson}">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<controls:TextBlock
Margin="10"
VerticalAlignment="Center"
Block.TextAlignment="Center"
Text="{DynamicResource DoYouLikeThisWebJson}"
TextWrapping="Wrap" />
<Button
Grid.Column="1"
Width="50"
Height="30"
Margin="10"
Command="{s:Action LikeWebJson}"
Content="👍" />
<Button
Grid.Column="2"
Width="50"
Height="30"
Margin="10"
Command="{s:Action DislikeWebJson}"
Content="👎" />
</Grid>
<controls:TextBlock
Grid.Row="2"
Margin="0,10,0,0"
Block.TextAlignment="Center">
<Hyperlink
Cursor="Hand"
NavigateUri="{Binding MapUrl}"
TextDecorations="None">
<TextBlock Text="{DynamicResource MapPrts}" />
</Hyperlink>
</controls:TextBlock>
</Grid>
</Grid>
</UserControl>