Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检测长触摸(WPF和Microsoft Surface)_Wpf_Touch_Pixelsense - Fatal编程技术网

检测长触摸(WPF和Microsoft Surface)

检测长触摸(WPF和Microsoft Surface),wpf,touch,pixelsense,Wpf,Touch,Pixelsense,有什么方法可以检测到文本块(或标签)上的长时间触摸吗?据我所知,没有内置方法,所以您必须这样做 •捕获控制装置着陆事件的开始时间 •将其与TouchUup事件中的释放时间进行比较 •如果两者相差X,则运行长触摸代码 可能需要编写一些代码,但就我所知,这是基本思想,没有内置的方式,因此必须这样做 •捕获控制装置着陆事件的开始时间 •将其与TouchUup事件中的释放时间进行比较 •如果两者相差X,则运行长触摸代码 您可能需要编写一些代码,但这是基本思想长时间触摸或按住(我认为它的正式名称)可以通过

有什么方法可以检测到文本块(或标签)上的长时间触摸吗?

据我所知,没有内置方法,所以您必须这样做

•捕获控制装置着陆事件的开始时间

•将其与TouchUup事件中的释放时间进行比较

•如果两者相差X,则运行长触摸代码


可能需要编写一些代码,但就我所知,这是基本思想,没有内置的方式,因此必须这样做

•捕获控制装置着陆事件的开始时间

•将其与TouchUup事件中的释放时间进行比较

•如果两者相差X,则运行长触摸代码


您可能需要编写一些代码,但这是基本思想

长时间触摸或按住(我认为它的正式名称)可以通过右键单击事件检测到。

如果您使用的是曲面窗口,则可能会禁用右键单击事件。

长时间触摸,或我认为正式命名的按住,可以通过右键单击事件检测到。

如果您使用的是曲面窗口,则右键单击事件可能会被禁用。

您可以使用的所有曲面控件上都有一个ContactHoldspitate事件。但是,作为我在微软期间负责创建此功能的人,我要说的是,这个活动设计得非常糟糕,不应该使用。它不会告诉您系统何时决定手指移动过多而不能算作“保持”,也不会提供绘制动画所需的信息,告诉用户“保持”正在进行。您最好按照@Kevin的建议进行操作,并构建自己的实现。

您可以使用的所有曲面控件上都有ContactHoldship事件。但是,作为我在微软期间负责创建此功能的人,我要说的是,这个活动设计得非常糟糕,不应该使用。它不会告诉您系统何时决定手指移动过多而不能算作“保持”,也不会提供绘制动画所需的信息,告诉用户“保持”正在进行。你最好按照@Kevin的建议去做,建立自己的实现。

有一个叫做
touchandsholdship
previewtouchholdship
的事件,这个事件叫做
touchandship
previewtouchholdship
这是可以在等待的时间内完成的时尚创建具有特定间隔的计时器。当用户点击时启动它,当计时器运行时返回该方法。如果用户释放手,则返回带有false标志的方法

public static Task<bool> TouchHold(this FrameworkElement element, TimeSpan duration)
{
    DispatcherTimer timer = new DispatcherTimer();
    TaskCompletionSource<bool> task = new TaskCompletionSource<bool>();
    timer.Interval = duration;

    MouseButtonEventHandler touchUpHandler = delegate
    {
        timer.Stop();
        if (task.Task.Status == TaskStatus.Running)
        {
            task.SetResult(false);
        }
    };

    element.PreviewMouseUp += touchUpHandler;

    timer.Tick += delegate
    {
        element.PreviewMouseUp -= touchUpHandler;
        timer.Stop();
        task.SetResult(true);
    };

    timer.Start();
    return task.Task;
}
公共静态任务触摸保持(此FrameworkElement元素,时间跨度持续时间)
{
调度程序计时器=新调度程序();
TaskCompletionSource任务=新建TaskCompletionSource();
计时器。间隔=持续时间;
MouseButtonEventHandler touchUpHandler=委托
{
timer.Stop();
if(task.task.Status==TaskStatus.Running)
{
task.SetResult(false);
}
};
element.PreviewMouseUp+=touchUpHandler;
timer.Tick+=委托
{
element.PreviewMouseUp-=touchUpHandler;
timer.Stop();
task.SetResult(true);
};
timer.Start();
返回任务。任务;
}

欲了解更多信息,请阅读此文。

可以以一种期待已久的方式完成此操作。创建具有特定间隔的计时器。当用户点击时启动它,当计时器运行时返回该方法。如果用户释放手,则返回带有false标志的方法

public static Task<bool> TouchHold(this FrameworkElement element, TimeSpan duration)
{
    DispatcherTimer timer = new DispatcherTimer();
    TaskCompletionSource<bool> task = new TaskCompletionSource<bool>();
    timer.Interval = duration;

    MouseButtonEventHandler touchUpHandler = delegate
    {
        timer.Stop();
        if (task.Task.Status == TaskStatus.Running)
        {
            task.SetResult(false);
        }
    };

    element.PreviewMouseUp += touchUpHandler;

    timer.Tick += delegate
    {
        element.PreviewMouseUp -= touchUpHandler;
        timer.Stop();
        task.SetResult(true);
    };

    timer.Start();
    return task.Task;
}
公共静态任务触摸保持(此FrameworkElement元素,时间跨度持续时间)
{
调度程序计时器=新调度程序();
TaskCompletionSource任务=新建TaskCompletionSource();
计时器。间隔=持续时间;
MouseButtonEventHandler touchUpHandler=委托
{
timer.Stop();
if(task.task.Status==TaskStatus.Running)
{
task.SetResult(false);
}
};
element.PreviewMouseUp+=touchUpHandler;
timer.Tick+=委托
{
element.PreviewMouseUp-=touchUpHandler;
timer.Stop();
task.SetResult(true);
};
timer.Start();
返回任务。任务;
}

欲了解更多信息,阅读此内容。

您还需要确保触摸在这段时间内移动不超过1/2英寸,并有一个动画向用户显示您正在观察他们的手指,以便他们意识到他们应该保持静止。您还需要确保触摸在这段时间内移动不超过1/2英寸我们使用Surface SDK组件在项目中启用触摸功能,并且确实触发了右键单击事件(以及单击事件)。这是Surface SDK 2.0测试版,如果有必要的话,我们使用了一个常规的WPF窗口。您使用的是Surface硬件吗?一台标准的windows pc将为您提供鼠标事件,但真正的Surface输入将不会显示什么?我在右键单击鼠标按钮ventargs上没有找到任何属性,它们告诉我类似于持续时间的信息……我们使用Surface SDK组件在项目中启用触摸功能,并且确实触发了右键单击事件(以及单击事件)。这是Surface SDK 2.0测试版,如果有必要的话,我们使用了一个常规的WPF窗口。您使用的是Surface硬件吗?一台标准的windows pc将为您提供鼠标事件,但真正的Surface输入将不会显示什么?我在鼠标右键按钮上找不到任何属性可以告诉我持续时间……真的吗?目前,在一个快速而肮脏的原型中,我仍然使用ContactHold手势。不过,我会记住你的建议。还有一个问题,@Robert:在哪里