使用鼠标 wpf c# 移动图像

本文关键字:移动 图像 wpf 鼠标 | 更新日期: 2023-09-27 18:23:46

您好,我一直在尝试解决这个问题一段时间, 我希望你能够带领我朝着正确的方向前进!

目标是在我的 wpf 游戏中具有"手电筒"效果,为此,我选择了 2 个主要选项。

  1. 有一个黑色的png图像,是窗口的200%宽度和高度,中间有一个孔,然后用鼠标移动图像
  2. 具有
  3. 窗口大小的黑色图像,并具有不透明度蒙版元素,该元素是一个圆形,可透过黑色图层查看下面的内容。此圆圈随鼠标移动。

我无法让这些选项中的任何一个工作,在 wpf 中,当您有一个不透明蒙版时,您似乎无法移动"穿透"图层的元素。对于大图像方法,我无法将鼠标点对象转换为图像的位置。以下是一些获取鼠标位置的潜在方法,我无法将图像移动到"点"位置。

指向屏幕

private void MouseCordinateMethod(object sender, MouseEventArgs e)
{
    var relativePosition = e.GetPosition(this);
    var point= PointToScreen(relativePosition);
    _x.HorizontalOffset = point.X;
    _x.VerticalOffset = point.Y;
}

获取位置

var point = e.GetPosition(this.YourControl);

最终的游戏将使用 kinect 进行控制,因此如果有一种方法可以使用 kinect 库或本机执行此操作,这也是一种选择。谢谢。

使用鼠标 wpf c# 移动图像

您可以使用带有CombinedGeometry的 Path 元素,该由一个非常大的RectangleGeometry和一个排除的(因此是透明的(EllipseGeometry 组成,该通过在鼠标输入时更改其 Center 属性来移动:

<Grid MouseMove="Grid_MouseMove">
    <TextBlock Text="Hello, World" FontSize="40"
               HorizontalAlignment="Center" VerticalAlignment="Center"/>
    <Path Fill="Black">
        <Path.Data>
            <CombinedGeometry GeometryCombineMode="Exclude">
                <CombinedGeometry.Geometry1>
                    <RectangleGeometry Rect="0,0,10000,10000"/>
                </CombinedGeometry.Geometry1>
                <CombinedGeometry.Geometry2>
                    <EllipseGeometry x:Name="circle" RadiusX="100" RadiusY="100"/>
                </CombinedGeometry.Geometry2>
            </CombinedGeometry>
        </Path.Data>
    </Path>
</Grid>

鼠标移动处理程序:

private void Grid_MouseMove(object sender, MouseEventArgs e)
{
    circle.Center = e.GetPosition((IInputElement)sender);
}