APR
23

XBAP on Lunascape Sidebar

Published:2008-04-23 23:07:41 UTC
WPF

先日購入したVisual Studio 2008、そのまま放置しておくのも余りにもったいないので、とりあえず.NET Framework3.0の目玉機能の一つである、WPFを活用したプログラムを習作として作ってみることにした。とはいえ、とりたてて作りたいスタンドアロンアプリケーションがあるわけでもなく、やはりいつものように、アドオン開発をすることにした。ターゲットはLunascape。

Lunascapeのサイドバー(というよりはDockだが)用アドオンを開発するには、

  • スクリプトサイドバープラグインフレームワークを利用してJavaScript+XSLTで開発
  • C++でゴリゴリ開発

という二通りのアプローチが存在する。前者に必要な知識はWebページ制作技術の延長上にあるのに対し、後者はC++によるWindowsプログラミングの知識が必要になり、難易度も高い。
前にLunascapeプラグインコンテストに出品した作品では、JavaScript+XSLTを使用して開発したのだが、やはりC++でつくられたアドオンに対して表現力、実行速度の面で圧倒的に不利であり、当時からC#でアドオンを開発できればなぁと考えていた。

そこで今回は、かなりトリッキーな方法ではあるが、JavaScript+XSLTでプラグインとしてのベースを作成し、その上にXBAP(WPFアプリをブラウザ上でホストする方法。SilverLightとはまた別)でプラグインとしての機能を実装することにした。

XBAPの作成

image2 image3

新しい技術を試す際は、やはりHello Worldプログラムを作成してみなければ!ということで、早速作ってみる。「WPFブラウザアプリケーション」という項目を選択して新しいプロジェクトを作成し、とりあえず適当にTextBlockを並べた上で、そのイベントで、

private void textBlock1_MouseDown(object sender, MouseButtonEventArgs e) {
        FileInfo info = new FileInfo("C:\\Users\\shiroica\\Desktop\\ConfoundApriFoolsDay.user.js");
        MessageBox.Show(info.LastAccessTime.ToString());
}

ローカル上のファイルの最終アクセス日時を表示するよう設定。これはセキュリティ機構がどのように働くかをチェックするため。

で、実際にビルドしてみてイベントを発動させてみると、しっかりセキュリティ関係の実行時エラー。WBAPは部分信頼で実行されるらしいから、やはり無理かとも思ったが、プロジェクトのプロパティから完全信頼に設定することで、エラー無しで走らせることができるようになった。

がしかし・・・

LunascapeのサイドバーのなかにうまくXBAPがホストできない><。なんでー?

このprojectはまた今度・・・。

追記

サイドバーの中はインターネットゾーン扱いの筈だから、それで完全信頼を必要とするXBAPが動かなかった気がしてきた。