【问题标题】:Win7 WPF Alt+Tab Focus OddityWin7 WPF Alt+Tab 焦点异常
【发布时间】:2010-12-28 03:57:02
【问题描述】:

经过几个小时的谷歌搜索,我无法找到任何关于这个问题的 cmets。我们有一个带有透明背景的WindowStyle=None 窗口,它允许透明并且不显示在任务栏中,这一切都很正常。这是 XAML,您可以自己测试:

<Window x:Class="AltTabTest.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Name="TestWindow" Title="TestWindow"
WindowStyle="None" AllowsTransparency="True" ResizeMode="NoResize" 
Background="Transparent" ShowInTaskbar="False"
Width="816" Height="820">

<Grid>
    <Border BorderThickness="0" Background="LightBlue" CornerRadius="15" />
</Grid>

现在奇怪的是,一旦您编译并运行此窗口,请按照以下步骤操作:

  1. 点击显示桌面隐藏所有应用
  2. Alt+Tab 返回 WPF 测试应用程序
  3. 在浅蓝色边框区域之外单击(到桌面工作区)
  4. 观察 WPF 测试应用程序神奇地消失
  5. 可选 Alt+Tab 到任何其他正在运行的应用程序并观察 WPF 测试应用程序神奇地重新出现

所以我的问题是:这到底是怎么回事?!这是预期的行为吗?如果是这样,有什么办法可以解决吗?

在解决 Alt+Tab 后,感觉 WPF 应用程序并没有真正获得焦点。请注意,这是在 Windows 7 中测试的,我还没有能力在 Vista 或 XP 中进行测试。我想要一种强制应用程序真正获得焦点的方法,但如果这不可能,那么我想知道是否有办法捕获和忽略 Alt+Tab 操作。旨在修复的应用程序是锁定模式应用程序,因此用户永远无法真正摆脱在桌面上运行的应用程序。任何建议、示例、见解或正确方向的观点将不胜感激,谢谢! =)

【问题讨论】:

  • 我看到了同样的事情,但我注意到窗口在步骤 2 中 Alt-Tabbing 后捕获了 ALT-F4,因此它似乎确实获得了焦点。不过,目前还没有关于如何纠正这种行为的线索。
  • 我在 Vista/32 上运行它,但窗口确实没有消失。
  • 我还注意到,如果您在第 2 步期间 Alt+Tab 到任何其他窗口而不是 WPF 应用程序,则 WPF 应用程序将意外地显示在您选择的任何窗口旁边。
  • 一些没有解决方案的反馈:当您发送 WND+M 快捷方式以最小化所有窗口时,或者当您使用“Aero-shake”来最小化除顶部之外的所有窗口时,该窗口也不会最小化窗户。当切换到“基本”主题而不是“航空”主题时,这些问题也不会消失。
  • Ben,我可以确认 Vista 上的“Tab to other Win”和 Win+M 观察。无需摇晃即可测试。

标签: wpf xaml windows-7 alt-tab


【解决方案1】:

根据 Spy++ 的说法,问题是当您使用 WindowStyle="None" 设置窗口时,当您使用 alt-tab 键时,它不再收到 WM_ACTIVATE 消息。设置 AllowsTransparency="True" 会禁用窗口的命中测试,因此当您点击蓝色矩形以外的地方时,唯一返回 true 的 HitTest 是桌面的。

因为 WM_ACTIVATE 从未被触发,所以 MinimizeAllWindowsToDesktop 无法识别任何活动窗口,因此当它收到您单击桌面的通知时,桌面正在呈现,就像它没有激活任何窗口并且您正在做一些工作一样在桌面上(此功能的预期行为)。

我不知道为什么在 Win7 中窗口没有收到 WM_ACTIVATE 消息。


编辑: 没关系,这看起来只是 WPF 和 Windows 7 中的一个错误。无论窗口的设置如何,这种行为都会持续存在。

【讨论】:

  • 您在哪里发现这是 WPF 和 Windows 7 中的错误?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-14
  • 2011-08-18
  • 2011-03-03
  • 1970-01-01
相关资源
最近更新 更多