2010-03-01 21 views
7
aşağıdaki özelliklere sahip özel katmanlı WPF penceresini oluşturduk

:C# WPF - Uygulama Simgesi + ShowInTaskbar = False

  1. AllowsTransparency = Doğru
  2. ShowInTaskbar = False
  3. Arkaplan = Şeffaf
  4. üstteki = Gerçek
  5. Simge = "Icon.ico"

"Project Properties" -> "Application" sekmesi altında Icon.ico ekledim.

ShowInTaskBar öğesi yanlışsa, simge varsayılan WPF penceresi simgesi olarak görüntülenir, ancak ShowInTaskbar öğesi true olduğunda doğru görüntüler.

Alt + Sekme menüsünde simgenin doğru şekilde gösterilmesini istiyoruz. Bunu nasıl gerçekleştirebiliriz ve ShowInTaskbar = False?

cevap

3

Burada birkaç sorun var. Her şeyden önce, ShowInTaskbar özelliği false olarak ayarlandığında, görünmez bir pencere oluşturulur ve geçerli pencerenin bir üst öğesi olarak atanır. Pencereler arasında geçiş yaparken bu görünmez pencerenin simgesi görüntülenir.

  1. zaman ShowInTaskbar mülkiyet değişiklikleri ne öğrenin: Eğer olacağını düşünmek için

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

    başka sorunlar:

    Sen Birlikte Çalışma o pencereyi yakalamak ve bu gibi o simge de ayarlayabilirsiniz işlem esnasında;

  2. Bir simgeyi dosyadan ziyade pencerenizden ayıklayın;
+0

Bunu deneyeceğim ve sonuçlarımı size bildireceğim. – jonathanpeppers

+0

Çözümünüz işe yarıyor, ancak sonunda GC Simge'yi toplar ve çalışmayı durdurur. (İlk başta hiç çalışmadığını düşündüm) Simgeyi pencerenin bir üye değişkeni içinde saklamak ve kapatıldığında atmak zorunda kaldım. BitmapSource'u Window'un Icon özelliğinden almanın ve bir HICON almanın çeşitli yollarını denedim, ama şans yok. Aksi halde çalışan bir örnek. – jonathanpeppers