WPF 多点触控 DeltaManipulation 鼠标事件等效吗?

发布于 2024-10-08 17:45:45 字数 1328 浏览 3 评论 0原文

我有一个带有网格的小型演示应用程序。该网格包含一个图像。我使用以下代码通过触摸来缩放和平移图像。

        private void manipulationDelta(object sender, ManipulationDeltaEventArgs e)
    {

        Matrix matrix = imagematrix.Matrix;

        matrix.Translate(e.DeltaManipulation.Translation.X, e.DeltaManipulation.Translation.Y);
        matrix.ScaleAt(e.DeltaManipulation.Scale.X, e.DeltaManipulation.Scale.Y,
            e.ManipulationOrigin.X, e.ManipulationOrigin.Y);

        imagematrix.Matrix = matrix;

        e.Handled = true;

    }

该矩阵放置在图像上的 rendertransformation 属性处。

我希望在其他演示应用程序中具有相同的功能,无需触摸,但具有鼠标事件处理程序。

我尝试了类似的方法来翻译鼠标移动,但它不一样:(

        protected override void OnMouseMove(MouseEventArgs e)
    {

        if (e.LeftButton == MouseButtonState.Pressed)
        {


            Vector delta = lastPoint - e.GetPosition(canvascontrol);

            Matrix matrix = PART_MATRIX.Matrix;

            if(delta.X > 0)
                matrix.OffsetX += 1;
            else
                matrix.OffsetX -= 1;

            if (delta.Y > 0)
                matrix.OffsetY += 1;
            else
                matrix.OffsetY -= 1;

            imagematrix.Matrix = matrix;

        }

        base.OnMouseMove(e);

    }

lastPoint 是mouseleftbuttondown 上的第一个点。

谢谢。

i have a small demo app with a grid. this grid contains a image. i use the following code to scale and translate the image with touch.

        private void manipulationDelta(object sender, ManipulationDeltaEventArgs e)
    {

        Matrix matrix = imagematrix.Matrix;

        matrix.Translate(e.DeltaManipulation.Translation.X, e.DeltaManipulation.Translation.Y);
        matrix.ScaleAt(e.DeltaManipulation.Scale.X, e.DeltaManipulation.Scale.Y,
            e.ManipulationOrigin.X, e.ManipulationOrigin.Y);

        imagematrix.Matrix = matrix;

        e.Handled = true;

    }

The matrix is placed at rendertransformation property on the image.

I would like to have the same functionality in a other demo app without touch but with mouse event handlers.

I tried something like this for the translation on mouse move but its not the same :(

        protected override void OnMouseMove(MouseEventArgs e)
    {

        if (e.LeftButton == MouseButtonState.Pressed)
        {


            Vector delta = lastPoint - e.GetPosition(canvascontrol);

            Matrix matrix = PART_MATRIX.Matrix;

            if(delta.X > 0)
                matrix.OffsetX += 1;
            else
                matrix.OffsetX -= 1;

            if (delta.Y > 0)
                matrix.OffsetY += 1;
            else
                matrix.OffsetY -= 1;

            imagematrix.Matrix = matrix;

        }

        base.OnMouseMove(e);

    }

lastPoint is the first point onmouseleftbuttondown.

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

月野兔 2024-10-15 17:45:45

我不确定,这是否是您正在寻找的答案,但是,如果您将 Thumb 包装到模板中,然后分配模板到图像对象,或将图像作为模板分配给Thumb

I am not sure, if this is the answer you are looking for but, the Thumb control gives you a DragDelta, if you wrap a Thumb into a template and then assign the template to the image object, or assign the image as a template to the Thumb.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文