102 lines
5.7 KiB
XML
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> |