编程语言
首页 > 编程语言> > 使用鼠标WPF C#移动图像

使用鼠标WPF C#移动图像

作者:互联网

Hello, I have been trying to work this problem out for some time now,
I hope that you are able to lead me in the right direction!

我的目标是在我的wpf游戏中具有“手电筒”效果,为此,我追求了2个主要选择.

>具有宽度为200%的黑色png图像.中间有孔的窗口高度,然后用鼠标移动图像
>具有窗口大小的黑色图像,并具有一个不透明蒙版元素,该元素是一个圆形的形状,从黑色层一直到下面的内容.该圆圈随鼠标移动.

我无法使用这两个选项中的任何一个,在wpf中,当您具有不透明蒙版时,似乎无法移动“穿过”图层的元素.对于大图像方法,我无法将鼠标Point对象转换为图像的位置.以下是一些获取鼠标位置的潜在方法,我无法将图像移动到“指向”位置.

指向屏幕

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库或本地实现,那也是一种选择.谢谢.

解决方法:

您可以将Path元素与CombinedGeometry一起使用,其中CombinedGeometry由非常大的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>

MouseMove处理程序:

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

标签:mouse,kinect,wpf,c,visual-studio
来源: https://codeday.me/bug/20191119/2035890.html