wpf - 在 Windows 8.1 上使用 WindowChrome 时任务栏图标消失

标签 wpf xaml .net-4.5 windows-8.1 window-chrome

我在 Windows 8.1 上使用自己风格的 WPF 窗口存在一些问题。我用 WindowChrome 编写了一个简单的透明 WPF 窗口,用于默认窗口拖动行为:

<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 应用程序
  • 移动副屏窗口
  • 最大化辅助屏幕上的窗口(例如通过将窗口停靠在顶部)
  • 将窗口从辅助屏幕恢复并拖动到主屏幕

  • --> 当鼠标进入主屏幕时,任务栏图标将消失!

    如果您再次执行相同的复制,该图标会再次出现。

    我还尝试使用 .NET 4.5 或 .NET 4.5.1!

    谁能解释这个问题?

    谢谢!

    最佳答案

    经过一些试验和错误调试后,我发现窗口可见性设置为 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);
            }
        }
    }
    

    所以你可以试着看看我的分支

    WPF Shell Integration Library (Ex)tended Edition

    原始出处可见here

    还有here是一个小测试应用程序

    希望有帮助

    关于wpf - 在 Windows 8.1 上使用 WindowChrome 时任务栏图标消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21290917/

    相关文章:

    c# - 如何在WPF Catel Framework中控制两个以上角色的访问权限?

    c# - 是否可以在 Windows Phone 7 文本框中放置 "hints"?

    c# - Entity Framework 6 关系

    c# - "FindName"如果在代码中添加元素则不起作用

    c# - NamedPipeServerStream 和 await 关键字

    .net - RESTful 身份验证。客户端无状态身份验证

    c# - 如何将代码隐藏中的自定义对象绑定(bind)到 XAML 中的网格?

    DockPanel 中的 WPF4 TabControl/Grid 隐藏了 StatusBar

    WPF:只读说 TextBox 和绑定(bind)

    c# - 当目标是 ImageBrush.ImageSource 时,TemplateBinding 失败