Добрый день. Я пытался создать программу, которую пользователь может увеличивать и рисовать. используя WPF
К счастью, я нашел класс панорамирования и масштабирования
Pan & Zoom Image
И я использую ZoomBorder.cs
из вопроса.
И я хочу иметь возможность использовать MVVM. Поэтому я добавил свойство зависимости в ZoomBorder.cs
public RectItem RectSize
{
get { return (RectItem)GetValue(RectSizeProperty); }
set { SetValue(RectSizeProperty, value); }
}
// Using a DependencyProperty as the backing store for RectSize. This enables animation, styling, binding, etc...
public static readonly DependencyProperty RectSizeProperty =
DependencyProperty.Register("RectSize", typeof(RectItem), typeof(ZoomBorder),
new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, null));
, которое возвращает модель
public class RectItem : BindableBase
{
private double _X;
public double X
{
get { return _X; }
set { SetProperty(ref _X, value); }
}
private double _Y;
public double Y
{
get { return _Y; }
set { SetProperty(ref _Y, value); }
}
private double _Width;
public double Width
{
get { return _Width; }
set { SetProperty(ref _Width, value); }
}
private double _Height;
public double Height
{
get { return _Height; }
set { SetProperty(ref _Height, value); }
}
}
А вот код для рисования
private void child_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
startPoint = Mouse.GetPosition((IInputElement)sender);
}
private void child_MouseMove(object sender, MouseEventArgs e)
{
if (e.LeftButton == MouseButtonState.Released)
return;
var pos = Mouse.GetPosition((IInputElement)sender);
// Set the position of rectangle
var x = Math.Min(pos.X, startPoint.X);
var y = Math.Min(pos.Y, startPoint.Y);
// Set the dimenssion of the rectangle
var w = Math.Max(pos.X, startPoint.X) - x;
var h = Math.Max(pos.Y, startPoint.Y) - y;
var r = new RectItem();
r.X = x;
r.Y = y;
r.Width = w;
r.Height = h;
RectSize = r;
}
Итакдалеко нарисованный прямоугольник правильный. Он рисует прямоугольник в положении мыши
![enter image description here](https://i.stack.imgur.com/Xep76.png)
Но когда я увеличил масштаб. Координаты неверны. Прямоугольник не рисуется в положении мыши. Он рисует в нижней части мыши. Так как я могу исправить эту проблему? Спасибо