在Windows 10(1803)上,如果WPF透明窗口覆盖在

时间:2018-05-17 02:43:50

标签: c# wpf uwp

如果我使用一个简单的空窗口创建一个新的WPF应用程序,如下面显示的代码,我发现WPF应用程序覆盖的所有应用程序都失去了触摸或手写笔反应。只有在Windows 10升级到1803(10.0.17134.0)时才能重现。

<Window x:Class="TheWPFCoveringWindow.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        WindowStyle="None" WindowState="Maximized"
        AllowsTransparency="True" Background="Transparent"
        Topmost="True">
    <Button Content="Test" Width="200" Height="100" />
</Window>

我写了另一个WPF应用程序来找出发生了什么。所以我将一个StylusDown事件添加到Window,如下所示的代码:

// This code is in another WPF application.
private void OnStylusDown(object sender, StylusDownEventArgs e)
{
    // Set a breakpoint here.
}

但是在我关闭位于顶部的透明WPF窗口之前,断点永远不会达到。

我将非常简单的代码推送到GitHub:dotnet-campus/TouchIssueOnWindows10.0.17134。克隆它可能会有所帮助。

为什么会发生这种情况以及如何解决?任何回复都表示赞赏。

1 个答案:

答案 0 :(得分:4)

更新

Microsoft已在 .NET Framework August 2018 Preview of Quality Rollup 中解决了此问题。

  

解决了在具有透明覆盖窗口的Windows Presentation Foundation(WPF)应用程序中处理触摸和鼠标事件的问题。

原始

经过整整一周的调试,我终于找到了解决方案。

只需为Window添加ResizeMode="NoResize"属性,如下所示:

<Window x:Class="TheWPFCoveringWindow.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        WindowStyle="None" WindowState="Maximized"
        AllowsTransparency="True" ResizeMode="NoResize"
        Background="Transparent" Topmost="True">
    <Button Content="Test" Width="200" Height="100" />
</Window>

@lindexi已将此问题及此解决方案发布到他的帖子中。如果您想了解有关此问题的更多信息,请阅读win10 17025 touch bug - lindexi以获取更多详细信息。 (这篇文章是用多种语言编写的,所以即使忽略了未知的字符,你也不会错过任何内容。)

实际上,我仍然无法弄清楚这个属性有何帮助。

有人能解释这个问题的原因吗?