Files
XplorePlane/XP.ImageProcessing.RoiControl/Controls/PolygonRoiCanvas.xaml
T
2026-04-13 14:36:18 +08:00

102 lines
5.7 KiB
XML

<UserControl x:Class="XP.ImageProcessing.RoiControl.Controls.PolygonRoiCanvas"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:XP.ImageProcessing.RoiControl.Controls"
xmlns:models="clr-namespace:XP.ImageProcessing.RoiControl.Models"
xmlns:converters="clr-namespace:XP.ImageProcessing.RoiControl.Converters"
xmlns:behaviors="clr-namespace:XP.ImageProcessing.RoiControl"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"
x:Name="root"
Background="White">
<UserControl.Resources>
<behaviors:PointListToPointCollectionConverter x:Key="PointListToPointCollectionConverter" />
<converters:ROITypeToVisibilityConverter x:Key="ROITypeToVisibilityConverter" />
</UserControl.Resources>
<Border BorderBrush="Transparent" BorderThickness="1" ClipToBounds="True">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<!-- 左侧控制按钮 -->
<Border Grid.Column="0" Background="White" Padding="5">
<StackPanel Orientation="Vertical" VerticalAlignment="Top">
<Button x:Name="btnZoomIn" Content="+" Background="White" BorderBrush="LightGray" Width="40" Height="40" Margin="2" Click="BtnZoomIn_Click" />
<Button x:Name="btnZoomOut" Content="-" Background="White" BorderBrush="LightGray" Width="40" Height="40" Margin="2" Click="BtnZoomOut_Click" />
<Button x:Name="btnReset" Content="适应" Background="White" BorderBrush="LightGray" Width="40" Height="40" Margin="2" Click="BtnReset_Click" />
</StackPanel>
</Border>
<!-- 图像显示区域 -->
<Grid Grid.Column="1" x:Name="imageDisplayGrid" ClipToBounds="True">
<Grid x:Name="transformGrid"
RenderTransformOrigin="0,0"
HorizontalAlignment="Center"
VerticalAlignment="Center">
<Grid.RenderTransform>
<TransformGroup>
<ScaleTransform x:Name="scaleTransform"
ScaleX="{Binding ZoomScale, ElementName=root}"
ScaleY="{Binding ZoomScale, ElementName=root}" />
<TranslateTransform x:Name="translateTransform"
X="{Binding PanOffsetX, ElementName=root}"
Y="{Binding PanOffsetY, ElementName=root}" />
</TransformGroup>
</Grid.RenderTransform>
<Canvas x:Name="mainCanvas"
Width="{Binding CanvasWidth, ElementName=root}"
Height="{Binding CanvasHeight, ElementName=root}"
Background="Transparent"
MouseWheel="Canvas_MouseWheel"
MouseLeftButtonDown="Canvas_MouseLeftButtonDown"
MouseLeftButtonUp="Canvas_MouseLeftButtonUp"
MouseMove="Canvas_MouseMove"
MouseRightButtonDown="Canvas_MouseRightButtonDown">
<!-- 背景图像 -->
<Image x:Name="backgroundImage"
Source="{Binding ImageSource, ElementName=root}"
Width="{Binding CanvasWidth, ElementName=root}"
Height="{Binding CanvasHeight, ElementName=root}"
Stretch="Fill" />
<!-- ROI显示 - 只支持多边形 -->
<ItemsControl ItemsSource="{Binding ROIItems, ElementName=root}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<!-- 多边形ROI -->
<Polygon x:Name="polygonShape"
behaviors:PolygonPointsBehavior.PointsSource="{Binding Points}"
Stroke="{Binding Color}"
StrokeThickness="1"
Fill="Transparent"
MouseLeftButtonDown="ROI_MouseLeftButtonDown" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Canvas>
</Grid>
<!-- 缩放比例显示 -->
<TextBlock Text="{Binding ZoomScale, ElementName=root, StringFormat=Zoom Scale: {0:P0}}"
HorizontalAlignment="Right"
VerticalAlignment="Bottom"
Margin="10"
Padding="5"
Background="#AA000000"
Foreground="White"
FontSize="10" />
</Grid>
</Grid>
</Border>
</UserControl>