界面布局代码如下
<Viewbox Name="viewBoxContainer" ClipToBounds="True">
<Grid Name="gridContainer"
ManipulationStarting="image_ManipulationStarting"
ManipulationDelta="image_ManipulationDelta"
ManipulationCompleted="image_ManipulationCompleted"
>
<Image Name="imageBackground" Source="Images/output.jpg" Stretch="None" IsManipulationEnabled="True"></Image>
<lib:DrawingCanvas x:Name="drawingCanvas" Background="#00000000"
Width="{Binding ElementName=imageBackground, Path=ActualWidth, Mode=OneWay}"
Height="{Binding ElementName=imageBackground, Path=ActualHeight, Mode=OneWay}"
MouseWheel="Canvas_MouseWheel"
MouseMove="Canvas_MouseMove"
MouseLeftButtonDown="Canvas_MouseLeftButtonDown"
MouseLeftButtonUp="Canvas_MouseLeftButtonUp"
MouseRightButtonDown="Canvas_MouseRightButtonDown"
MouseLeave="drawingCanvas_MouseLeave"
TouchDown="OnTouchDownHandler"
TouchMove="OnTouchMoveHandler"
TouchUp="OnTouchUpHandler"
IsManipulationEnabled="True">
</lib:DrawingCanvas>
</Grid>
</Viewbox>
后台鼠标拖动图片移动代码如下
private Point mousePosition ;
private void Canvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
if (!m_Move) return;
isMouseDown = true;
//mousePosition = e.GetPosition(gridContainer);
//需要注意此处,获取ViewBox上的坐标,如果是获取Grid上的坐标,则会导致鼠标按下,悬停,图片抖动
mousePosition = e.GetPosition(viewBoxContainer);
}
private void Canvas_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
isMouseDown = false;
}
private void Canvas_MouseMove(object sender, System.Windows.Input.MouseEventArgs e)
{
//var position = e.GetPosition(gridContainer);
//需要注意此处,获取ViewBox上的坐标,如果是获取Grid上的坐标,则会导致鼠标按下,悬停,图片抖动
var position = e.GetPosition(viewBoxContainer);
var pos = e.GetPosition(drawingCanvas);
if (pos.X <= 20 || pos.X >= drawingCanvas.ActualWidth - 20 || pos.Y <= 20 || pos.Y >= drawingCanvas.ActualHeight - 20)
{
isMouseDown = false;
}
if (isMouseDown)
{
TranslateTransform translateTransform = transformGroup.Children[1] as TranslateTransform;
translateTransform.X += position.X - mousePosition.X;
translateTransform.Y += position.Y - mousePosition.Y;
mousePosition = position;
}
}
private void drawingCanvas_MouseLeave(object sender, MouseEventArgs e)
{
isMouseDown = false;
}