Я создал пользовательское многоуровневое окно WPF со следующими свойствами:
Я добавил Icon.ico под вкладкой "Project Properties"-> "Application".
Значок отображается как значок окна WPF по умолчанию, если ShowInTaskBar является ложью, но отображается правильно, если ShowInTaskbar верен.
Мы хотим, чтобы значок обнаружился правильно в меню Alt+Tab. Как мы можем достигнуть этого и иметь ShowInTaskbar = Ложь?
Здесь есть несколько проблем. Во-первых, когда свойство 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);
Другие проблемы, над которыми вам стоит подумать: