c# – WPF和触摸焦点问题

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

>文本框:有时需要双重或三重触摸才能获得输入焦点,他们确实进入鼠标超过状态,但插入符号不在那里;
> ComboBoxes:需要几个触摸才能打开它,一旦触摸了一个项目,为了选择它,组合保持打开,突出显示新选择的项目;

>按钮:需要几次点击才能运行连接的命令,并保持鼠标悬停状态;
>键盘支持

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

>删除整个应用程序的平板电脑支持(taken from here).这个解决了上面提到的大部分焦点问题,但是滚动(并且我猜想我还没有发现的一些其他Tablet相关功能)不可用.
>需要时显式激活键盘(Example here).焦点问题仍然存在,滚动按预期工作
>我也试图删除所有的样式,并测试了来自不同制造商的2种不同的平板电脑上的一切,但没有成功

最近Microsoft announced“触摸更好”但是我找不到任何关于最佳方法来处理这个问题的官方文档.

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

解决方法

我能够通过使用以下行为来删除鼠标悬停状态:
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,true);
            }
        }
    }
}

相关文章

目录简介使用JS互操作使用ClipLazor库创建项目使用方法简单测...
目录简介快速入门安装 NuGet 包实体类User数据库类DbFactory...
本文实现一个简单的配置类,原理比较简单,适用于一些小型项...
C#中Description特性主要用于枚举和属性,方法比较简单,记录...
[TOC] # 原理简介 本文参考[C#/WPF/WinForm/程序实现软件开机...
目录简介获取 HTML 文档解析 HTML 文档测试补充:使用 CSS 选...