using System; using System.Windows; using System.Windows.Controls; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using XHandler.Class; namespace XHandler.View.BacteriaPickResult { /// /// 挑菌结果图片预览页面 /// public partial class ImagePreview : UserControl { public event EventHandler closeEvent; private bool _startMove; // private int i; private Point start; public ImagePreview(string imgPath) { InitializeComponent(); Img.Source = BitmapFrame.Create(new Uri(imgPath), BitmapCreateOptions.None, BitmapCacheOption.OnLoad); } private void UserControl_Loaded(object sender, RoutedEventArgs e) { double zoom = Math.Min(Sv.ViewportWidth / Img.Source.Width, Sv.ViewportHeight / Img.Source.Height); Matrix matrix = new Matrix(); matrix.M11 = zoom; matrix.M22 = zoom; matrix.OffsetX = (Sv.ViewportWidth - Sv.ViewportHeight) / 2; ((MatrixTransform)viewBox.RenderTransform).Matrix = matrix; } private void Button_Click(object sender, RoutedEventArgs e) { if (EventResponseController.Instance.CanExecute() == false) return; closeEvent?.Invoke(this, EventArgs.Empty); } private void ChangSize(bool big, FrameworkElement ctrl, double centerX, double centerY) { var m = ((MatrixTransform)ctrl.RenderTransform).Matrix; if (big) { m.ScaleAtPrepend(1.1, 1.1, centerX, centerY); } else { m.ScaleAtPrepend(1 / 1.1, 1 / 1.1, centerX, centerY); } ctrl.RenderTransform = new MatrixTransform(m); } private void Box_OnMouseWheel(object sender, MouseWheelEventArgs e) { var centerPt = e.GetPosition(viewBox); ChangSize(e.Delta > 0, viewBox, centerPt.X, centerPt.Y); } private void Box_OnPreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) { if (viewBox.IsMouseCaptured) return; viewBox.CaptureMouse(); start = e.MouseDevice.GetPosition(Sv); e.Handled = true; _startMove = true; } private void Box_OnPreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e) { viewBox.ReleaseMouseCapture(); _startMove = false; } private void Box_OnPreviewMouseMove(object sender, MouseEventArgs e) { if (!viewBox.IsMouseCaptured || !_startMove) return; var point = e.MouseDevice.GetPosition(Sv); var m = viewBox.RenderTransform.Value; //计算x偏移量 m.OffsetX = m.OffsetX + point.X - start.X; //计算y偏移量 m.OffsetY = m.OffsetY + point.Y - start.Y; viewBox.RenderTransform = new MatrixTransform(m); //给鼠标起点和图片临时位置重新赋值 start = point; } } }