worsun 2016-05-29 09:11 采纳率: 0%
浏览 6327

WPF中获取Image的位置和大小

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的大小。大神们,如何获取?或者还有什么办法,实现我的功能?

  • 写回答

2条回答 默认 最新

  • sanyuni 2016-06-03 01:19
    关注

    PicEmap.ActualHeight PicEmap.ActualWidth

    评论

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!