WPF 应用程序的触摸行为差异与 mouse/stylus

WPF application difference in behavior for touch versus mouse/stylus

我有一个通过消息框向用户显示消息的应用程序。用户点击确定后, 将焦点恢复到可视化树上方的 ItemsControl。

我 运行 遇到的奇怪行为:在消息框关闭后,您必须用手指在任何按钮上按两次。 第一个手指按下实际上可以在屏幕上的任何位置。这似乎是一个焦点问题,但我们已经恢复了焦点。 使用鼠标或手写笔只需单击 1 次按钮即可在消息框关闭后工作。

有没有人运行遇到过这样的问题?我对 WPF 的经验不多。

此处显示的是消息框以及之后如何设置焦点。它将进入第一个 if 语句。

// Save the element with focus.
UIElement uiElement = Keyboard.FocusedElement as UIElement;

// show message box
using (new DisposableCursor(Cursors.Arrow))
{
    result = window.Show(type, title, message, buttons);
}

// Check if element still has focus after displaying the message box.
if (uiElement != null && uiElement != Keyboard.FocusedElement) 
{
    // Go up the visual tree to try to set the focus to a parent element.
    for (int i = 0; i < 100; i++)
    {
        uiElement = VisualTreeHelper.GetParent(uiElement) as UIElement;

        if (uiElement == null)
        {
            break;
        }

        if (uiElement.Focus())
        {
            break;
        }
    }
}

原来焦点是一条红鲱鱼。没有用于 TouchDown 的事件处理程序,尽管有用于 StylusUp 和 Click 的处理程序。至于为什么会导致第一个手指按下没有注册,我不知道。据我了解,Touch 事件应该被提升为 Click 事件,所以它应该工作正常。