465 lines
39 KiB
XML
465 lines
39 KiB
XML
<Window x:Class="MemScanEDR.MainWindow"
|
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
|
xmlns:local="clr-namespace:MemScanEDR"
|
|
Title="MemScan-EDR v2.0 - AI Memory Detection"
|
|
Height="750" Width="1200"
|
|
MinHeight="650" MinWidth="1000"
|
|
WindowStartupLocation="CenterScreen"
|
|
WindowStyle="None" AllowsTransparency="True"
|
|
Background="Transparent">
|
|
|
|
<Window.Resources>
|
|
<Color x:Key="BgRoot">#f0f2f5</Color>
|
|
<Color x:Key="BgSidebar">#1e293b</Color>
|
|
<Color x:Key="BgContent">#ffffff</Color>
|
|
<Color x:Key="BgCard">#ffffff</Color>
|
|
<Color x:Key="BgInput">#f1f5f9</Color>
|
|
<Color x:Key="BorderDim">#e2e8f0</Color>
|
|
<Color x:Key="TextPrimary">#1e293b</Color>
|
|
<Color x:Key="TextSecondary">#64748b</Color>
|
|
<Color x:Key="TextDim">#94a3b8</Color>
|
|
<Color x:Key="AccentRed">#ef4444</Color>
|
|
<Color x:Key="AccentBlue">#3b82f6</Color>
|
|
<Color x:Key="AccentGreen">#22c55e</Color>
|
|
<Color x:Key="AccentYellow">#f59e0b</Color>
|
|
<Color x:Key="AccentPurple">#8b5cf6</Color>
|
|
<Color x:Key="HighlightBlue">#eff6ff</Color>
|
|
<Color x:Key="SidebarText">#cbd5e1</Color>
|
|
<Color x:Key="SidebarTextDim">#64748b</Color>
|
|
<Color x:Key="SidebarHighlight">#334155</Color>
|
|
|
|
<SolidColorBrush x:Key="BgRootBrush" Color="{StaticResource BgRoot}"/>
|
|
<SolidColorBrush x:Key="BgSidebarBrush" Color="{StaticResource BgSidebar}"/>
|
|
<SolidColorBrush x:Key="BgContentBrush" Color="{StaticResource BgContent}"/>
|
|
<SolidColorBrush x:Key="BgCardBrush" Color="{StaticResource BgCard}"/>
|
|
<SolidColorBrush x:Key="BgInputBrush" Color="{StaticResource BgInput}"/>
|
|
<SolidColorBrush x:Key="BorderDimBrush" Color="{StaticResource BorderDim}"/>
|
|
<SolidColorBrush x:Key="TextPrimaryBrush" Color="{StaticResource TextPrimary}"/>
|
|
<SolidColorBrush x:Key="TextSecondaryBrush" Color="{StaticResource TextSecondary}"/>
|
|
<SolidColorBrush x:Key="TextDimBrush" Color="{StaticResource TextDim}"/>
|
|
<SolidColorBrush x:Key="AccentRedBrush" Color="{StaticResource AccentRed}"/>
|
|
<SolidColorBrush x:Key="AccentBlueBrush" Color="{StaticResource AccentBlue}"/>
|
|
<SolidColorBrush x:Key="AccentGreenBrush" Color="{StaticResource AccentGreen}"/>
|
|
<SolidColorBrush x:Key="AccentYellowBrush" Color="{StaticResource AccentYellow}"/>
|
|
<SolidColorBrush x:Key="AccentPurpleBrush" Color="{StaticResource AccentPurple}"/>
|
|
<SolidColorBrush x:Key="HighlightBlueBrush" Color="{StaticResource HighlightBlue}"/>
|
|
<SolidColorBrush x:Key="SidebarTextBrush" Color="{StaticResource SidebarText}"/>
|
|
<SolidColorBrush x:Key="SidebarTextDimBrush" Color="{StaticResource SidebarTextDim}"/>
|
|
<SolidColorBrush x:Key="SidebarHighlightBrush" Color="{StaticResource SidebarHighlight}"/>
|
|
|
|
<local:ListToStringConverter x:Key="ListToStringConv"/>
|
|
<local:RiskLevelToColorConverter x:Key="RiskColorConv"/>
|
|
<local:RiskLevelToTextConverter x:Key="RiskTextConv"/>
|
|
|
|
<!-- Nav Button -->
|
|
<Style x:Key="NavBtn" TargetType="RadioButton">
|
|
<Setter Property="Background" Value="Transparent"/>
|
|
<Setter Property="Foreground" Value="{StaticResource SidebarTextBrush}"/>
|
|
<Setter Property="FontSize" Value="13"/>
|
|
<Setter Property="FontFamily" Value="Segoe UI, Microsoft YaHei"/>
|
|
<Setter Property="Height" Value="40"/>
|
|
<Setter Property="Cursor" Value="Hand"/>
|
|
<Setter Property="Margin" Value="8,1"/>
|
|
<Setter Property="Padding" Value="14,0"/>
|
|
<Setter Property="GroupName" Value="Nav"/>
|
|
<Setter Property="Template">
|
|
<Setter.Value>
|
|
<ControlTemplate TargetType="RadioButton">
|
|
<Border x:Name="Bd" CornerRadius="8" Padding="{TemplateBinding Padding}"
|
|
Background="{TemplateBinding Background}" Margin="{TemplateBinding Margin}">
|
|
<ContentPresenter VerticalAlignment="Center"/>
|
|
</Border>
|
|
<ControlTemplate.Triggers>
|
|
<Trigger Property="IsMouseOver" Value="True">
|
|
<Setter TargetName="Bd" Property="Background" Value="{StaticResource SidebarHighlightBrush}"/>
|
|
</Trigger>
|
|
<Trigger Property="IsChecked" Value="True">
|
|
<Setter TargetName="Bd" Property="Background" Value="{StaticResource AccentBlueBrush}"/>
|
|
<Setter Property="Foreground" Value="White"/>
|
|
<Setter Property="FontWeight" Value="SemiBold"/>
|
|
</Trigger>
|
|
</ControlTemplate.Triggers>
|
|
</ControlTemplate>
|
|
</Setter.Value>
|
|
</Setter>
|
|
</Style>
|
|
|
|
<!-- Primary Button -->
|
|
<Style x:Key="PrimaryBtn" TargetType="Button">
|
|
<Setter Property="Background" Value="{StaticResource AccentBlueBrush}"/>
|
|
<Setter Property="Foreground" Value="White"/>
|
|
<Setter Property="FontFamily" Value="Segoe UI, Microsoft YaHei"/>
|
|
<Setter Property="FontSize" Value="13"/>
|
|
<Setter Property="FontWeight" Value="SemiBold"/>
|
|
<Setter Property="Height" Value="40"/>
|
|
<Setter Property="Padding" Value="22,0"/>
|
|
<Setter Property="Cursor" Value="Hand"/>
|
|
<Setter Property="BorderThickness" Value="0"/>
|
|
<Setter Property="Template">
|
|
<Setter.Value>
|
|
<ControlTemplate TargetType="Button">
|
|
<Border x:Name="Bd" CornerRadius="8" Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}">
|
|
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
|
|
</Border>
|
|
<ControlTemplate.Triggers>
|
|
<Trigger Property="IsMouseOver" Value="True"><Setter TargetName="Bd" Property="Background" Value="#2563eb"/></Trigger>
|
|
<Trigger Property="IsPressed" Value="True"><Setter TargetName="Bd" Property="Background" Value="#1d4ed8"/></Trigger>
|
|
<Trigger Property="IsEnabled" Value="False">
|
|
<Setter TargetName="Bd" Property="Background" Value="#cbd5e1"/>
|
|
<Setter Property="Foreground" Value="#94a3b8"/>
|
|
</Trigger>
|
|
</ControlTemplate.Triggers>
|
|
</ControlTemplate>
|
|
</Setter.Value>
|
|
</Setter>
|
|
</Style>
|
|
|
|
<!-- Stop Button -->
|
|
<Style x:Key="StopBtn" TargetType="Button" BasedOn="{StaticResource PrimaryBtn}">
|
|
<Setter Property="Background" Value="{StaticResource AccentRedBrush}"/>
|
|
<Style.Triggers><Trigger Property="IsEnabled" Value="False"><Setter Property="Background" Value="#fecaca"/></Trigger></Style.Triggers>
|
|
</Style>
|
|
|
|
<!-- Browse Button -->
|
|
<Style x:Key="BrowseBtn" TargetType="Button">
|
|
<Setter Property="Background" Value="{StaticResource BgInputBrush}"/>
|
|
<Setter Property="Foreground" Value="{StaticResource TextSecondaryBrush}"/>
|
|
<Setter Property="FontFamily" Value="Segoe UI, Microsoft YaHei"/>
|
|
<Setter Property="FontSize" Value="12"/>
|
|
<Setter Property="Height" Value="34"/>
|
|
<Setter Property="Width" Value="80"/>
|
|
<Setter Property="Cursor" Value="Hand"/>
|
|
<Setter Property="Template">
|
|
<Setter.Value>
|
|
<ControlTemplate TargetType="Button">
|
|
<Border x:Name="Bd" CornerRadius="6" Background="{TemplateBinding Background}"
|
|
BorderBrush="{StaticResource BorderDimBrush}" BorderThickness="1">
|
|
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
|
|
</Border>
|
|
<ControlTemplate.Triggers>
|
|
<Trigger Property="IsMouseOver" Value="True">
|
|
<Setter TargetName="Bd" Property="Background" Value="#e2e8f0"/>
|
|
<Setter TargetName="Bd" Property="BorderBrush" Value="{StaticResource AccentBlueBrush}"/>
|
|
</Trigger>
|
|
</ControlTemplate.Triggers>
|
|
</ControlTemplate>
|
|
</Setter.Value>
|
|
</Setter>
|
|
</Style>
|
|
</Window.Resources>
|
|
|
|
<!-- WINDOW CHROME -->
|
|
<Border CornerRadius="12" Background="{StaticResource BgRootBrush}" BorderBrush="#d0d5dd" BorderThickness="1">
|
|
<Border.Effect>
|
|
<DropShadowEffect BlurRadius="20" ShadowDepth="2" Opacity="0.10" Color="#475569"/>
|
|
</Border.Effect>
|
|
<Grid>
|
|
<Grid.RowDefinitions><RowDefinition Height="38"/><RowDefinition Height="*"/></Grid.RowDefinitions>
|
|
|
|
<!-- Title Bar -->
|
|
<Border Grid.Row="0" Background="Transparent" MouseLeftButtonDown="TitleBar_MouseLeftButtonDown">
|
|
<Grid>
|
|
<Grid.ColumnDefinitions><ColumnDefinition Width="Auto"/><ColumnDefinition Width="*"/><ColumnDefinition Width="Auto"/></Grid.ColumnDefinitions>
|
|
<StackPanel Orientation="Horizontal" Margin="14,0,0,0" VerticalAlignment="Center">
|
|
<Ellipse Width="9" Height="9" Fill="{StaticResource AccentPurpleBrush}" Margin="0,0,8,0"/>
|
|
<TextBlock Text="MemScan-EDR v2.0" Foreground="{StaticResource TextSecondaryBrush}" FontSize="11.5" VerticalAlignment="Center"/>
|
|
</StackPanel>
|
|
<TextBlock Grid.Column="1" Text="AI-Powered Memory Detection" HorizontalAlignment="Center" VerticalAlignment="Center"
|
|
Foreground="{StaticResource TextDimBrush}" FontSize="11"/>
|
|
<StackPanel Grid.Column="2" Orientation="Horizontal" Margin="0,0,4,0">
|
|
<Button x:Name="BtnLang" Content="中" Width="32" Height="24" Click="BtnLangToggle_Click"
|
|
Foreground="{StaticResource TextSecondaryBrush}" Background="Transparent"
|
|
BorderThickness="0" Cursor="Hand" FontSize="11" FontWeight="SemiBold"/>
|
|
<Button Content="—" Width="32" Height="24" Click="BtnMinimize"
|
|
Foreground="{StaticResource TextSecondaryBrush}" Background="Transparent"
|
|
BorderThickness="0" Cursor="Hand" FontSize="12"/>
|
|
<Button Content="□" Width="32" Height="24" Click="BtnMaximize"
|
|
Foreground="{StaticResource TextSecondaryBrush}" Background="Transparent"
|
|
BorderThickness="0" Cursor="Hand" FontSize="13"/>
|
|
<Button Content="✕" Width="32" Height="24" Click="BtnClose"
|
|
Foreground="{StaticResource TextSecondaryBrush}" Background="Transparent"
|
|
BorderThickness="0" Cursor="Hand" FontSize="11"/>
|
|
</StackPanel>
|
|
</Grid>
|
|
</Border>
|
|
|
|
<!-- MAIN CONTENT -->
|
|
<Grid Grid.Row="1">
|
|
<Grid.ColumnDefinitions><ColumnDefinition Width="220"/><ColumnDefinition Width="*"/></Grid.ColumnDefinitions>
|
|
|
|
<!-- SIDEBAR -->
|
|
<Border Grid.Column="0" Background="{StaticResource BgSidebarBrush}" CornerRadius="0,0,0,12">
|
|
<Grid>
|
|
<Grid.RowDefinitions><RowDefinition Height="Auto"/><RowDefinition Height="*"/><RowDefinition Height="Auto"/></Grid.RowDefinitions>
|
|
<StackPanel Grid.Row="0" Margin="20,18,20,6">
|
|
<StackPanel Orientation="Horizontal">
|
|
<Border Width="34" Height="34" CornerRadius="10" Background="#334155">
|
|
<TextBlock Text="AI" FontSize="17" FontWeight="Bold" Foreground="{StaticResource AccentPurpleBrush}"
|
|
HorizontalAlignment="Center" VerticalAlignment="Center"/>
|
|
</Border>
|
|
<StackPanel Margin="10,0,0,0" VerticalAlignment="Center">
|
|
<TextBlock Text="MemScan" FontSize="17" FontWeight="Bold" Foreground="White"/>
|
|
<TextBlock Text="EDR v2.0" FontSize="11" Foreground="{StaticResource SidebarTextDimBrush}"/>
|
|
</StackPanel>
|
|
</StackPanel>
|
|
</StackPanel>
|
|
<StackPanel Grid.Row="1" Margin="0,14,0,0">
|
|
<TextBlock x:Name="TbMonHeader" Text="监控" Margin="24,8,0,6" FontSize="10"
|
|
Foreground="{StaticResource SidebarTextDimBrush}" FontWeight="SemiBold"/>
|
|
<RadioButton x:Name="NavDashboard" Style="{StaticResource NavBtn}" IsChecked="True" Checked="NavChanged">
|
|
<StackPanel Orientation="Horizontal">
|
|
<TextBlock Text="◆" FontSize="10" Margin="0,0,10,0" VerticalAlignment="Center"/>
|
|
<TextBlock x:Name="TbNavDashboard" Text="仪表盘" VerticalAlignment="Center"/>
|
|
</StackPanel>
|
|
</RadioButton>
|
|
<RadioButton x:Name="NavProcess" Style="{StaticResource NavBtn}" Checked="NavChanged">
|
|
<StackPanel Orientation="Horizontal">
|
|
<TextBlock Text="◆" FontSize="10" Margin="0,0,10,0" VerticalAlignment="Center"/>
|
|
<TextBlock x:Name="TbNavProcess" Text="进程列表" VerticalAlignment="Center"/>
|
|
</StackPanel>
|
|
</RadioButton>
|
|
<RadioButton x:Name="NavScan" Style="{StaticResource NavBtn}" Checked="NavChanged">
|
|
<StackPanel Orientation="Horizontal">
|
|
<TextBlock Text="◆" FontSize="10" Margin="0,0,10,0" VerticalAlignment="Center"/>
|
|
<TextBlock x:Name="TbNavScan" Text="扫描进度" VerticalAlignment="Center"/>
|
|
</StackPanel>
|
|
</RadioButton>
|
|
<TextBlock x:Name="TbSysHeader" Text="系统" Margin="24,20,0,6" FontSize="10"
|
|
Foreground="{StaticResource SidebarTextDimBrush}" FontWeight="SemiBold"/>
|
|
<RadioButton x:Name="NavSettings" Style="{StaticResource NavBtn}" Checked="NavChanged">
|
|
<StackPanel Orientation="Horizontal">
|
|
<TextBlock Text="◆" FontSize="10" Margin="0,0,10,0" VerticalAlignment="Center"/>
|
|
<TextBlock x:Name="TbNavSettings" Text="设置" VerticalAlignment="Center"/>
|
|
</StackPanel>
|
|
</RadioButton>
|
|
</StackPanel>
|
|
<StackPanel Grid.Row="2" Margin="16,0,16,18">
|
|
<Border Background="#334155" CornerRadius="10" Padding="12,10">
|
|
<StackPanel>
|
|
<TextBlock x:Name="TbQuickScan" Text="快速扫描" FontSize="12" FontWeight="SemiBold"
|
|
Foreground="{StaticResource AccentPurpleBrush}"/>
|
|
<TextBlock x:Name="TbQuickScanDesc" Text="AI 管线分析所有进程" FontSize="10.5"
|
|
Foreground="{StaticResource SidebarTextDimBrush}" Margin="0,4,0,8"/>
|
|
<Button x:Name="BtnStartScan" Content="开始扫描" Style="{StaticResource PrimaryBtn}"
|
|
Height="34" FontSize="12" Click="BtnStartScan_Click"/>
|
|
</StackPanel>
|
|
</Border>
|
|
</StackPanel>
|
|
</Grid>
|
|
</Border>
|
|
|
|
<!-- CONTENT AREA -->
|
|
<Border Grid.Column="1" Background="{StaticResource BgContentBrush}" CornerRadius="0,0,12,0">
|
|
<Grid x:Name="ContentArea">
|
|
|
|
<!-- DASHBOARD -->
|
|
<Grid x:Name="DashboardView" Margin="24,18,24,20" Visibility="Visible">
|
|
<Grid.RowDefinitions><RowDefinition Height="Auto"/><RowDefinition Height="Auto"/><RowDefinition Height="*"/></Grid.RowDefinitions>
|
|
<StackPanel Grid.Row="0" Orientation="Horizontal" Margin="0,0,0,14">
|
|
<TextBlock x:Name="TbDashboardTitle" Text="安全仪表盘" FontSize="20" FontWeight="SemiBold"
|
|
Foreground="{StaticResource TextPrimaryBrush}"/>
|
|
<Border Background="{StaticResource HighlightBlueBrush}" CornerRadius="10" Padding="10,3" Margin="14,0,0,0" VerticalAlignment="Center">
|
|
<TextBlock x:Name="LblDashboardStatus" Text="● AI 监控中" FontSize="10.5" FontWeight="SemiBold"
|
|
Foreground="{StaticResource AccentBlueBrush}"/>
|
|
</Border>
|
|
</StackPanel>
|
|
<Grid Grid.Row="1" Margin="0,0,0,14">
|
|
<Grid.ColumnDefinitions><ColumnDefinition Width="*"/><ColumnDefinition Width="10"/><ColumnDefinition Width="*"/><ColumnDefinition Width="10"/><ColumnDefinition Width="*"/><ColumnDefinition Width="10"/><ColumnDefinition Width="*"/></Grid.ColumnDefinitions>
|
|
<Border Grid.Column="0" CornerRadius="10" Background="{StaticResource BgCardBrush}" BorderBrush="{StaticResource BorderDimBrush}" BorderThickness="1" Padding="16,12">
|
|
<StackPanel>
|
|
<TextBlock x:Name="TbStatTotal" Text="已扫描" FontSize="10.5" Foreground="{StaticResource TextDimBrush}" FontWeight="SemiBold"/>
|
|
<TextBlock x:Name="StatTotal" Text="0" FontSize="30" FontWeight="Bold" Foreground="{StaticResource AccentBlueBrush}" Margin="0,4,0,0"/>
|
|
<TextBlock x:Name="TbStatTotalDesc" Text="进程" FontSize="11" Foreground="{StaticResource TextSecondaryBrush}"/>
|
|
</StackPanel>
|
|
</Border>
|
|
<Border Grid.Column="2" CornerRadius="10" Background="{StaticResource BgCardBrush}" BorderBrush="{StaticResource BorderDimBrush}" BorderThickness="1" Padding="16,12">
|
|
<StackPanel>
|
|
<TextBlock x:Name="TbStatHigh" Text="高风险" FontSize="10.5" Foreground="{StaticResource TextDimBrush}" FontWeight="SemiBold"/>
|
|
<TextBlock x:Name="StatHigh" Text="0" FontSize="30" FontWeight="Bold" Foreground="{StaticResource AccentRedBrush}" Margin="0,4,0,0"/>
|
|
<TextBlock x:Name="TbStatHighDesc" Text="严重告警" FontSize="11" Foreground="{StaticResource TextSecondaryBrush}"/>
|
|
</StackPanel>
|
|
</Border>
|
|
<Border Grid.Column="4" CornerRadius="10" Background="{StaticResource BgCardBrush}" BorderBrush="{StaticResource BorderDimBrush}" BorderThickness="1" Padding="16,12">
|
|
<StackPanel>
|
|
<TextBlock x:Name="TbStatSusp" Text="可疑" FontSize="10.5" Foreground="{StaticResource TextDimBrush}" FontWeight="SemiBold"/>
|
|
<TextBlock x:Name="StatSuspicious" Text="0" FontSize="30" FontWeight="Bold" Foreground="{StaticResource AccentYellowBrush}" Margin="0,4,0,0"/>
|
|
<TextBlock x:Name="TbStatSuspDesc" Text="警告" FontSize="11" Foreground="{StaticResource TextSecondaryBrush}"/>
|
|
</StackPanel>
|
|
</Border>
|
|
<Border Grid.Column="6" CornerRadius="10" Background="{StaticResource BgCardBrush}" BorderBrush="{StaticResource BorderDimBrush}" BorderThickness="1" Padding="16,12">
|
|
<StackPanel>
|
|
<TextBlock x:Name="TbStatSafe" Text="安全" FontSize="10.5" Foreground="{StaticResource TextDimBrush}" FontWeight="SemiBold"/>
|
|
<TextBlock x:Name="StatSafe" Text="0" FontSize="30" FontWeight="Bold" Foreground="{StaticResource AccentGreenBrush}" Margin="0,4,0,0"/>
|
|
<TextBlock x:Name="TbStatSafeDesc" Text="正常" FontSize="11" Foreground="{StaticResource TextSecondaryBrush}"/>
|
|
</StackPanel>
|
|
</Border>
|
|
</Grid>
|
|
<Grid Grid.Row="2">
|
|
<Grid.RowDefinitions><RowDefinition Height="Auto"/><RowDefinition Height="*"/></Grid.RowDefinitions>
|
|
<StackPanel Grid.Row="0" Orientation="Horizontal" Margin="0,0,0,8">
|
|
<TextBlock x:Name="TbRecentAlerts" Text="最近告警" FontSize="15" FontWeight="SemiBold" Foreground="{StaticResource TextPrimaryBrush}"/>
|
|
</StackPanel>
|
|
<DataGrid x:Name="DgAlerts" Grid.Row="1" AutoGenerateColumns="False" IsReadOnly="True"
|
|
CanUserAddRows="False" CanUserDeleteRows="False" CanUserSortColumns="True"
|
|
HeadersVisibility="Column" Background="{StaticResource BgCardBrush}"
|
|
BorderBrush="{StaticResource BorderDimBrush}" BorderThickness="1"
|
|
Foreground="{StaticResource TextPrimaryBrush}" GridLinesVisibility="Horizontal"
|
|
HorizontalGridLinesBrush="{StaticResource BorderDimBrush}"
|
|
RowHeight="36" SelectionUnit="FullRow"
|
|
ScrollViewer.HorizontalScrollBarVisibility="Disabled">
|
|
<DataGrid.Resources><Style TargetType="DataGridColumnHeader"><Setter Property="Background" Value="#f1f5f9"/><Setter Property="Foreground" Value="{StaticResource TextSecondaryBrush}"/><Setter Property="FontSize" Value="11"/><Setter Property="FontWeight" Value="SemiBold"/><Setter Property="Padding" Value="10,6"/><Setter Property="BorderBrush" Value="{StaticResource BorderDimBrush}"/><Setter Property="BorderThickness" Value="0,0,0,1"/></Style></DataGrid.Resources>
|
|
<DataGrid.Columns>
|
|
<DataGridTemplateColumn Header="RISK" Width="80">
|
|
<DataGridTemplateColumn.CellTemplate>
|
|
<DataTemplate>
|
|
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
|
|
<Ellipse Width="8" Height="8" Margin="0,0,6,0" Fill="{Binding RiskLevel, Converter={StaticResource RiskColorConv}}"/>
|
|
<TextBlock Text="{Binding RiskLevel, Converter={StaticResource RiskTextConv}}" FontSize="11.5" VerticalAlignment="Center"/>
|
|
</StackPanel>
|
|
</DataTemplate>
|
|
</DataGridTemplateColumn.CellTemplate>
|
|
</DataGridTemplateColumn>
|
|
<DataGridTextColumn Header="PID" Binding="{Binding Pid}" Width="55"/>
|
|
<DataGridTextColumn Header="PROCESS" Binding="{Binding ProcessName}" Width="*" MinWidth="120"/>
|
|
<DataGridTextColumn Header="SCORE" Binding="{Binding RiskScore, StringFormat={}{0:F2}}" Width="60"/>
|
|
<DataGridTextColumn Header="LAYER" Binding="{Binding DetectionLayer}" Width="120"/>
|
|
<DataGridTextColumn Header="PROVIDER" Binding="{Binding AIProvider}" Width="140"/>
|
|
<DataGridTextColumn Header="TIME" Binding="{Binding ScanTime, StringFormat=HH:mm:ss}" Width="70"/>
|
|
</DataGrid.Columns>
|
|
</DataGrid>
|
|
</Grid>
|
|
</Grid>
|
|
|
|
<!-- PROCESS LIST -->
|
|
<Grid x:Name="ProcessView" Margin="24,18,24,20" Visibility="Collapsed">
|
|
<Grid.RowDefinitions><RowDefinition Height="Auto"/><RowDefinition Height="*"/></Grid.RowDefinitions>
|
|
<StackPanel Grid.Row="0" Orientation="Horizontal" Margin="0,0,0,14">
|
|
<TextBlock x:Name="TbProcTitle" Text="AI 扫描结果" FontSize="20" FontWeight="SemiBold" Foreground="{StaticResource TextPrimaryBrush}"/>
|
|
<TextBlock x:Name="LblProcCount" Text=" - 0 条结果" FontSize="13" Foreground="{StaticResource TextDimBrush}" VerticalAlignment="Center" Margin="8,0,0,0"/>
|
|
</StackPanel>
|
|
<DataGrid x:Name="DgProcesses" Grid.Row="1" AutoGenerateColumns="False" IsReadOnly="True"
|
|
CanUserAddRows="False" CanUserDeleteRows="False" CanUserSortColumns="True"
|
|
HeadersVisibility="Column" Background="{StaticResource BgCardBrush}"
|
|
BorderBrush="{StaticResource BorderDimBrush}" BorderThickness="1"
|
|
Foreground="{StaticResource TextPrimaryBrush}" GridLinesVisibility="Horizontal"
|
|
HorizontalGridLinesBrush="{StaticResource BorderDimBrush}"
|
|
RowHeight="36" SelectionUnit="FullRow">
|
|
<DataGrid.Resources><Style TargetType="DataGridColumnHeader"><Setter Property="Background" Value="#f1f5f9"/><Setter Property="Foreground" Value="{StaticResource TextSecondaryBrush}"/><Setter Property="FontSize" Value="11"/><Setter Property="FontWeight" Value="SemiBold"/><Setter Property="Padding" Value="10,6"/><Setter Property="BorderBrush" Value="{StaticResource BorderDimBrush}"/><Setter Property="BorderThickness" Value="0,0,0,1"/></Style></DataGrid.Resources>
|
|
<DataGrid.Columns>
|
|
<DataGridTemplateColumn Header="RISK" Width="75">
|
|
<DataGridTemplateColumn.CellTemplate>
|
|
<DataTemplate>
|
|
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
|
|
<Ellipse Width="8" Height="8" Margin="0,0,6,0" Fill="{Binding RiskLevel, Converter={StaticResource RiskColorConv}}"/>
|
|
<TextBlock Text="{Binding RiskLevel, Converter={StaticResource RiskTextConv}}" FontSize="11.5" VerticalAlignment="Center"/>
|
|
</StackPanel>
|
|
</DataTemplate>
|
|
</DataGridTemplateColumn.CellTemplate>
|
|
</DataGridTemplateColumn>
|
|
<DataGridTextColumn Header="PID" Binding="{Binding Pid}" Width="55"/>
|
|
<DataGridTextColumn Header="NAME" Binding="{Binding ProcessName}" Width="130"/>
|
|
<DataGridTextColumn Header="SCORE" Binding="{Binding RiskScore, StringFormat={}{0:F2}}" Width="70"/>
|
|
<DataGridTextColumn Header="INDICATORS" Binding="{Binding Indicators, Converter={StaticResource ListToStringConv}}" Width="200"/>
|
|
<DataGridTextColumn Header="LAYER" Binding="{Binding DetectionLayer}" Width="140"/>
|
|
<DataGridTextColumn Header="PROVIDER" Binding="{Binding AIProvider}" Width="130"/>
|
|
<DataGridTextColumn Header="TIME" Binding="{Binding ScanTime, StringFormat=yyyy-MM-dd HH:mm:ss}" Width="140"/>
|
|
<DataGridTextColumn Header="REASONING" Binding="{Binding Reasoning}" Width="*" MinWidth="200"/>
|
|
</DataGrid.Columns>
|
|
</DataGrid>
|
|
</Grid>
|
|
|
|
<!-- SCAN PROGRESS -->
|
|
<Grid x:Name="ScanView" Margin="24,18,24,20" Visibility="Collapsed">
|
|
<Grid.RowDefinitions><RowDefinition Height="Auto"/><RowDefinition Height="Auto"/><RowDefinition Height="Auto"/><RowDefinition Height="Auto"/><RowDefinition Height="*"/></Grid.RowDefinitions>
|
|
<StackPanel Grid.Row="0" Orientation="Horizontal" Margin="0,0,0,14">
|
|
<TextBlock x:Name="TbScanTitle" Text="AI 扫描进度" FontSize="20" FontWeight="SemiBold" Foreground="{StaticResource TextPrimaryBrush}"/>
|
|
<Border x:Name="ScanStatusBadge" Background="#f0fdf4" CornerRadius="10" Padding="10,3" Margin="14,0,0,0" VerticalAlignment="Center">
|
|
<TextBlock x:Name="LblScanStatus" Text="● 空闲" FontSize="10.5" FontWeight="SemiBold" Foreground="{StaticResource AccentGreenBrush}"/>
|
|
</Border>
|
|
</StackPanel>
|
|
<ProgressBar x:Name="ScanProgressBar" Grid.Row="1" Height="8" Margin="0,0,0,10" Minimum="0" Maximum="100" Value="0" Background="#e2e8f0" Foreground="{StaticResource AccentPurpleBrush}" BorderThickness="0"/>
|
|
<Border Grid.Row="2" Background="{StaticResource BgCardBrush}" BorderBrush="{StaticResource BorderDimBrush}" BorderThickness="1" CornerRadius="8" Padding="14,8" Margin="0,0,0,10">
|
|
<StackPanel Orientation="Horizontal">
|
|
<TextBlock Text="Scanning:" FontSize="12.5" Foreground="{StaticResource TextDimBrush}" VerticalAlignment="Center"/>
|
|
<TextBlock x:Name="LblCurrentProcess" Text="-" FontSize="12.5" FontWeight="SemiBold" Margin="8,0,0,0" Foreground="{StaticResource AccentPurpleBrush}" FontFamily="Consolas, Courier New" VerticalAlignment="Center"/>
|
|
</StackPanel>
|
|
</Border>
|
|
<Button x:Name="BtnStopScan" Grid.Row="3" Content="停止扫描" Style="{StaticResource StopBtn}" Width="130" HorizontalAlignment="Left" Margin="0,0,0,10" Click="BtnStopScan_Click" IsEnabled="False"/>
|
|
<Grid Grid.Row="4">
|
|
<Grid.RowDefinitions><RowDefinition Height="Auto"/><RowDefinition Height="*"/></Grid.RowDefinitions>
|
|
<TextBlock x:Name="TbScanLog" Grid.Row="0" Text="扫描日志" FontSize="14" FontWeight="SemiBold" Foreground="{StaticResource TextPrimaryBrush}" Margin="0,0,0,6"/>
|
|
<Border Grid.Row="1" Background="{StaticResource BgCardBrush}" BorderBrush="{StaticResource BorderDimBrush}" BorderThickness="1" CornerRadius="8">
|
|
<ListBox x:Name="LstScanLog" Background="Transparent" Foreground="{StaticResource TextSecondaryBrush}" BorderThickness="0" Margin="2"
|
|
FontFamily="Consolas, Courier New" FontSize="11.5">
|
|
<ListBox.ItemTemplate><DataTemplate><TextBlock Text="{Binding}" TextWrapping="NoWrap" Padding="4,1"/></DataTemplate></ListBox.ItemTemplate>
|
|
</ListBox>
|
|
</Border>
|
|
</Grid>
|
|
</Grid>
|
|
|
|
<!-- SETTINGS -->
|
|
<Grid x:Name="SettingsView" Margin="24,18,24,20" Visibility="Collapsed">
|
|
<Grid.RowDefinitions><RowDefinition Height="Auto"/><RowDefinition Height="*"/></Grid.RowDefinitions>
|
|
<StackPanel Grid.Row="0" Orientation="Horizontal" Margin="0,0,0,18">
|
|
<TextBlock x:Name="TbSettingsTitle" Text="设置" FontSize="20" FontWeight="SemiBold" Foreground="{StaticResource TextPrimaryBrush}"/>
|
|
</StackPanel>
|
|
<ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled">
|
|
<StackPanel>
|
|
<!-- AI Config -->
|
|
<Border Background="{StaticResource BgCardBrush}" BorderBrush="{StaticResource BorderDimBrush}" BorderThickness="1" CornerRadius="10" Padding="20,16" Margin="0,0,0,14">
|
|
<StackPanel>
|
|
<TextBlock x:Name="TbAiConfig" Text="AI 配置" FontSize="15" FontWeight="SemiBold" Foreground="{StaticResource TextPrimaryBrush}" Margin="0,0,0,14"/>
|
|
<CheckBox x:Name="ChkEnableLocalAI" Content="启用本地AI管线 (基线+分类+规则三级联动)" IsChecked="True" Margin="0,0,0,8" FontSize="12"/>
|
|
<CheckBox x:Name="ChkEnableLLM" Content="启用大模型辅助研判 (需API配置)" IsChecked="False" Margin="0,0,0,14" FontSize="12"/>
|
|
<TextBlock x:Name="TbAiProvider" Text="AI 提供商" FontSize="11.5" Foreground="{StaticResource TextDimBrush}" FontWeight="SemiBold" Margin="0,0,0,5"/>
|
|
<ComboBox x:Name="CmbAIProvider" Height="34" FontSize="13" Margin="0,0,0,12"
|
|
Background="{StaticResource BgInputBrush}" Foreground="{StaticResource TextPrimaryBrush}"
|
|
BorderBrush="{StaticResource BorderDimBrush}" BorderThickness="1">
|
|
<ComboBoxItem Content="启发式规则 (无需 API)" Tag="Heuristic"/>
|
|
<ComboBoxItem Content="OpenAI 兼容 (OpenAI / DeepSeek / 通义等)" Tag="OpenAICompatible"/>
|
|
<ComboBoxItem Content="Claude (Anthropic API)" Tag="Claude"/>
|
|
<ComboBoxItem Content="本地模型 (Ollama / LM Studio 等)" Tag="Local"/>
|
|
</ComboBox>
|
|
<TextBlock x:Name="TbBaseUrl" Text="API 地址" FontSize="11.5" Foreground="{StaticResource TextDimBrush}" FontWeight="SemiBold" Margin="0,0,0,5"/>
|
|
<TextBox x:Name="TxtBaseUrl" Text="" FontSize="13" Height="34" Margin="0,0,0,12"
|
|
Background="{StaticResource BgInputBrush}" Foreground="{StaticResource TextPrimaryBrush}"
|
|
CaretBrush="{StaticResource AccentBlueBrush}" BorderBrush="{StaticResource BorderDimBrush}" BorderThickness="1"
|
|
VerticalContentAlignment="Center" Padding="10,0"/>
|
|
<TextBlock x:Name="TbApiKey" Text="API 密钥" FontSize="11.5" Foreground="{StaticResource TextDimBrush}" FontWeight="SemiBold" Margin="0,0,0,5"/>
|
|
<PasswordBox x:Name="TxtApiKey" FontSize="13" Height="34" Margin="0,0,0,12"
|
|
Background="{StaticResource BgInputBrush}" Foreground="{StaticResource TextPrimaryBrush}"
|
|
CaretBrush="{StaticResource AccentBlueBrush}" BorderBrush="{StaticResource BorderDimBrush}" BorderThickness="1"
|
|
VerticalContentAlignment="Center" Padding="10,0"/>
|
|
<TextBlock x:Name="TbModel" Text="模型名称" FontSize="11.5" Foreground="{StaticResource TextDimBrush}" FontWeight="SemiBold" Margin="0,0,0,5"/>
|
|
<TextBox x:Name="TxtModel" Text="" FontSize="13" Height="34"
|
|
Background="{StaticResource BgInputBrush}" Foreground="{StaticResource TextPrimaryBrush}"
|
|
CaretBrush="{StaticResource AccentBlueBrush}" BorderBrush="{StaticResource BorderDimBrush}" BorderThickness="1"
|
|
VerticalContentAlignment="Center" Padding="10,0"/>
|
|
</StackPanel>
|
|
</Border>
|
|
<!-- Scan Profile -->
|
|
<Border Background="{StaticResource BgCardBrush}" BorderBrush="{StaticResource BorderDimBrush}" BorderThickness="1" CornerRadius="10" Padding="20,16" Margin="0,0,0,14">
|
|
<StackPanel>
|
|
<TextBlock x:Name="TbScanProfile" Text="扫描配置" FontSize="15" FontWeight="SemiBold" Foreground="{StaticResource TextPrimaryBrush}" Margin="0,0,0,14"/>
|
|
<ComboBox x:Name="CmbScanProfile" Height="34" FontSize="13"
|
|
Background="{StaticResource BgInputBrush}" Foreground="{StaticResource TextPrimaryBrush}"
|
|
BorderBrush="{StaticResource BorderDimBrush}" BorderThickness="1">
|
|
<ComboBoxItem Content="快速 - 元数据筛查 (最快, 低开销)" Tag="fast"/>
|
|
<ComboBoxItem Content="平衡 - 采样分析 (推荐)" Tag="balanced"/>
|
|
<ComboBoxItem Content="深度 - 全量内存分析 (最准确)" Tag="deep"/>
|
|
</ComboBox>
|
|
</StackPanel>
|
|
</Border>
|
|
<Button x:Name="BtnSaveSettings" Content="保存设置" Style="{StaticResource PrimaryBtn}"
|
|
Width="160" HorizontalAlignment="Left" Margin="0,2,0,30" Click="BtnSaveSettings_Click"/>
|
|
</StackPanel>
|
|
</ScrollViewer>
|
|
</Grid>
|
|
</Grid>
|
|
</Border>
|
|
</Grid>
|
|
</Grid>
|
|
</Border>
|
|
</Window>
|