ここにはいくつかの問題があります。まず、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);
あなたが考える他の問題は次のとおりです。
- ShowInTaskbarプロパティが実行時に変更されたときに何が起こるかを調べます。
- ファイルからではなく、ウィンドウからアイコンを抽出します。