Я пытаюсь применить преобразование Translate к своему холсту, используя прикрепленные свойства - холст перемещается, когда я его перетаскиваю, но он очень нервный и постоянно пытается вернуться к исходному положению.Когда я прокручиваю свой холст, он также полностью портится и перетаскивает холст за пределы экрана.
Мои методы класса прикрепленных свойств:
private Point _originalMouseDownPoint;
private void AssociatedObjectOnMouseMove(object sender, MouseEventArgs mouseEventArgs) {
var pos = mouseEventArgs.GetPosition(AssociatedObject);
MouseX = pos.X;
MouseY = pos.Y;
var canvas = sender as Canvas;
if (BaseViewModel.Mode != MouseHandlingModeEnum.Panning) return;
var translateTransform = new
TranslateTransform(pos.X - _originalMouseDownPoint.X, pos.Y - _originalMouseDownPoint.Y);
canvas.RenderTransform = translateTransform;
}
private void AssociatedObjectOnMouseDown(object sender, MouseButtonEventArgs e) {
var canvas = sender as Canvas;
canvas.CaptureMouse();
canvas.Focus();
_originalMouseDownPoint = e.GetPosition(canvas);
BaseViewModel.Mode = MouseHandlingModeEnum.Panning;
}
private void AssociatedObjectOnMouseUp(object sender, MouseButtonEventArgs e) {
var canvas = sender as Canvas;
canvas.ReleaseMouseCapture();
BaseViewModel.Mode = MouseHandlingModeEnum.None;
}
И тогда мой XAML просто устанавливает это с помощью поведения canvas.
<i:Interaction.Behaviors>
<attachedProperties:MouseBehaviour MouseX="{Binding PanelX , Mode=OneWayToSource}"
MouseY="{Binding PanelY, Mode=OneWayToSource}" />
</i:Interaction.Behaviors>
(Игнорируйте привязки, они для отдельной функциональности.
Программа должна плавно перемещаться по холсту. Я видел, как некоторые люди используют матричное преобразование, если я попробуюи реализовать это каким-то образом?