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

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

  1. AllowsTransparency = верный
  2. ShowInTaskbar = ложь
  3. Фон = прозрачный
  4. Самый верхний = верный
  5. Значок = "Icon.ico"

Я добавил Icon.ico под вкладкой "Project Properties"-> "Application".

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

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

8
задан jonathanpeppers 1 March 2010 в 20:04
поделиться

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. Извлечь иконку из окна, а не из файла;
4
ответ дан 6 December 2019 в 00:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: