WPF和触摸 - 焦点问题

Yoa*_*oav 13 c# wpf touch windows-8.1 .net-4.6

我有一个WPF .NET 4.6Windows 8.1平板电脑上运行的应用程序,在过去的几天里,我一直在努力使我的应用程序touch友好,使其按预期工作.我的主要问题是焦点相关,这些影响我的应用程序中的几个控件.例如:

  • 文本框:有时需要双击或三击以获得输入焦点,它们确实输入鼠标悬停状态但插入符号不存在;
  • 组合框:为了打开它,需要进行几次触摸,一旦触摸项目以便选择它,组合将保持打开状态,新选择的项目会突出显示;
    组合框焦点问题
  • 按钮:只需点击几下即可运行连接命令并保持鼠标悬停状态;
  • 键盘支持

我在寻找解决方案时尝试了几种方法,每种解决方案都有自己的缺点:

  • 删除整个应用程序的平板电脑支持(从此处获取).这一个解决了上面提到的大多数焦点问题,但使滚动(我猜其他一些与平板电脑相关的功能,我还没有找到)无法使用.
  • 需要时显式激活键盘(此处示例).焦点问题仍然存在,滚动按预期工作
  • 我还尝试删除所有样式并测试了来自不同制造商的2种不同平板电脑上的所有内容但没有成功

最近微软宣布 "Touch更好"但我找不到任何关于解决这个问题的最佳方法的官方文档.

关于如何通过触摸使我的应用程序更好地工作的任何建议都将是一个很大的帮助.

Grz*_*ski 1

我能够通过使用以下行为来删除鼠标悬停状态:

public class TouchDeviceMouseOverUIElementFixBehavior : Behavior<UIElement>
{
    protected override void OnAttached()
    {
        AssociatedObject.StylusUp += AssociatedObject_StylusUp;
    }

    protected override void OnDetaching()
    {
        AssociatedObject.StylusUp -= AssociatedObject_StylusUp;
    }

    private void AssociatedObject_StylusUp(object sender, StylusEventArgs e)
    {
        var control = sender as FrameworkElement;
        if (control != null)
        {
            if (!VisualStateManager.GoToElementState(control, "Normal", true))
            {
                VisualStateManager.GoToState(control, "Normal", true);
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)