【问题标题】:Popup not closing on touch弹出窗口未在触摸时关闭
【发布时间】:2018-05-18 07:46:58
【问题描述】:

我有一个 WPF 弹出窗口,可以使用鼠标完美运行。

当用户按预期点击弹出窗口外部时,弹出窗口将关闭 - 到目前为止一切都很好

当在触摸屏上弹出窗口拒绝关闭,直到另一个控件获得焦点(例如通过单击按钮或聚焦文本框)

我需要做什么才能让弹出窗口像点击时一样在触摸时关闭?

我认为这与不失去对触摸的关注有关,但我在谷歌上找不到与此相关的任何内容

谢谢

【问题讨论】:

  • “当用户按预期点击弹出窗口外部时,弹出窗口将关闭” - 在弹出窗口之外,这是如何实现的?弹出窗口似乎在侦听要关闭的事件?您知道 WPF 中有单独的鼠标和触摸事件吗? stackoverflow.com/questions/21399502/…
  • 是的,这是使用弹出窗口的内置功能,我将弹出窗口设置为 StaysOpen = False,这允许它保持打开状态,直到有人在外面点击
  • 那么,当您“触摸”文本框时,它会消失吗?我没有启用触摸的设备,所以无法测试,但也许您可以使用 TouchDown 手动监听事件并重置焦点?
  • 我并不是说代码有问题,或者我的代码有问题。我只是询问触摸和鼠标输入之间的 WPF 焦点更改是否不同。如果问题不要求用特定代码诊断问题,则问题不需要代码
  • 您使用的是 Windows 7 吗?

标签: wpf popup touch


【解决方案1】:

我刚刚启动了这段代码:

<Window 
    x:Class="WpfApp1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d" Title="MainWindow" Height="450" Width="800">
    <Grid>
        <Button Click="ButtonBase_OnClick" Width="50" Height="40" HorizontalAlignment="Left">Show</Button>
        <Button Width="50" Height="40" HorizontalAlignment="Right">None</Button>
        <Popup x:Name="MyPopup" Width="200" Height="100" IsOpen="True" StaysOpen="False" >
            <Border Background="Red" Width="50" Height="50" ></Border>
        </Popup>
    </Grid>
</Window>


private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
    MyPopup.IsOpen = true;
}

即使我使用触摸设备(在当前最新的 Windows 版本上)它也能正常工作。您的代码中可能还有其他问题,但要回答您的问题:

我只是在问 WPF 焦点更改在触摸和鼠标输入之间是否发生不同

不,它没有。请检查我的简单代码或检查您的应用程序在其他触摸设备上是否正常工作。也许您正在自己处理某个地方的触摸事件?

【讨论】:

    【解决方案2】:

    我不得不承认我没有测试过 Jonathan Dragon 提出的解决方案。

    我在寻找类似问题的解决方案时遇到了这个问题(也许)。为了能够在触摸界面中的某些项目上显示工具提示,我们侦听项目的 MouseUp 和 TouchUp 事件,并在这种情况下显示一个包含工具提示信息的 Popup。

    我们使用附加属性来设置工具提示,并且弹出窗口可重复使用不同的内容,适用于使用此功能的所有项目。

    我体验到,如果我打开弹出窗口,然后通过单击空白区域将其关闭 - 一切都会按预期工作。

    如果我打开弹出窗口然后单击一个按钮(带有命令的东西),弹出窗口确实会消失,但所有按钮都不会响应,直到我再次打开弹出窗口并通过单击空白区域将其关闭。

    我只是在阅读 Popup 的“StaysOpen”属性,嗯...

    如果 System.Windows.Controls.Primitives.Popup 控件在 System.Windows.Controls.Primitives.Popup 控件之外发生鼠标或键盘事件时关闭,则为 false。默认为真。

    它没有特别提到触摸事件,而键盘和鼠标事件是。 这可能表明弹出窗口对触摸事件的反应可能不同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多