Wpf 屏幕边缘滑动检测

时间:2021-05-06 10:32:50

标签: wpf touch gesture

我有一个基本的 wpf 应用程序,它基本上可以检测触摸输入并根据输入移动一个矩形。我的问题是,如果触摸超出屏幕(例如:我触摸屏幕的底部边框并将其在触摸区域中滑动),则不会被检测到。有没有办法克服这个问题?我也想检测边缘滑动。

XAML:

<Window x:Class="touch_test.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:touch_test"
        mc:Ignorable="d" 
        Title="MainWindow" Height="450" Width="800"
        Stylus.IsPressAndHoldEnabled="False"
        >
    <Canvas>
        <Rectangle Width="50" Height="50" x:Name="rect" Fill="Red"/>
    </Canvas>

</Window>

Cs:

    protected TouchPoint TouchStart;
    public MainWindow()
    {
        InitializeComponent();
       
        this.PreviewTouchDown += new EventHandler<TouchEventArgs>(BasePage_TouchDown);
        this.PreviewTouchMove += new EventHandler<TouchEventArgs>(BasePage_TouchMove);
        WindowState = WindowState.Maximized;
        WindowStyle = WindowStyle.None;
    }
    void BasePage_TouchDown(object sender, TouchEventArgs e)
    {
        TouchStart = e.GetTouchPoint(this);
    }
    void BasePage_TouchMove(object sender, TouchEventArgs e)
    {
        Rectangle rectToMove = rect;
        rectToMove.RenderTransform = new MatrixTransform();
        Matrix matr = ((MatrixTransform)rectToMove.RenderTransform).Matrix;
        var currentTouchPoint = e.GetTouchPoint(this);

        

        matr.Translate(currentTouchPoint.Position.X, currentTouchPoint.Position.Y );

        rectToMove.RenderTransform = new MatrixTransform(matr);

    }

0 个答案:

没有答案