C# WPF - значок приложения + ShowInTaskbar = False

Я создал пользовательское многослойное окно WPF со следующими свойствами:

  1. AllowsTransparency = True
  2. ShowInTaskbar = False
  3. Фон = Прозрачный
  4. Topmost = True
  5. Icon = " Значок.ico"

Я добавил значок.ico в разделе "свойства проекта" - > вкладка "приложение".

значок отображается как значок окна WPF по умолчанию, если ShowInTaskBar имеет значение false, но отображается правильно, если ShowInTaskbar-это правда.

мы хотим, чтобы значок правильно отображался в меню Alt + Tab. Как мы можем достичь этого и иметь ShowInTaskbar = False?

1 ответов


здесь есть несколько проблем. Прежде всего, если свойству 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);

другие проблемы для вас, чтобы думать о такой:

  1. узнайте, что происходит, когда свойство ShowInTaskbar изменения во время выполнения;
  2. извлеките значок из окна, а не из файла;