XAML文件
<Grid>
<Border Grid.Row="1" Background="#FF595353" CornerRadius="5">
<Grid x:Name="IMG" Margin="0,0,0,0">
<Grid.Resources>
<TransformGroup x:Key="Imageview">
<ScaleTransform/>
<TranslateTransform/>
</TransformGroup>
</Grid.Resources>
<ScrollViewer HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Disabled" Background="#FF595353" Cursor="SizeAll"
Margin="0,0,0,0" Focusable="False" x:Name="BackFrame">
<ContentControl MouseLeftButtonDown="IMG1_MouseLeftButtonDown"
MouseLeftButtonUp="IMG1_MouseLeftButtonUp"
MouseMove="IMG1_MouseMove"
MouseWheel="IMG1_MouseWheel" >
<Image Name="PicEmap" Width="800" Height="600" MouseDown="PicEMap_MouseDown" RenderTransform="{StaticResource Imageview}" RenderOptions.BitmapScalingMode="NearestNeighbor">
</Image>
</ContentControl>
</ScrollViewer>
</Grid>
</Border>
</Grid>
C#代码:
#region 图像缩放,移动
private bool mouseDown;
private System.Windows.Point mouseXY;
private void IMG1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
var img = sender as ContentControl;
if (img == null)
{
return;
}
img.CaptureMouse();
mouseDown = true;
mouseXY = e.GetPosition(img);
Console.WriteLine("mouseXY.X = " + mouseXY.X + "; mouseXY.Y = " + mouseXY.Y);
}
private void PicEMap_MouseDown(object sender, MouseButtonEventArgs e)
{
System.Windows.Point point = e.GetPosition(PicEmap);
//Console.WriteLine("PicEmap.X = " + point.X + "; PicEmap.Y = " + point.Y);
//if ((point.X - 304) * (point.X - 304) + (point.Y - 86) * (point.Y - 86) < 100)
//{
// Console.WriteLine("在范围内");
//}
}
private void IMG1_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
var img = sender as ContentControl;
if (img == null)
{
return;
}
img.ReleaseMouseCapture();
mouseDown = false;
}
private void IMG1_MouseMove(object sender, System.Windows.Input.MouseEventArgs e)
{
var img = sender as ContentControl;
if (img == null)
{
return;
}
if (mouseDown)
{
Domousemove(img, e);
}
}
private void Domousemove(ContentControl img, System.Windows.Input.MouseEventArgs e)
{
if (e.LeftButton != MouseButtonState.Pressed)
{
return;
}
var group = IMG.FindResource("Imageview") as TransformGroup;
var transform = group.Children[1] as TranslateTransform;
var position = e.GetPosition(img);
transform.X -= mouseXY.X - position.X;
transform.Y -= mouseXY.Y - position.Y;
mouseXY = position;
}
private void IMG1_MouseWheel(object sender, MouseWheelEventArgs e)
{
var img = sender as ContentControl;
if (img == null)
{
return;
}
var point = e.GetPosition(img);
Console.WriteLine("point.X = " + point.X + "; point.Y=" + point.Y);
var PicLocate = e.GetPosition(PicEmap);
Console.WriteLine("PicEmap.X = " + PicLocate.X + "; PicEmap.Y=" + PicLocate.Y);
var group = IMG.FindResource("Imageview") as TransformGroup;
var delta = e.Delta * 0.001;
DowheelZoom(group, point, delta);
}
private void DowheelZoom(TransformGroup group, System.Windows.Point point, double delta)
{
var pointToContent = group.Inverse.Transform(point);
var transform = group.Children[0] as ScaleTransform;
if (transform.ScaleX + delta < 0.1) return;
transform.ScaleX += delta;
transform.ScaleY += delta;
var transform1 = group.Children[1] as TranslateTransform;
transform1.X = -1 * ((pointToContent.X * transform.ScaleX) - point.X);
transform1.Y = -1 * ((pointToContent.Y * transform.ScaleY) - point.Y);
//Console.WriteLine("transform.ScaleX = " + transform.ScaleX + "; transform.ScaleY = " + transform.ScaleY);
}
#endregion
我会在图片中动态的画一些点(知道点在图片中的相对位置,比如800*600的图片中,点在300*400这个位置),当鼠标经过时,会显示一些信息。现在的问题是:不知道怎么获得鼠标在Image中的位置以及Image的大小。大神们,如何获取?或者还有什么办法,实现我的功能?