WPF のウィンドウ(その1)の続きです。
Window の表示
Window を表示するには Form と同じく Show メソッドか ShowDialog メソッドを使用します。どちらのメソッドも、引数でオーナーを指定することができなくなりました。オーナーを指定するには Owner プロパティを設定する必要があります。
ShowDialog メソッドで Owner を設定する場合としない場合で少し動作が異なります。Owner を設定すると、オーナーウィンドウが操作できなくなります。Owner を設定しないとアプリケーション内の全てのウィンドウが操作できなくなります。
ShowDialog メソッドの戻り値が Nullable(Of Boolean) 型になっています。そのためダイアログを閉じるには DialogResult プロパティに Nullable(Of Boolean) 型で設定することになります。なぜ Boolean ではなく Nullable(Of Boolean) なのかというと、ダイアログの閉じるボタンから閉じた場合や、Close メソッドから閉じた場合など、DialogResult を設定していないことを明確にするためです。そのときは DialogResult は Null になっています。
Window には ShowActivated プロパティというのがあります。これは Window をアクティブ状態で表示するかどうかを決めることができます。
Window の透明化
Window には Opacity プロパティがありますが、Form のようにウィンドウ全体が透明になるのではなくなりました。クライアント領域の不透明度というような感じす。透明といっても透けるわけではなく Opacity の値を 0 に近づけていくと黒くなっていきます。
その代わり、レイヤードウィンドウを簡単に設定できるようになりました。Window をレイヤードウィンドウにするには、次のようにするだけです。
Private Class Window1
Private Sub Window1_Initialized(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Initialized
Me.AllowsTransparency = True
Me.WindowStyle = Windows.WindowStyle.None
Me.Background = Brushes.Transparent
End Sub
End Class
WPF のレイヤードウィンドウのすごいところは、コントロールがそのまま表示されるということです。次の画像は、背景にビット単位に透明度の違う緑色の丸い画像とボタンとテキストボックスを配置したレイヤードウィンドウの例です。背景に XAML が透けて見えています。
まとめ
- ShowDialog の戻り値には Nullable(Of Boolean) 型を設定する。
- ShowActivated プロパティでアクティブ状態で表示するか制御できる。
- Window をレイヤードウィンドウにするには AllowsTransparency, WindowStyle, Background プロパティを設定するだけ。
レイヤードウィンドウが簡単に設定できるようになったのが、なによりうれしいです。コントロールもそのまま表示されて願ったり叶ったりです。こんなことができるもの Window 内のコントロールが全て描画されているだけだから何ですよね。