首页 文章

C#WPF - 应用程序图标ShowInTaskbar = False

提问于
浏览
8

我创建了一个具有以下属性的自定义分层WPF窗口:

  • allowsTransparency = True

  • ShowInTaskbar = False

  • 背景=透明

  • Topmost = True

  • Icon = "Icon.ico"

我在“项目属性” - >“应用程序”选项卡下添加了Icon.ico .

如果ShowInTaskBar为false,则图标显示为默认WPF窗口图标,但如果ShowInTaskbar为true,则显示正确 .

我们希望图标能够在Alt Tab菜单中正确显示 . 我们如何实现这一点并使ShowInTaskbar = False?

1 回答

  • 4

    这里有几个问题 . 首先,当ShowInTaskbar属性设置为false时,将创建一个不可见窗口并将其指定为当前窗口的父窗口 . 在窗口之间切换时会显示此不可见窗口的图标 .

    您可以使用Interop捕获该窗口并将其设置为如下图标:

    private void Window_Loaded(object sender, RoutedEventArgs e) {
        SetParentIcon();
    }
    
    private void SetParentIcon() {
        WindowInteropHelper ih = new WindowInteropHelper(this);
        if(this.Owner == null && ih.Owner != IntPtr.Zero) { //We've found the invisible window
            System.Drawing.Icon icon = new System.Drawing.Icon("ApplicationIcon.ico");
            SendMessage(ih.Owner, 0x80 /*WM_SETICON*/, (IntPtr)1 /*ICON_LARGE*/, icon.Handle); //Change invisible window's icon
        }
    }
    
    [DllImport("user32.dll")]
    private static extern int SendMessage(IntPtr hWnd, int wMsg, IntPtr wParam, IntPtr lParam);
    

    您要考虑的其他问题是:

    • 了解ShowInTaskbar属性在运行时更改时会发生什么;

    • 从窗口而不是从文件中提取图标;

相关问题