[VB.NET][WPF] タスクバーのアイコンが消えたり消えなかったり

2013年12月27日

 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 の設定順序で、タスクバーのアイコンが表示されたり、非表示となってしまったりします。

 しかし、以下の手順を踏むと消えたタスクバーアイコンが再表示されます。

  1. 別のウインドウを選択して、このウィンドウのフォーカスを一旦外す
  2. 再度このウインドウを選択(タスクバーアイコンは表示されていないので、ウインドウを直接選択)して、フォーカスを取り戻す。

 「なぜこのような仕様なのか」と考えましたが、もしかすると単純にバグ、あるいはしてはいけない手続きなのかもしれません。
 とりあえず、Window.Owner を設定してから Window.Show を実行するようにしたいと思います。






カテゴリー: Program, VB.NET, WPF

Follow comments via the RSS Feed | Leave a comment | Trackback URL

コメントを投稿する

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


«   »
 
Powered by Wordpress and MySQL. Theme by Shlomi Noach, openark.org