Out of Browser 昇格時のウィンドウスタイル について前のブログで紹介しました。
境界線なしのウィンドウスタイルにすると、アプリケーションのウィンドウ全体でデザインを考えることができると思います。
が、一つ(二つ?)だけちょっとした落とし穴があります。
そのままでは、ウィンドウを移動する手段がないことと、アプリケーションを終了する手段がないことです。
タイトルバーがないんだから当然です。
まずは、ウィンドウを移動する方法を紹介します。と言ってもすごく簡単、定型的。
なにはともあれ、ユーザーがウィンドウを移動するためにドラッグする領域が必要ですね。
UserControl 全体でももちろん制限なく実現できますが、今回はとってもわかりやすく UserControl の上部にそれらしい領域を付けましょうか。

こんな感じ。わかりやすすぎ(笑)。
XAML だと、
<UserControl x:Class="OobWinStyle.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="400">
<Grid x:Name="LayoutRoot" Background="Wheat">
<Rectangle Name="DragArea" Width="400" Height="51" Stroke="Black" StrokeThickness="1" HorizontalAlignment="Left" VerticalAlignment="Top"
Fill="MidnightBlue" MouseLeftButtonDown="DragArea_MouseLeftButtonDown" />
</Grid>
</UserControl>
大体こうなります。もちろん、色やサイズはお好みで。名前もコードとの対応が自分でわかるようならご自由に。
ここでポイントになるのは、ドラッグするための領域とする要素 (今回の場合は Rectangle) のMouseLeftButtonDown イベントハンドラを用意することです。
「あれっ?MouseMove とか MouseLeftButtonUp はいらないの?」と思うかもしれませんが、はい、いりません。
では肝心の MouseLeftButtonDown イベントハンドラの中身はどうなるかというと、以下の通り。
private void DragArea_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
if (Application.Current.IsRunningOutOfBrowser)
Application.Current.MainWindow.DragMove();
}
「MainWindow の DragMove を始めます」というだけなんですね、簡単、簡単。
もう一つ注意が必要なのは、当然、ブラウザ内実行では、この領域のドラッグで移動するわけではないので、Application.Current.IsRunningOutOfBrowser プロパティの値を確認すること。
これをブラウザ外で実行してみてください。ちゃんとウィンドウ移動できるはずです。
次回の Tips は(もしかするとウィンドウ移動よりももっと大事な) 境界線なし Out of Browser なアプリケーションを終了する方法です。