加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

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

发布时间:2020-12-14 04:07:48 所属栏目:Windows 来源:网络整理
导读:我在 Windows 8.1上使用自己的样式WPF窗口时遇到了一些问题.我用WindowChrome编写了一个简单的透明WPF窗口,用于默认的窗口拖动行为: Window x:Class="WpfApplication1.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x
我在 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应用程序
>在辅助屏幕上移动窗口
>最大化辅助屏幕上的窗口(例如,将窗口对接在顶部)
>恢复窗口并将其从辅助屏幕拖动到主屏幕

– >当鼠标进入主屏幕时,任务栏图标将完全消失!

如果再次执行相同的repro,则会再次出现图标.

我也尝试使用.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也是一个小测试应用程序

希望有所帮助

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读