2010-03-01 15 views
7

I utworzeniu niestandardowego warstwowej okno WPF z następującymi właściwościami:C# WPF - Zastosowanie Ikona + ShowInTaskbar = False

  1. AllowsTransparency = True
  2. ShowInTaskbar = False
  3. tła = Transparent
  4. Najwyższy = Prawda
  5. Ikona = "Icon.ico"

Dodałem Icon.ico w zakładce "Właściwości projektu" -> "Aplikacja".

Ikona wyświetla się jako domyślna ikona okna WPF, jeśli ShowInTaskBar ma wartość false, ale wyświetla się poprawnie, jeśli ShowInTaskbar ma wartość true.

Chcemy, aby ikona pojawiała się prawidłowo w menu Alt + Tab. Jak możemy to osiągnąć i mamy ShowInTaskbar = Fałsz?

Odpowiedz

3

Jest tu kilka problemów. Po pierwsze, gdy właściwość ShowInTaskbar jest ustawiona na false, zostanie utworzone niewidzialne okno i przypisane jako rodzic bieżącego okna. Ta niewidoczna ikona okna jest wyświetlana podczas przełączania między oknami.

Można złapać to okno z Interop i ustawić ją za ikonę tak:

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); 

inne problemy, aby myśleć o to:

  1. dowiedzieć się, co się dzieje, gdy zmiany własności ShowInTaskbar W czasie wykonywania;
  2. Wyodrębnij ikonę z okna zamiast z pliku;
+0

Spróbuję tego i poinformuję o moich wynikach. – jonathanpeppers

+0

Twoje rozwiązanie działa, ale ostatecznie GC zbiera ikonę i przestaje działać. (Początkowo myślałem, że to w ogóle nie działa) Musiałem przechowywać Ikonę w zmiennej członkowskiej okna i wyrzucać po zamknięciu. Próbowałem różnych sposobów, aby wziąć BitmapSource z właściwości okna ikony i uzyskać HICON, ale bez powodzenia. Czy działający przykład jest inny. – jonathanpeppers