[Silverlight] Tips : 境界線なしの Out of Browser アプリケーションを終了する方法

Silverlight の Out of Browser についての Tips をいくつか書いてます(時間かかりすぎだが・・・)。


前回 の続きとして、Silverlight の境界線なし Out of Browser アプリを終了する方法です。
紹介しますと言って、メチャメチャ簡単なんですが。
コードは2行です。

境界線なしの OOB アプリを終了する方法を用意しなければならないのは、実行中のアプリの画面を見ればすぐわかります。

image

タイトルバーがないために [閉じる] ボタンもありません。これじゃアプリを終われません。


結論から言うと、MainWindow を Close するだけです。
ただし In Browser でこれを実行しても意味がないので、IsRunningOutOfBrowser の確認をします。
これだけです。

例えば、Button の Click イベントハンドラであればこうなります。

private void CloseButton_Click(object sender, RoutedEventArgs e) { if (Application.Current.IsRunningOutOfBrowser) Application.Current.MainWindow.Close(); }

 


一応、 前の投稿 の「見た目がわかりやすいアプリ」にボタンを一つ追加してみます。

せっかくの Silverlight アプリですから、当然本来であればもっと見栄えのするボタンを貼るべきでしょうが、とりあえず地味な Button だと、こんな風にするのはどうでしょう。

image

念のため、ソースコード(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" />
        <Button Name="CloseButton" Content="×" Width="33" Height="30" Margin="0,12,8,0" HorizontalAlignment="Right" VerticalAlignment="Top"
                FontSize="16" Click="CloseButton_Click" />
    </Grid>
</UserControl>

境界線なしの Out of Browser アプリでも、ウィンドウ移動もアプリ終了も非常に簡単です。

これで見栄えのするアプリケーションが作り放題です(そこの紹介はできません、あしからず)。

[Silverlight] Tips : 境界線なしの Out of Browser アプリケーションでウィンドウ移動する方法

Out of Browser 昇格時のウィンドウスタイル について前のブログで紹介しました。

境界線なしのウィンドウスタイルにすると、アプリケーションのウィンドウ全体でデザインを考えることができると思います。
が、一つ(二つ?)だけちょっとした落とし穴があります。

そのままでは、ウィンドウを移動する手段がないことと、アプリケーションを終了する手段がないことです。
タイトルバーがないんだから当然です。
まずは、ウィンドウを移動する方法を紹介します。と言ってもすごく簡単、定型的。


なにはともあれ、ユーザーがウィンドウを移動するためにドラッグする領域が必要ですね。
UserControl 全体でももちろん制限なく実現できますが、今回はとってもわかりやすく UserControl の上部にそれらしい領域を付けましょうか。

image

こんな感じ。わかりやすすぎ(笑)。

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 なアプリケーションを終了する方法です。

[Silverlight] Tips : Out of Browser 昇格時のウィンドウスタイル

すっかり間が空いてしまってますが、Silverlight の Tips (本当に Tips レベル !!)を、自分のための覚え書きの意味を含めてポツポツと整理しようと思っています。
(が、なかなか手がつかない・・・)
スタートの方向性としては若干間違っている気もしますが、Out of Browser 周りから進めてみます。

に続いて、Out of Browser で権限昇格時に指定可能なウィンドウスタイルについて。


 

昇格した Out of Browser では3通りのウィンドウスタイルから選択できます。

デフォルトでは標準的な、タイトルバーと境界線を持ったスタイルになりますが、せっかくブラウザの外に出たんだし、フレームまで含めてちょっと見た目のことも考えてみたいということもあるでしょう。

ウィンドウスタイルとしては3通りから選択して指定できます。それぞれ以下のような違いがあります(比較しやすいようにクライアント領域の背景色を変えてあります)。

image タイトルバーと境界線を表示する(標準的なウィンドウスタイル)
image タイトルバーと境界線を表示しない
image さらに、ウィンドウの四隅を丸くする

 

境界線なしの2つの違いがちょっとわかりにくいかもしれないので、ウィンドウの角を拡大表示するとこんな感じ。

image 境界線なしだけ
image 四隅を丸くしたもの

 


これらの指定はプロジェクトのプロパティで選択できます。

image

[Silverlight] タブの [アプリケーションのブラウザー外実行を有効にする] をチェックします。
さらに [ブラウザ外実行の設定] ボタンで詳細設定のダイアログボックスを開きます。

SNAGHTMLab207e

デフォルト以外のスタイルに変更するには、[ブラウザー外での実行時に昇格された信頼を要求する] チェックする必要があります。これをチェックすることでウィンドウスタイルは3通りから指定できます。

 


これらの指定は、OutOfBrowserSettings.xml に保存されます。

SNAGHTMLb0600d

WindowsSettings 要素の中に WindowStyle 属性があります。
(当然、テキストエディタで直接編集することも可能だということです)

属性値はそれぞれ以下の値です。

SingleBorderWindow タイトルバーと境界線を表示する
None タイトルバーと境界線を表示しない
BorderlessRoundCornersWindow タイトルバーと境界線を表示せず、ウィンドウの隅の角を丸める

 


タイトルバーと境界線を非表示にすることで、アプリケーション全体でトータルに画面のデザインをすることができます。今どきのアプリケーションでは考慮する価値のあるものなので、(要求や工数によりますが)

積極的に利用を検討してみてもいいと思います。

・・・が、タイトルバー非表示にすると考慮点が増えるので注意。
ウィンドウの移動とアプリケーションの終了が、そのままではできなくなります。(そりゃそうだ、タイトルバーがないんだから)

ということで、次回はタイトルバーなしの Out of Browser アプリケーションでウィンドウの移動と終了に対応する Tips を紹介します。

[Silverlight] Tips : Out of Browser 実行を有効にする方法

Out of Browser の Tips シリーズです。

前の投稿で 「そもそも In Browser か Out of Browser かが判別できないとお話にならない」 と書きました。
が、そもそもで言うと、もしかして Out of Browser 実行を有効にする方法自体を説明する必要があるのかも、と思い立ち、順番としては逆になりますが、書いておきます。
(それとも、これを知らずに Out of Browser しようとするっていうのは、さすがにないのかな・・・)


Silverlight プロジェクトのプロパティーを開くと、最初のタブは [Silverlight] になっているはず。
その中に [アプリケーションのブラウザー外実行を有効にする] というチェックボックスがあるので、これをチェックします。
これで、Out of Browser 実行できるようになります。

SNAGHTML1f2220

これでプロジェクト内に “OutOfBrowserSettings.xml” という設定ファイルができます。この内容がビルド時に “AppManifest.xaml” に埋め込まれて、アプリケーションの実際の実行時に Out of Browser の挙動が決まります。

SNAGHTML279369


“OutOfBrowserSettings.xml” にはあらかじめデフォルト値が埋め込まれていますが、プロジェクトのプロパティーの [ブラウザー外実行の設定] ボタンで、アプリケーションのタイトルや、サイズ・位置、アイコンなどの指定ができます。
(もちろん、OutOfBrowserSettings.xml を直接編集してもいいですが)

SNAGHTML237d88

 

ダイアログボックスの中では Trusted Permission の指定やウィンドウスタイルの選択も可能なんですが、これらについてはまた改めて。

[Silverlight] Tips : In Browser か Out of Browser かの判別

覚え書きを兼ねて、Silverlight の Out of Browser についてのTips をいくつか投稿しようと思います。


そもそも 「In Browser か Out of Browser か」 が判別できないとお話にならないので、そこからスタートします。
能書きはあとにして、まずはコードから。

if (Application.Current.IsRunningOutOfBrowser)
    textBlock1.Text = "Out of Browser";
else
    textBlock1.Text = "In Browser";

判別は非常に簡単で、IsRunningOutOfBrowser プロパティを見るだけ。文字通り、true ならば Out of Browser、false ならば In Browser です。

上のコードは、MainPage.xaml の Grid に TextBlock を配置しておき、ここに現在の実行状態を表示するという簡単なものです。実際の結果は以下の通り。

InBrowser Oob

In Browser での実行

Out of Browser での実行 


さて、なぜ Out of Browser の判別が必要なのか、について。

Out of Browser でのみ利用可能な高度な機能を使うため、使えるかの確認が必要なため、ということが多いのではないでしょうか。(Silverlight 4 の Out of Browser サポートの詳細は MSDN ライブラリーの こちらのページ を参照)

  • Windows API を使いたい
  • Silverlight アプリを DropTarget にしたい

Out of Browser の中でも、Elevated Permission (権限の昇格) によって利用可能になる機能もありますね。

  • ローカルファイルシステムの利用
  • 分離ストレージの容量を増やしたい(最大 25MB)
  • クロスサイト通信
  • COM オートメーションの利用

逆に、In Browser で HTML / JavaScript との連携をしたい場合は IsRunningOutOfBrowser == false を見ることになります。

上記に当てはまる場合には、IsRunningOutOfBrowser プロパティーを利用します。

フォロー

Get every new post delivered to your Inbox.

現在513人フォロワーがいます。