Window.Show の後に Window.Owner を設定すると、タスクバーアイコンがなぜか表示されません。
Window.Owner を設定したのちに Window.Show を実行すると、タスクバーアイコンはちゃんと表示されます。
たとえば、以下のような WPF アプリケーションを作成します。
■ Main Window (アプリケーション起動時に表示される Window)
<Window x:Class="MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow"> <Window.TaskbarItemInfo> <TaskbarItemInfo ProgressState="Normal" ProgressValue="0.5" /> </Window.TaskbarItemInfo> <StackPanel> <Button Content="消えない" Click="Button_Click1" Height="100" /> <Button Content="消える!" Click="Button_Click2" Height="100" /> </StackPanel> </Window>
Class MainWindow Private Sub Button_Click1(sender As Object, e As RoutedEventArgs) ' 消えない Dim w = New Window1 w.Owner = Me ' A w.Show() ' B Me.Hide() ' C End Sub Private Sub Button_Click2(sender As Object, e As RoutedEventArgs) ' 消える Dim w = New Window1 w.Show() ' B w.Owner = Me ' A Me.Hide() ' C End Sub End Class
■ Window1 (MainWindow から呼び出す Window)
<Window x:Class="Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Window1"> <Window.TaskbarItemInfo> <TaskbarItemInfo ProgressState="Error" ProgressValue="0.8" /> </Window.TaskbarItemInfo> </Window>
このアプリケーションを起動します。
すると、タスクバーに MainWindow のアイコンが表示されます。(プログレスを50%、緑色にしています)
次に、「消えない」と表示されている方のボタンを押します。
Window1 が表示され、タスクバーに Window1 のアイコンが表示されます。(プログレスを80%、赤色にしています)
一度アプリケーションを終了させ、今度は「消える!」と表示されている方のボタンを押します。
すると、Window1 が表示されますが、タスクバーに Window1 のアイコンが表示されません。
このように、Window.Show と Window.Owner の設定順序で、タスクバーのアイコンが表示されたり、非表示となってしまったりします。
しかし、以下の手順を踏むと消えたタスクバーアイコンが再表示されます。
- 別のウインドウを選択して、このウィンドウのフォーカスを一旦外す
- 再度このウインドウを選択(タスクバーアイコンは表示されていないので、ウインドウを直接選択)して、フォーカスを取り戻す。
「なぜこのような仕様なのか」と考えましたが、もしかすると単純にバグ、あるいはしてはいけない手続きなのかもしれません。
とりあえず、Window.Owner を設定してから Window.Show を実行するようにしたいと思います。