【问题标题】:Difficulty getting controls in a SurfaceScrollViewer control to gain focus难以在 SurfaceScrollViewer 控件中获取控件以获得焦点
【发布时间】:2011-08-31 15:48:50
【问题描述】:

这有点奇怪,所以我希望也许其他人也遇到过这个问题,并且可能知道如何解决它。

我正在开发最终将在 Windows 平板电脑上运行的 WPF 应用程序。因为它是一个触摸屏设备,所以我在显示要滚动的项目列表时使用了 SurfaceScrollViewer 控件,它的效果非常好。

我发现,如果我在 SurfaceScrollViewer 中显示 TextBox 控件,则无法编辑文本框,除非你以非常快的速度反复点击它大约五六次 - 只有这样它们才能获得焦点。

如果我改用 ScrollViewer,它可以正常工作。在桌面上运行它也能正常工作 - 这只是平板电脑上的问题。

有什么想法吗?

总而言之,这是主要结构:SurfaceScrollViewer / StackPanel / ItemsControl

即使我只有一个 TextBox 控件作为 ItemsControl 的 DataTemplate,它仍然会遇到同样的问题。

哦 - 这也发生在按钮上。它不仅限于 TextBox 控件。

【问题讨论】:

    标签: wpf focus scrollviewer tablet pixelsense


    【解决方案1】:

    TextBox 和 Button 不知道如何像 Surface* 控件那样处理 Touch 事件。当您触摸 TextBox 时,首先会发送一个触摸事件。 TextBox 会忽略它,因此它会转到 SurfaceScrollViewer。 SSV 说“是的,我可以用这个做点什么”,所以它处理事件并捕获输入。 TextBox 不再获得与该触摸相关的事件。

    所以...诀窍是在您的 TextBox 上处理 TouchDown 事件...或者更好的是,只需使用 SurfaceTextBox 控件即可为您完成此操作(以及其他有助于触摸的东西)。 Button/SurfaceButton 和许多其他标准控件也是如此。作为一般规则,只要存在 Surface 版本的控件,就使用它们。

    【讨论】:

    • 太棒了 - 谢谢!这确实有效。现在我只需要应用正确的样式就可以了。非常有用的解释为什么会发生 - 谢谢!
    猜你喜欢
    • 2012-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多