Wpf 在Windows 8.1上使用WindowChrome时,任务栏图标消失
我在Windows8.1上使用自己风格的WPF窗口时遇到一些问题。我用WindowChrome编写了一个简单的透明WPF窗口,用于默认的windows拖动行为:Wpf 在Windows 8.1上使用WindowChrome时,任务栏图标消失,wpf,xaml,.net-4.5,windows-8.1,window-chrome,Wpf,Xaml,.net 4.5,Windows 8.1,Window Chrome,我在Windows8.1上使用自己风格的WPF窗口时遇到一些问题。我用WindowChrome编写了一个简单的透明WPF窗口,用于默认的windows拖动行为: <Window x:Class="WpfApplication1.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winf
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="300" Width="300" Background="Transparent"
AllowsTransparency="True" WindowStyle="None">
<WindowChrome.WindowChrome>
<WindowChrome />
</WindowChrome.WindowChrome>
<Border Background="Gray" CornerRadius="20">
<Grid>
</Grid>
</Border>
</Window>
Windows 8.1设置:
- 2台带有扩展桌面的显示器
- 任务栏仅在主桌面上可见
谢谢大家! 似乎只有当您在WPF窗口上设置
WindowStyle=“None”
时,才会出现此错误。此外,此选项还打破了现代应用程序,当最大化应用程序时,这些应用程序会被捕捉到一边。这可能看起来很奇怪,但在使用WindowChrome
删除窗口边框时,不需要设置WindowStyle
,因此您可以安全地跳过它
唯一需要注意的是,您不能使用
AllowTransparency
(但这没关系,因为由于该选项存在大量性能问题,您首先不应该使用它)。经过一些尝试和错误调试后,我发现窗口可见性设置为false,然后更新系统菜单,然后将该设置设置为true
我认为这是没有必要的,并产生了这个令人讨厌的问题
以下是WindowChromeWorker
private void _UpdateSystemMenu(WindowState? assumeState)
{
const MF mfEnabled = MF.ENABLED | MF.BYCOMMAND;
const MF mfDisabled = MF.GRAYED | MF.DISABLED | MF.BYCOMMAND;
WindowState state = assumeState ?? _GetHwndState();
if (null != assumeState || _lastMenuState != state)
{
_lastMenuState = state;
bool modified = _ModifyStyle(WS.VISIBLE, 0);
IntPtr hmenu = NativeMethods.GetSystemMenu(_hwnd, false);
if (IntPtr.Zero != hmenu)
{
// change menu items
...
}
if (modified)
{
_ModifyStyle(0, WS.VISIBLE);
}
}
}
所以你可以试着看看我的分支
可以找到原始来源
也是一个小小的测试应用
希望有帮助都设置为完全相同的分辨率?没有,我用1920x1200和1280x1024测试过。但如果我将两者设置为相同的分辨率(2x1280x1024),则得到相同的结果。我也在windows 8上测试了它,任务栏图标也消失了。我有一个类似的问题,但在这里,当从主屏幕移动到任何辅助屏幕时,即移动到另一个显示器时,任务栏“图标”消失了。我有3台显示器。所有监视器的分辨率相同。我已经发布了一个关于MicrosoftConnect的错误报告:是的。在Windows8.0上也是这样。这东西看起来太多了,不适合生产。这看起来是个不错的主意,但我想我会回到DwmExtendFrameIntoClientArea,除非有新版本。”…但在使用WindowChrome时不需要设置WindowsStyle…”这不是真的非常感谢您的错误修复。它工作得很好!