diff --git a/XP.ImageProcessing.RoiControl/Controls/PolygonRoiCanvas.xaml.cs b/XP.ImageProcessing.RoiControl/Controls/PolygonRoiCanvas.xaml.cs
index 1ddedc0..d1cd13a 100644
--- a/XP.ImageProcessing.RoiControl/Controls/PolygonRoiCanvas.xaml.cs
+++ b/XP.ImageProcessing.RoiControl/Controls/PolygonRoiCanvas.xaml.cs
@@ -176,6 +176,20 @@ namespace XP.ImageProcessing.RoiControl.Controls
control.UpdateAdorner();
}
+ ///
+ /// 是否允许滚轮缩放(默认允许)。
+ /// 实时图像显示过程中可设为 false 以禁用滚轮缩放。
+ ///
+ public static readonly DependencyProperty IsWheelZoomEnabledProperty =
+ DependencyProperty.Register(nameof(IsWheelZoomEnabled), typeof(bool), typeof(PolygonRoiCanvas),
+ new PropertyMetadata(true));
+
+ public bool IsWheelZoomEnabled
+ {
+ get => (bool)GetValue(IsWheelZoomEnabledProperty);
+ set => SetValue(IsWheelZoomEnabledProperty, value);
+ }
+
public static readonly DependencyProperty PanOffsetXProperty =
DependencyProperty.Register(nameof(PanOffsetX), typeof(double), typeof(PolygonRoiCanvas),
new PropertyMetadata(0.0, OnPanOffsetChanged));
@@ -2209,6 +2223,13 @@ namespace XP.ImageProcessing.RoiControl.Controls
private void Canvas_MouseWheel(object sender, MouseWheelEventArgs e)
{
+ // 实时显示过程中禁用滚轮缩放
+ if (!IsWheelZoomEnabled)
+ {
+ e.Handled = true;
+ return;
+ }
+
double oldZoom = ZoomScale;
double newZoom = e.Delta > 0 ? oldZoom * ZoomStep : oldZoom / ZoomStep;
newZoom = Math.Max(0.1, Math.Min(10.0, newZoom));
diff --git a/XplorePlane/ViewModels/Main/ViewportPanelViewModel.cs b/XplorePlane/ViewModels/Main/ViewportPanelViewModel.cs
index 44ef8da..744e02a 100644
--- a/XplorePlane/ViewModels/Main/ViewportPanelViewModel.cs
+++ b/XplorePlane/ViewModels/Main/ViewportPanelViewModel.cs
@@ -94,10 +94,18 @@ namespace XplorePlane.ViewModels
set
{
if (SetProperty(ref _isRealtimeEnabled, value))
+ {
_mainViewportService.SetRealtimeDisplayEnabled(value);
+ RaisePropertyChanged(nameof(IsWheelZoomEnabled));
+ }
}
}
+ ///
+ /// 是否允许滚轮缩放:实时显示过程中禁用,停止实时后可缩放。
+ ///
+ public bool IsWheelZoomEnabled => !_isRealtimeEnabled;
+
// Task 5.3: IsDetectorConnected property (read-only, private setter)
public bool IsDetectorConnected
{
@@ -227,6 +235,7 @@ namespace XplorePlane.ViewModels
// Task 5.8: Sync IsRealtimeEnabled from service
_isRealtimeEnabled = _mainViewportService.IsRealtimeDisplayEnabled;
RaisePropertyChanged(nameof(IsRealtimeEnabled));
+ RaisePropertyChanged(nameof(IsWheelZoomEnabled));
// Task 5.8: Sync _isCncRunning from service and raise IsAnimatedSwitchEnabled
_isCncRunning = _mainViewportService.IsCncRunning;
diff --git a/XplorePlane/Views/Main/ViewportPanelView.xaml b/XplorePlane/Views/Main/ViewportPanelView.xaml
index 95ca774..dea579a 100644
--- a/XplorePlane/Views/Main/ViewportPanelView.xaml
+++ b/XplorePlane/Views/Main/ViewportPanelView.xaml
@@ -35,6 +35,7 @@
x:Name="RoiCanvas"
Background="White"
ImageSource="{Binding ImageSource}"
+ IsWheelZoomEnabled="{Binding IsWheelZoomEnabled}"
ScaleBarMmPerPixel="0.139"
ShowScaleBar="{Binding DataContext.IsScaleBarVisible, RelativeSource={RelativeSource AncestorType=Window}}" />