這裏有幾個問題。首先,當ShowInTaskbar屬性設置爲false時,會創建一個不可見窗口並將其指定爲當前窗口的父窗口。在窗口之間切換時會顯示該不可見窗口的圖標。
你能趕上該窗口與互操作,並設置它的圖標是這樣的:
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);
的其他問題,你想想會是:
- 瞭解發生了什麼時,ShowInTaskBar屬性變化在運行時;
- 從窗口中提取圖標而不是從文件中提取圖標;
我會試試這個,讓你知道我的結果。 – jonathanpeppers 2010-03-03 03:23:58
您的解決方案有效,但最終GC收集圖標並停止工作。 (起初我認爲它根本不起作用)我必須將Icon存儲在窗口的成員變量中,並在關閉時處理。我嘗試了各種方法從Window的Icon屬性中獲取BitmapSource並獲取HICON,但沒有運氣。否則就是一個工作示例。 – jonathanpeppers 2010-03-03 15:04:38