【问题标题】:TabletPC, InkCanvas - Selectively capture mouse, pen or touchTabletPC、InkCanvas - 选择性地捕捉鼠标、笔或触摸
【发布时间】:2014-10-10 19:21:37
【问题描述】:

我需要编写一个 C# WPF 应用程序来捕获平板电脑上的点,并且我正在使用 InkCanvas,但是我没有找到一种方法来选择性地配置 InkCanvas 以仅获取鼠标、笔和触摸点的组合(对于我的场景,我只需要笔或鼠标,永远不要触摸)。该解决方案必须适用于 Windows XP 到 Windows 8.1。

我尝试在this example 之后编写一个 StylusPlugin,但是:

  • RawStylusInput.StylusDeviceId 在不同的平板电脑上返回的值不同;
  • 即使我设法区分鼠标、笔和触摸,我也无法使用 RawStylusInput.SetStylusPoints 删除不需要的 StylusPoints,因为该方法不接受 null 参数或空 StylusPointCollection。

This solution 似乎可以工作,但 Real-Time Stylus 不像 WPF,我想使用 InkCanvas。

【问题讨论】:

    标签: c# .net wpf c#-4.0 inkcanvas


    【解决方案1】:

    如果您只是想选择性地允许仅笔或仅鼠标与 InkCanvas 交互,您可以处理 PreviewMouseDownPreviewStylusDownInkCanvas 上的 PreviewTouchDown 事件,如果要禁用该类型的输入,请将 EventArgs 上的 Handled 属性设置为 true。在您的情况下,应该可以使用以下方法。

        private void InkCanvas_PreviewMouseDown(object sender, MouseButtonEventArgs e)
        {
            if (!mouseInputEnabled)
                e.Handled = true;
        }
    
        private void InkCanvas_PreviewStylusDown(object sender, StylusDownEventArgs e)
        {
            if (!stylusInputEnabled)
                e.Handled = true;
        }
    
        private void InkCanvas_PreviewTouchDown(object sender, TouchEventArgs e)
        {
            e.Handled = true;
        }
    

    【讨论】:

    • 我尝试了这种方法,但是当我触摸 InkCanvas 时,触发的 Preview* 事件依次是 PreviewStylusDown、PreviewTouchDown 和 PreviewMouseDown。是不是很奇怪?
    • 是的,这看起来很奇怪,但它是正确的。这个MSDN article 将对此有所了解。在大多数情况下,无论用户使用什么类型的输入,您都希望能够处理来自用户的输入。出于这个原因,事件在链中被触发,直到它们被处理。到目前为止,我还没有找到一种方法来检测初始输入类型是什么。您能否解释一下您的用例,以便我们可以提出另一个解决方案?
    • 考虑到您的回答,您已经了解了用例。我可以为不需要从中获取点的笔点源添加它,我既不想在 InkCanvas 上留下任何笔划,也不想在底层代码中记录任何点。我可能已经找到了解决方案,但我需要在发布之前更好地验证它。它需要处理 Stylus、Touch 和 Mouse 事件的其他方法(例如 MouseMove、TouchMove、StylusMove 等),并使用e.StylusDevice.TabletDevice.Type 确定事件的真实来源并在需要时设置e.Handled = true
    • 从用户的角度来看,我很好奇为什么您不希望在 InkCanvas 上允许触控,而是支持触控笔和鼠标。触控支持比触控笔支持更常见,所以对我来说这听起来像是一个有趣的用例。
    • 场景是一个测图签名软件。一个客户只需要鼠标支持(仅用于测试),而另一个客户需要防止使用鼠标并避免用户误用手触摸表面而干扰笔签名。不幸的是,没有办法向我们的客户解释,即使我们避免不必要的接触,他们仍然需要一个人来驱动签名过程来检查签名是否“有意义”。我的意思是,没有 PreviewPenisDown 事件;)
    猜你喜欢
    • 1970-01-01
    • 2020-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-05
    • 1970-01-01
    相关资源
    最近更新 更多