加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – WPF和触摸焦点问题

发布时间:2020-12-15 18:10:43 所属栏目:百科 来源:网络整理
导读:我有一个在 Windows 8.1平板电脑上运行的WPF .NET 4.6应用程序,在过去几天中,我一直在努力使我的应用程序触摸友好,使其按预期工作.我的主要问题是关注焦点,这些影响我的应用程序中的几个控件.例如: 文本框:有时需要双重或三重触摸才能获得输入焦点,他们确
我有一个在 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);
            }
        }
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读