AiChatWindow.xaml 4.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. <Window x:Class="LocalizationTool.Views.AiChatWindow"
  2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4. xmlns:hc="https://handyorg.github.io/handycontrol"
  5. Title="AI 助手" Height="680" Width="800"
  6. WindowStartupLocation="CenterOwner"
  7. Background="#F5F6FA">
  8. <Grid Margin="16">
  9. <Grid.RowDefinitions>
  10. <RowDefinition Height="Auto"/>
  11. <RowDefinition Height="*"/>
  12. <RowDefinition Height="Auto"/>
  13. </Grid.RowDefinitions>
  14. <!-- 系统提示词(可编辑、可保存,指导 AI 输出行指令) -->
  15. <hc:Card Grid.Row="0" Margin="0,0,0,10" Padding="12">
  16. <StackPanel>
  17. <DockPanel Margin="0,0,0,8">
  18. <ComboBox DockPanel.Dock="Right" x:Name="CmbPermission" Width="180"
  19. SelectionChanged="CmbPermission_SelectionChanged"
  20. ToolTip="ask = 修改类工具执行前弹确认框;trusted = 完全信任自动执行(所有操作仍记录日志)"/>
  21. <TextBlock Text="工具权限:" VerticalAlignment="Center" FontSize="12" Foreground="#666"/>
  22. </DockPanel>
  23. <DockPanel Margin="0,0,0,6">
  24. <StackPanel DockPanel.Dock="Right" Orientation="Horizontal">
  25. <Button Content="↺ 恢复默认" Width="90" Style="{StaticResource ButtonDefault}"
  26. Click="BtnResetPrompt_Click" Margin="0,0,8,0"
  27. ToolTip="清空自定义提示词,按当前语种重新生成默认提示词"/>
  28. <Button Content="保存提示词" Width="90" Style="{StaticResource ButtonDefault}"
  29. Click="BtnSavePrompt_Click"
  30. ToolTip="保存为自定义提示词(优先于动态默认)"/>
  31. </StackPanel>
  32. <TextBlock Text="系统提示词(按语种动态生成 · 可自定义)" FontWeight="Bold" FontSize="13" Foreground="#333"/>
  33. </DockPanel>
  34. <TextBox x:Name="TxtSystemPrompt" Height="64" TextWrapping="Wrap" AcceptsReturn="True"
  35. VerticalScrollBarVisibility="Auto" FontSize="11" Style="{StaticResource TextBoxExtend}"/>
  36. </StackPanel>
  37. </hc:Card>
  38. <!-- 聊天记录(消息流:用户消息 / 思考过程折叠区 / AI 正文流式追加) -->
  39. <ScrollViewer x:Name="ChatScroll" Grid.Row="1" VerticalScrollBarVisibility="Auto"
  40. Background="#FFFFFF" Padding="10" BorderBrush="#E4E7EC" BorderThickness="1">
  41. <StackPanel x:Name="ChatPanel"/>
  42. </ScrollViewer>
  43. <!-- 输入区(上方:快捷指令列表,选择后填入文本框可再编辑) -->
  44. <StackPanel Grid.Row="2" Margin="0,10,0,0">
  45. <!-- 上下文用量指示器:发送前按当前消息估算 token 占用 -->
  46. <DockPanel Margin="0,0,0,6">
  47. <Button x:Name="BtnCompressContext" DockPanel.Dock="Right" Content="🗜️ 压缩上下文" Width="110"
  48. FontSize="11" Style="{StaticResource ButtonDefault}" Margin="0,0,6,0"
  49. Click="BtnCompressContext_Click" ToolTip="手动压缩上下文,移除早期对话轮次以释放 token 空间"/>
  50. <TextBlock x:Name="TxtContextUsage" FontSize="11" VerticalAlignment="Center"
  51. Foreground="#888" Text="上下文: --"/>
  52. <ProgressBar x:Name="ProgressContext" Height="auto" Minimum="0" Maximum="100" Value="0"
  53. Foreground="#4C8BF5" Background="#E4E7EC" BorderThickness="0"/>
  54. </DockPanel>
  55. <DockPanel Margin="0,0,0,6">
  56. <TextBlock Text="⚡ 快捷指令:" VerticalAlignment="Center" FontSize="12" Foreground="#666"/>
  57. <ComboBox x:Name="CmbQuickPrompts" Width="420" Margin="6,0,0,0" FontSize="12"
  58. SelectionChanged="CmbQuickPrompts_SelectionChanged"
  59. ToolTip="选择后自动填入输入框,可修改后再发送"/>
  60. </DockPanel>
  61. <DockPanel>
  62. <Button DockPanel.Dock="Right" x:Name="BtnSend" Content="发送" Width="84" FontSize="15"
  63. Style="{StaticResource ButtonPrimary}" Click="BtnSend_Click" Margin="0,0,0,0" Height="39"/>
  64. <TextBox x:Name="TxtInput" Height="72" TextWrapping="Wrap" AcceptsReturn="True" FontSize="15"
  65. VerticalScrollBarVisibility="Auto" Style="{StaticResource TextBoxExtend}"
  66. ToolTip="Enter 发送,Ctrl+Enter 换行" PreviewKeyDown="TxtInput_PreviewKeyDown"/>
  67. </DockPanel>
  68. </StackPanel>
  69. </Grid>
  70. </Window>