BGA检测面板: 修复无检测结果时叠加层未清除、结果图不透明、窗口尺寸调整
This commit is contained in:
@@ -221,17 +221,18 @@ namespace XplorePlane.ViewModels.ImageProcessing
|
|||||||
|
|
||||||
private void ShowResultOnOverlay(BitmapSource resultBmp)
|
private void ShowResultOnOverlay(BitmapSource resultBmp)
|
||||||
{
|
{
|
||||||
if (_canvas == null || resultBmp == null) return;
|
if (_canvas == null) return;
|
||||||
|
|
||||||
// 移除旧的结果图层
|
// 移除旧的结果图层
|
||||||
RemoveResultOverlay();
|
RemoveResultOverlay();
|
||||||
|
|
||||||
|
if (resultBmp == null) return;
|
||||||
|
|
||||||
// 创建新的结果图层叠加到 canvas 上(插入到背景图之后、ROI之前)
|
// 创建新的结果图层叠加到 canvas 上(插入到背景图之后、ROI之前)
|
||||||
_resultOverlayImage = new System.Windows.Controls.Image
|
_resultOverlayImage = new System.Windows.Controls.Image
|
||||||
{
|
{
|
||||||
Source = resultBmp,
|
Source = resultBmp,
|
||||||
IsHitTestVisible = false,
|
IsHitTestVisible = false,
|
||||||
Opacity = 0.85,
|
|
||||||
Stretch = System.Windows.Media.Stretch.Fill
|
Stretch = System.Windows.Media.Stretch.Fill
|
||||||
};
|
};
|
||||||
_resultOverlayImage.SetBinding(System.Windows.FrameworkElement.WidthProperty,
|
_resultOverlayImage.SetBinding(System.Windows.FrameworkElement.WidthProperty,
|
||||||
|
|||||||
@@ -2,174 +2,211 @@
|
|||||||
x:Class="XplorePlane.Views.ImageProcessing.BgaDetectionPanel"
|
x:Class="XplorePlane.Views.ImageProcessing.BgaDetectionPanel"
|
||||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
Title="BGA检测" Width="720" Height="520"
|
Title="BGA检测" Width="840" Height="700"
|
||||||
ResizeMode="CanResize" WindowStartupLocation="CenterOwner"
|
ResizeMode="CanResize" WindowStartupLocation="CenterOwner"
|
||||||
Topmost="True" ShowInTaskbar="False">
|
Topmost="True" ShowInTaskbar="False"
|
||||||
<Grid>
|
Background="#F5F5F5" FontFamily="Microsoft YaHei UI">
|
||||||
<Grid.ColumnDefinitions>
|
<Window.Resources>
|
||||||
<ColumnDefinition Width="280" />
|
<!-- 统一按钮样式 -->
|
||||||
<ColumnDefinition Width="*" />
|
<Style x:Key="IconBtnStyle" TargetType="ButtonBase">
|
||||||
</Grid.ColumnDefinitions>
|
<Setter Property="Cursor" Value="Hand" />
|
||||||
|
|
||||||
<!-- 左侧:参数面板 -->
|
|
||||||
<ScrollViewer Grid.Column="0" VerticalScrollBarVisibility="Auto">
|
|
||||||
<StackPanel Margin="10">
|
|
||||||
<WrapPanel Margin="0,0,0,6">
|
|
||||||
<ToggleButton IsChecked="{Binding RoiEnabled}" Padding="8,4" Margin="0,0,6,0" Cursor="Hand" ToolTip="启用ROI区域">
|
|
||||||
<ToggleButton.Style>
|
|
||||||
<Style TargetType="ToggleButton">
|
|
||||||
<Setter Property="Template">
|
<Setter Property="Template">
|
||||||
<Setter.Value>
|
<Setter.Value>
|
||||||
<ControlTemplate TargetType="ToggleButton">
|
<ControlTemplate TargetType="ButtonBase">
|
||||||
<Border x:Name="Bd" Background="#EEEEEE" BorderBrush="#CCCCCC"
|
<Border x:Name="Bd" Background="#FFFFFF" BorderBrush="#E0E0E0"
|
||||||
BorderThickness="1" CornerRadius="3" Padding="10,4">
|
BorderThickness="1" CornerRadius="6" Padding="8,6">
|
||||||
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
|
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
|
||||||
</Border>
|
</Border>
|
||||||
<ControlTemplate.Triggers>
|
<ControlTemplate.Triggers>
|
||||||
<Trigger Property="IsChecked" Value="True">
|
|
||||||
<Setter TargetName="Bd" Property="Background" Value="#0078D7" />
|
|
||||||
<Setter TargetName="Bd" Property="BorderBrush" Value="#005A9E" />
|
|
||||||
</Trigger>
|
|
||||||
<Trigger Property="IsMouseOver" Value="True">
|
<Trigger Property="IsMouseOver" Value="True">
|
||||||
<Setter TargetName="Bd" Property="Background" Value="#DDDDDD" />
|
<Setter TargetName="Bd" Property="Background" Value="#EAF2FB" />
|
||||||
|
<Setter TargetName="Bd" Property="BorderBrush" Value="#B0D4F1" />
|
||||||
</Trigger>
|
</Trigger>
|
||||||
<MultiTrigger>
|
<DataTrigger Binding="{Binding IsChecked, RelativeSource={RelativeSource Self}}" Value="True">
|
||||||
<MultiTrigger.Conditions>
|
<Setter TargetName="Bd" Property="Background" Value="#005FB8" />
|
||||||
<Condition Property="IsMouseOver" Value="True" />
|
<Setter TargetName="Bd" Property="BorderBrush" Value="#004C99" />
|
||||||
<Condition Property="IsChecked" Value="True" />
|
</DataTrigger>
|
||||||
</MultiTrigger.Conditions>
|
|
||||||
<Setter TargetName="Bd" Property="Background" Value="#006CBE" />
|
|
||||||
</MultiTrigger>
|
|
||||||
</ControlTemplate.Triggers>
|
</ControlTemplate.Triggers>
|
||||||
</ControlTemplate>
|
</ControlTemplate>
|
||||||
</Setter.Value>
|
</Setter.Value>
|
||||||
</Setter>
|
</Setter>
|
||||||
</Style>
|
</Style>
|
||||||
</ToggleButton.Style>
|
<!-- 卡片样式 -->
|
||||||
|
<Style x:Key="CardStyle" TargetType="Border">
|
||||||
|
<Setter Property="Background" Value="White" />
|
||||||
|
<Setter Property="BorderBrush" Value="#E8E8E8" />
|
||||||
|
<Setter Property="BorderThickness" Value="1" />
|
||||||
|
<Setter Property="CornerRadius" Value="8" />
|
||||||
|
<Setter Property="Padding" Value="12,10" />
|
||||||
|
<Setter Property="Margin" Value="0,0,0,8" />
|
||||||
|
</Style>
|
||||||
|
<!-- TextBox 样式 -->
|
||||||
|
<Style TargetType="TextBox">
|
||||||
|
<Setter Property="BorderBrush" Value="#D0D0D0" />
|
||||||
|
<Setter Property="BorderThickness" Value="1" />
|
||||||
|
<Setter Property="Padding" Value="4,3" />
|
||||||
|
<Setter Property="FontSize" Value="11.5" />
|
||||||
|
<Style.Resources>
|
||||||
|
<Style TargetType="Border">
|
||||||
|
<Setter Property="CornerRadius" Value="4" />
|
||||||
|
</Style>
|
||||||
|
</Style.Resources>
|
||||||
|
</Style>
|
||||||
|
<!-- 参数标签 -->
|
||||||
|
<Style x:Key="ParamLabel" TargetType="TextBlock">
|
||||||
|
<Setter Property="FontSize" Value="11" />
|
||||||
|
<Setter Property="Foreground" Value="#555" />
|
||||||
|
<Setter Property="Margin" Value="0,0,0,3" />
|
||||||
|
</Style>
|
||||||
|
</Window.Resources>
|
||||||
|
<Grid Margin="8">
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="285" />
|
||||||
|
<ColumnDefinition Width="*" />
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
|
||||||
|
<!-- 左侧:参数面板 -->
|
||||||
|
<ScrollViewer Grid.Column="0" VerticalScrollBarVisibility="Auto" Margin="0,0,8,0">
|
||||||
|
<StackPanel>
|
||||||
|
<!-- 工具栏 -->
|
||||||
|
<StackPanel Orientation="Horizontal" Margin="0,0,0,10">
|
||||||
|
<ToggleButton IsChecked="{Binding RoiEnabled}" Style="{StaticResource IconBtnStyle}" ToolTip="启用ROI区域" Margin="0,0,6,0">
|
||||||
<Image Source="/Assets/Icons/polygon.png" Width="20" Height="20" />
|
<Image Source="/Assets/Icons/polygon.png" Width="20" Height="20" />
|
||||||
</ToggleButton>
|
</ToggleButton>
|
||||||
<Button Padding="8,4" Margin="0,0,6,0" Command="{Binding ExecuteCommand}" ToolTip="执行检测" Cursor="Hand">
|
<Button Style="{StaticResource IconBtnStyle}" Command="{Binding ExecuteCommand}" ToolTip="执行检测" Margin="0,0,6,0">
|
||||||
<Button.Template>
|
|
||||||
<ControlTemplate TargetType="Button">
|
|
||||||
<Border x:Name="Bd" Background="#EEEEEE" BorderBrush="#CCCCCC"
|
|
||||||
BorderThickness="1" CornerRadius="3" Padding="10,4">
|
|
||||||
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
|
|
||||||
</Border>
|
|
||||||
<ControlTemplate.Triggers>
|
|
||||||
<Trigger Property="IsMouseOver" Value="True">
|
|
||||||
<Setter TargetName="Bd" Property="Background" Value="#DDDDDD" />
|
|
||||||
</Trigger>
|
|
||||||
<Trigger Property="IsPressed" Value="True">
|
|
||||||
<Setter TargetName="Bd" Property="Background" Value="#0078D7" />
|
|
||||||
<Setter TargetName="Bd" Property="BorderBrush" Value="#005A9E" />
|
|
||||||
</Trigger>
|
|
||||||
</ControlTemplate.Triggers>
|
|
||||||
</ControlTemplate>
|
|
||||||
</Button.Template>
|
|
||||||
<Image Source="/Assets/Icons/run32.png" Width="20" Height="20" />
|
<Image Source="/Assets/Icons/run32.png" Width="20" Height="20" />
|
||||||
</Button>
|
</Button>
|
||||||
<Button Padding="8,4" Click="Close_Click" ToolTip="关闭" Cursor="Hand">
|
<Button Style="{StaticResource IconBtnStyle}" Click="Close_Click" ToolTip="关闭">
|
||||||
<Button.Template>
|
|
||||||
<ControlTemplate TargetType="Button">
|
|
||||||
<Border x:Name="Bd" Background="#EEEEEE" BorderBrush="#CCCCCC"
|
|
||||||
BorderThickness="1" CornerRadius="3" Padding="10,4">
|
|
||||||
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
|
|
||||||
</Border>
|
|
||||||
<ControlTemplate.Triggers>
|
|
||||||
<Trigger Property="IsMouseOver" Value="True">
|
|
||||||
<Setter TargetName="Bd" Property="Background" Value="#DDDDDD" />
|
|
||||||
</Trigger>
|
|
||||||
<Trigger Property="IsPressed" Value="True">
|
|
||||||
<Setter TargetName="Bd" Property="Background" Value="#0078D7" />
|
|
||||||
<Setter TargetName="Bd" Property="BorderBrush" Value="#005A9E" />
|
|
||||||
</Trigger>
|
|
||||||
</ControlTemplate.Triggers>
|
|
||||||
</ControlTemplate>
|
|
||||||
</Button.Template>
|
|
||||||
<Image Source="/Assets/Icons/ok.png" Width="20" Height="20" />
|
<Image Source="/Assets/Icons/ok.png" Width="20" Height="20" />
|
||||||
</Button>
|
</Button>
|
||||||
</WrapPanel>
|
</StackPanel>
|
||||||
<TextBlock Text="BGA定位参数" FontWeight="SemiBold" Margin="0,0,0,6" />
|
|
||||||
<TextBlock Text="焊球最小面积" FontSize="11" Margin="0,0,0,2" />
|
<!-- BGA定位参数卡片 -->
|
||||||
|
<Border Style="{StaticResource CardStyle}">
|
||||||
|
<StackPanel>
|
||||||
|
<TextBlock Text="BGA定位参数" FontWeight="SemiBold" FontSize="12" Margin="0,0,0,8" />
|
||||||
|
<TextBlock Text="焊球最小面积" Style="{StaticResource ParamLabel}" />
|
||||||
<DockPanel Margin="0,0,0,6">
|
<DockPanel Margin="0,0,0,6">
|
||||||
<TextBox DockPanel.Dock="Right" Width="60" Text="{Binding BgaMinArea, UpdateSourceTrigger=PropertyChanged}" VerticalContentAlignment="Center" Margin="6,0,0,0" />
|
<TextBox DockPanel.Dock="Right" Width="55" Text="{Binding BgaMinArea, UpdateSourceTrigger=PropertyChanged}" VerticalContentAlignment="Center" Margin="6,0,0,0" />
|
||||||
<Slider Minimum="10" Maximum="100000" Value="{Binding BgaMinArea}" VerticalAlignment="Center" />
|
<Slider Minimum="10" Maximum="100000" Value="{Binding BgaMinArea}" VerticalAlignment="Center" />
|
||||||
</DockPanel>
|
</DockPanel>
|
||||||
<TextBlock Text="焊球最大面积" FontSize="11" Margin="0,0,0,2" />
|
<TextBlock Text="焊球最大面积" Style="{StaticResource ParamLabel}" />
|
||||||
<DockPanel Margin="0,0,0,6">
|
<DockPanel Margin="0,0,0,6">
|
||||||
<TextBox DockPanel.Dock="Right" Width="60" Text="{Binding BgaMaxArea, UpdateSourceTrigger=PropertyChanged}" VerticalContentAlignment="Center" Margin="6,0,0,0" />
|
<TextBox DockPanel.Dock="Right" Width="55" Text="{Binding BgaMaxArea, UpdateSourceTrigger=PropertyChanged}" VerticalContentAlignment="Center" Margin="6,0,0,0" />
|
||||||
<Slider Minimum="100" Maximum="10000000" Value="{Binding BgaMaxArea}" VerticalAlignment="Center" />
|
<Slider Minimum="100" Maximum="10000000" Value="{Binding BgaMaxArea}" VerticalAlignment="Center" />
|
||||||
</DockPanel>
|
</DockPanel>
|
||||||
<TextBlock Text="模糊核大小" FontSize="11" Margin="0,0,0,2" />
|
<TextBlock Text="模糊核大小" Style="{StaticResource ParamLabel}" />
|
||||||
<DockPanel Margin="0,0,0,6">
|
<DockPanel Margin="0,0,0,6">
|
||||||
<TextBox DockPanel.Dock="Right" Width="60" Text="{Binding BlurSize, UpdateSourceTrigger=PropertyChanged}" VerticalContentAlignment="Center" Margin="6,0,0,0" />
|
<TextBox DockPanel.Dock="Right" Width="55" Text="{Binding BlurSize, UpdateSourceTrigger=PropertyChanged}" VerticalContentAlignment="Center" Margin="6,0,0,0" />
|
||||||
<Slider Minimum="1" Maximum="31" Value="{Binding BlurSize}" VerticalAlignment="Center" />
|
<Slider Minimum="1" Maximum="31" Value="{Binding BlurSize}" VerticalAlignment="Center" />
|
||||||
</DockPanel>
|
</DockPanel>
|
||||||
<TextBlock Text="圆度阈值" FontSize="11" Margin="0,0,0,2" />
|
<TextBlock Text="圆度阈值" Style="{StaticResource ParamLabel}" />
|
||||||
<DockPanel Margin="0,0,0,6">
|
<DockPanel>
|
||||||
<TextBox DockPanel.Dock="Right" Width="60" Text="{Binding Circularity, StringFormat=F2, UpdateSourceTrigger=PropertyChanged}" VerticalContentAlignment="Center" Margin="6,0,0,0" />
|
<TextBox DockPanel.Dock="Right" Width="55" Text="{Binding Circularity, StringFormat=F2, UpdateSourceTrigger=PropertyChanged}" VerticalContentAlignment="Center" Margin="6,0,0,0" />
|
||||||
<Slider Minimum="0" Maximum="1" Value="{Binding Circularity}" SmallChange="0.01" LargeChange="0.1" VerticalAlignment="Center" />
|
<Slider Minimum="0" Maximum="1" Value="{Binding Circularity}" SmallChange="0.01" LargeChange="0.1" VerticalAlignment="Center" />
|
||||||
</DockPanel>
|
</DockPanel>
|
||||||
<Separator Margin="0,4" />
|
</StackPanel>
|
||||||
<TextBlock Text="气泡检测参数" FontWeight="SemiBold" Margin="0,4,0,6" />
|
</Border>
|
||||||
<TextBlock Text="最小灰度阈值" FontSize="11" Margin="0,0,0,2" />
|
|
||||||
|
<!-- 气泡检测参数卡片 -->
|
||||||
|
<Border Style="{StaticResource CardStyle}">
|
||||||
|
<StackPanel>
|
||||||
|
<TextBlock Text="气泡检测参数" FontWeight="SemiBold" FontSize="12" Margin="0,0,0,8" />
|
||||||
|
<TextBlock Text="最小灰度阈值" Style="{StaticResource ParamLabel}" />
|
||||||
<DockPanel Margin="0,0,0,6">
|
<DockPanel Margin="0,0,0,6">
|
||||||
<TextBox DockPanel.Dock="Right" Width="60" Text="{Binding MinThreshold, UpdateSourceTrigger=PropertyChanged}" VerticalContentAlignment="Center" Margin="6,0,0,0" />
|
<TextBox DockPanel.Dock="Right" Width="55" Text="{Binding MinThreshold, UpdateSourceTrigger=PropertyChanged}" VerticalContentAlignment="Center" Margin="6,0,0,0" />
|
||||||
<Slider Minimum="0" Maximum="255" Value="{Binding MinThreshold}" VerticalAlignment="Center" />
|
<Slider Minimum="0" Maximum="255" Value="{Binding MinThreshold}" VerticalAlignment="Center" />
|
||||||
</DockPanel>
|
</DockPanel>
|
||||||
<TextBlock Text="最大灰度阈值" FontSize="11" Margin="0,0,0,2" />
|
<TextBlock Text="最大灰度阈值" Style="{StaticResource ParamLabel}" />
|
||||||
<DockPanel Margin="0,0,0,6">
|
<DockPanel Margin="0,0,0,6">
|
||||||
<TextBox DockPanel.Dock="Right" Width="60" Text="{Binding MaxThreshold, UpdateSourceTrigger=PropertyChanged}" VerticalContentAlignment="Center" Margin="6,0,0,0" />
|
<TextBox DockPanel.Dock="Right" Width="55" Text="{Binding MaxThreshold, UpdateSourceTrigger=PropertyChanged}" VerticalContentAlignment="Center" Margin="6,0,0,0" />
|
||||||
<Slider Minimum="0" Maximum="255" Value="{Binding MaxThreshold}" VerticalAlignment="Center" />
|
<Slider Minimum="0" Maximum="255" Value="{Binding MaxThreshold}" VerticalAlignment="Center" />
|
||||||
</DockPanel>
|
</DockPanel>
|
||||||
<TextBlock Text="最小气泡面积" FontSize="11" Margin="0,0,0,2" />
|
<TextBlock Text="最小气泡面积" Style="{StaticResource ParamLabel}" />
|
||||||
<DockPanel Margin="0,0,0,6">
|
<DockPanel Margin="0,0,0,6">
|
||||||
<TextBox DockPanel.Dock="Right" Width="60" Text="{Binding MinVoidArea, UpdateSourceTrigger=PropertyChanged}" VerticalContentAlignment="Center" Margin="6,0,0,0" />
|
<TextBox DockPanel.Dock="Right" Width="55" Text="{Binding MinVoidArea, UpdateSourceTrigger=PropertyChanged}" VerticalContentAlignment="Center" Margin="6,0,0,0" />
|
||||||
<Slider Minimum="1" Maximum="10000" Value="{Binding MinVoidArea}" VerticalAlignment="Center" />
|
<Slider Minimum="1" Maximum="10000" Value="{Binding MinVoidArea}" VerticalAlignment="Center" />
|
||||||
</DockPanel>
|
</DockPanel>
|
||||||
<TextBlock Text="VoidLimit(%)" FontSize="11" Margin="0,0,0,2" />
|
<TextBlock Text="VoidLimit(%)" Style="{StaticResource ParamLabel}" />
|
||||||
<DockPanel Margin="0,0,0,6">
|
<DockPanel Margin="0,0,0,6">
|
||||||
<TextBox DockPanel.Dock="Right" Width="60" Text="{Binding VoidLimit, StringFormat=F1, UpdateSourceTrigger=PropertyChanged}" VerticalContentAlignment="Center" Margin="6,0,0,0" />
|
<TextBox DockPanel.Dock="Right" Width="55" Text="{Binding VoidLimit, StringFormat=F1, UpdateSourceTrigger=PropertyChanged}" VerticalContentAlignment="Center" Margin="6,0,0,0" />
|
||||||
<Slider Minimum="0" Maximum="100" Value="{Binding VoidLimit}" VerticalAlignment="Center" />
|
<Slider Minimum="0" Maximum="100" Value="{Binding VoidLimit}" VerticalAlignment="Center" />
|
||||||
</DockPanel>
|
</DockPanel>
|
||||||
<TextBlock Text="最大单气泡限值(%)" FontSize="11" Margin="0,0,0,2" />
|
<TextBlock Text="最大单气泡限值(%)" Style="{StaticResource ParamLabel}" />
|
||||||
<DockPanel Margin="0,0,0,6">
|
<DockPanel>
|
||||||
<TextBox DockPanel.Dock="Right" Width="60" Text="{Binding MaxSingleVoidLimit, StringFormat=F1, UpdateSourceTrigger=PropertyChanged}" VerticalContentAlignment="Center" Margin="6,0,0,0" />
|
<TextBox DockPanel.Dock="Right" Width="55" Text="{Binding MaxSingleVoidLimit, StringFormat=F1, UpdateSourceTrigger=PropertyChanged}" VerticalContentAlignment="Center" Margin="6,0,0,0" />
|
||||||
<Slider Minimum="0" Maximum="100" Value="{Binding MaxSingleVoidLimit}" VerticalAlignment="Center" />
|
<Slider Minimum="0" Maximum="100" Value="{Binding MaxSingleVoidLimit}" VerticalAlignment="Center" />
|
||||||
</DockPanel>
|
</DockPanel>
|
||||||
<Separator Margin="0,4" />
|
</StackPanel>
|
||||||
<TextBlock Text="{Binding ResultText}" FontSize="14" FontWeight="SemiBold" Margin="0,4,0,8" />
|
</Border>
|
||||||
|
|
||||||
|
<!-- 结果摘要 -->
|
||||||
|
<Border Style="{StaticResource CardStyle}">
|
||||||
|
<TextBlock Text="{Binding ResultText}" FontSize="13" FontWeight="SemiBold" Foreground="#333" />
|
||||||
|
</Border>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</ScrollViewer>
|
</ScrollViewer>
|
||||||
|
|
||||||
<!-- 右侧:结果表格 -->
|
<!-- 右侧:结果表格 -->
|
||||||
<GroupBox Grid.Column="1" Header="检测结果" Margin="4">
|
<Border Grid.Column="1" Background="White" BorderBrush="#E8E8E8" BorderThickness="1" CornerRadius="8" Padding="0">
|
||||||
<DataGrid ItemsSource="{Binding Results}"
|
<Grid>
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition Height="Auto" />
|
||||||
|
<RowDefinition Height="*" />
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<TextBlock Grid.Row="0" Text="检测结果" FontWeight="SemiBold" FontSize="12" Margin="12,10,0,6" Foreground="#333" />
|
||||||
|
<DataGrid Grid.Row="1" ItemsSource="{Binding Results}"
|
||||||
AutoGenerateColumns="False" IsReadOnly="True"
|
AutoGenerateColumns="False" IsReadOnly="True"
|
||||||
HeadersVisibility="Column" GridLinesVisibility="Horizontal"
|
HeadersVisibility="Column" GridLinesVisibility="None"
|
||||||
BorderThickness="0" Background="White"
|
BorderThickness="0" Background="White"
|
||||||
|
RowHeight="30" FontSize="11.5"
|
||||||
VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto">
|
VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto">
|
||||||
|
<DataGrid.ColumnHeaderStyle>
|
||||||
|
<Style TargetType="DataGridColumnHeader">
|
||||||
|
<Setter Property="Background" Value="#F8F9FA" />
|
||||||
|
<Setter Property="Foreground" Value="#666" />
|
||||||
|
<Setter Property="FontSize" Value="11" />
|
||||||
|
<Setter Property="Padding" Value="8,6" />
|
||||||
|
<Setter Property="BorderBrush" Value="#EEE" />
|
||||||
|
<Setter Property="BorderThickness" Value="0,0,0,1" />
|
||||||
|
</Style>
|
||||||
|
</DataGrid.ColumnHeaderStyle>
|
||||||
|
<DataGrid.CellStyle>
|
||||||
|
<Style TargetType="DataGridCell">
|
||||||
|
<Setter Property="Padding" Value="8,4" />
|
||||||
|
<Setter Property="BorderThickness" Value="0" />
|
||||||
|
<Setter Property="VerticalAlignment" Value="Center" />
|
||||||
|
</Style>
|
||||||
|
</DataGrid.CellStyle>
|
||||||
<DataGrid.RowStyle>
|
<DataGrid.RowStyle>
|
||||||
<Style TargetType="DataGridRow">
|
<Style TargetType="DataGridRow">
|
||||||
|
<Setter Property="Background" Value="White" />
|
||||||
<Style.Triggers>
|
<Style.Triggers>
|
||||||
|
<Trigger Property="AlternationIndex" Value="1">
|
||||||
|
<Setter Property="Background" Value="#FAFBFC" />
|
||||||
|
</Trigger>
|
||||||
<DataTrigger Binding="{Binding Classification}" Value="FAIL">
|
<DataTrigger Binding="{Binding Classification}" Value="FAIL">
|
||||||
<Setter Property="Background" Value="#FFDDDD" />
|
<Setter Property="Background" Value="#FFF0F0" />
|
||||||
</DataTrigger>
|
</DataTrigger>
|
||||||
|
<Trigger Property="IsMouseOver" Value="True">
|
||||||
|
<Setter Property="Background" Value="#EDF4FC" />
|
||||||
|
</Trigger>
|
||||||
</Style.Triggers>
|
</Style.Triggers>
|
||||||
</Style>
|
</Style>
|
||||||
</DataGrid.RowStyle>
|
</DataGrid.RowStyle>
|
||||||
<DataGrid.Columns>
|
<DataGrid.Columns>
|
||||||
<DataGridTextColumn Header="#" Binding="{Binding Index}" Width="30" />
|
<DataGridTextColumn Header="#" Binding="{Binding Index}" Width="32" />
|
||||||
<DataGridTextColumn Header="判定" Binding="{Binding Classification}" Width="50" />
|
<DataGridTextColumn Header="判定" Binding="{Binding Classification}" Width="50" />
|
||||||
<DataGridTextColumn Header="中心X" Binding="{Binding CenterX}" Width="65" />
|
<DataGridTextColumn Header="中心X" Binding="{Binding CenterX}" Width="60" />
|
||||||
<DataGridTextColumn Header="中心Y" Binding="{Binding CenterY}" Width="65" />
|
<DataGridTextColumn Header="中心Y" Binding="{Binding CenterY}" Width="60" />
|
||||||
<DataGridTextColumn Header="焊球面积" Binding="{Binding BgaArea}" Width="70" />
|
<DataGridTextColumn Header="焊球面积" Binding="{Binding BgaArea}" Width="68" />
|
||||||
<DataGridTextColumn Header="空隙率" Binding="{Binding VoidRate}" Width="65" />
|
<DataGridTextColumn Header="空隙率" Binding="{Binding VoidRate}" Width="60" />
|
||||||
<DataGridTextColumn Header="最大气泡" Binding="{Binding MaxVoidRate}" Width="65" />
|
<DataGridTextColumn Header="最大气泡" Binding="{Binding MaxVoidRate}" Width="65" />
|
||||||
<DataGridTextColumn Header="气泡数" Binding="{Binding VoidCount}" Width="55" />
|
<DataGridTextColumn Header="气泡数" Binding="{Binding VoidCount}" Width="52" />
|
||||||
<DataGridTextColumn Header="圆度" Binding="{Binding Circularity}" Width="55" />
|
<DataGridTextColumn Header="圆度" Binding="{Binding Circularity}" Width="52" />
|
||||||
</DataGrid.Columns>
|
</DataGrid.Columns>
|
||||||
</DataGrid>
|
</DataGrid>
|
||||||
</GroupBox>
|
</Grid>
|
||||||
|
</Border>
|
||||||
</Grid>
|
</Grid>
|
||||||
</Window>
|
</Window>
|
||||||
|
|||||||
Reference in New Issue
Block a user