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}}" />