WPFTips

いろいろ参考になったTipsやサンプルなどをご紹介します。

[プログラミング][WPF][.NET] WindowクラスとNavigationWindowクラス

WindowクラスはいわゆるベーシックなWindowのクラスです。
それに対して、NavigationWindowクラスというのは、いわゆるブラウザにみられるようなBack,Fowardナビゲーションボタンのついているウィンドウのクラスです。

普通のWindowクラスでも自分でナビゲーションボタンを実装すれば同じことになるのですが、基本的にビルトインでページ履歴管理などがなされる点が違うようです。

NavigationWindowクラスを導入することにより、

  • PageをGUIの基本設計単位とすることができる。
  • NavigationWindowクラスはPageのコンテナとしてふるまう。

という仕組みが簡単に実現できるようになっています。

言い換えると、ウェブアプリケーションの設計手法をクライアントアプリケーションに簡単に導入・応用できるようになります。

実際にNavigationWindowクラスをVisual Studio2008上で作るには、怪しいですが、下記のような手順でなんとか動きます。

  1. とりあえず、プロジェクトにWPFウィンドウを追加する。
  2. Window1.xaml、Window1.xaml.csを編集して、
    1. System.Window.Navigation名前空間を追加する。
    2. クラスをWindow→NavigationWindowに書き換える。
  3. bin\Debug\Window.g.csというファイルが自動生成されているので、そちらのクラス名も書き換える。

[プログラミング][WPF][.NET] WPFでスプラッシュウィンドウを表示するには?

WPF Splash Screen ?

基本的な議論としては、

  • StartupURIにスプラッシュウィンドウのxamlファイルを指定する。
  • MainWindowにはコンテナとしてNavigationWindowを指定し、そのコンテンツとしてMainPage.xamlを指定してやる。

という流れになります。

<Application 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    StartupUri="StartupWindow.xaml"
    >
  <Application.MainWindow>
    <NavigationWindow Source="MainPage.xaml" Visibility="Visible"></NavigationWindow>
  </Application.MainWindow>
</Application>

ただ、NavigationWindowじゃなくて、独自Windowを表示したい!と強くこだわる場合には下記のようにするようです。

  • 独自WindowであるMainWindowが参照できるように名前空間エイリアスを定義する。
  • メインウィンドウのクラスは下記のようにしてアクセスしてやる。

ということのようですが、これはアプリケーションクラスと同一の名前空間アセンブリに存在しないとうまくいかないようです。

<Application 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x=http://schemas.microsoft.com/winfx/2006/xaml
    xmlns:local="clr-namespace:WPFSandbox"
    StartupUri="StartupWindow.xaml"
    >
  <Application.MainWindow>    
	<local:MainWindow Visibility="Visible"/>
  </Application.MainWindow>
</Application> 

[プログラミング][WPF][.NET] WPFでMDIアプリケーションを作るには?

まず、売り物であるこちらを利用するという手があるようです。

http://www.divelements.co.uk/net/controls/sanddockwpf/

そこまでの金はないっ!という場合には、擬似的にMDIと同じようなナビゲーションを提供して、それを回避するというアイディアとその実装です。

WPF+VB.Netですが、結構Cool!だと思いました。

http://karlshifflett.wordpress.com/2008/04/10/wpf-sample-series-wpf-mdi-task-switching/

Microsoft SDKのインストール

WPFを利用するには、対応したMicrosoft Windows SDKのインストールが必要です。

ちなみに、

.NET 3.0に対応するのは、

Microsoft Windows SDK Update for Windows Vista

.NET 3.5に対応するのは、

Microsoft Windows SDK for Windows Server 2008 and .NET Framework 3.5

となります。

基本的に後者だけインストールすれば十分なようです。

WPF+XAML入門

まず、Visual Studio 2008上でのWPF開発についての情報を全然持っていなかったので、入門記事をいろいろ読んでみました。

わかりやすかったのは、下記のリンクです。

書籍紹介(ちょっと古いかも)

手持ちの本で関連するものをご紹介します。
良著です。でも、今となってはちょっと情報が古いかも。

XAMLプログラミング WPFアプリケーションの概要と開発

XAMLプログラミング WPFアプリケーションの概要と開発

こちらと併せて読まれると、テキストエディタでちまちま作るには十分かと思われます。
こちらも良著です。
IronPythonのバージョンが2.0βになったので、エンジン周りの実装はこの書籍の内容と少し異なります。

IronPythonの世界 (Windows Script Programming)

IronPythonの世界 (Windows Script Programming)

WPFあれこれ

いやぁ、ブログの更新というのはちょっと怠るとものすごく間があいてしまうもんですね。
反省です。

Visual Studio 2008に移行して、もうすこし面白いことができないか?
ということで、以前から興味のあったWPFについていろいろ調べてみました。

Groove 2007

おぼろげな記憶ですが、GrooveはLotus Notesの設計者がLotusをスピンアウトして、スクラッチから作り直したP2Pの情報共有・コラボレーション環境だったと記憶しています。

それが、なんの因果か、Microsoftに買収されて、Officeにパッケージングされるという、皮肉な印象を感じたのは私だけでしょうか?

GrooveはNotesの良いところ、悪いところを踏まえて設計されたとても良いソフトだと思います。

Notesを使っていると、

  • にたようなNotes DBが爆発的に増加するわりには、その整理・統合が難しい。
  • 他の環境に移行しにくい。
  • クライアント側よりサーバー側に極端に負荷が集中する。

といったことを問題点として感じます。

GrooveはP2P技術を使って、ワークスペースを分散する複数ユーザーで共有するシステムです。
そのワークスペースには、

  • Infopathフォーム
  • Sharepointファイル
  • スケッチパッド
  • ディスカッション
  • ファイル共有
  • フォーム
  • メモ帳
  • 案件管理
  • 画像
  • 会議
  • 予定表

などを自由に追加することができ、それらの内容を、ある意味「ルーズ」に同期します。

これは、MicrosoftActive Directoryを中心としたアクセスコントロールを利用していると、部門や組織を横断的にプロジェクトの情報を共有するのにどうしたらいいのか?と困ることがあります。(誰がサーバーをたてるのか?どんなアプリケーションを利用するのか?などなど。)

このGrooveのようなソフトは、情報統制したいという会社の流れとはマッチしないかもしれませんが、「組織を超えて活動したい人」にはうってつけのソフトだと思います。

Grooveは基本的にはネットワーク透過で、デフォルトでMicrosoftホスティングするサーバーを中継して同期を試みるので、誰かがサーバーをたてたりする必要がありません。

ちなみに、私は自分の使っている複数のマシンのファイルや情報共有に利用しています。

同期のタイミングなどは厳格ではありませんが、「まあ、なんとなく」つかえています。

これまでのMicrosoftのソフトにありがちだったのは、「MS製品しか使えない」という制約ですが、freemindのファイルなども今のところ問題なく共有できています。

今後に期待することとしては、

  • もう少しパフォーマンスが向上すること。
  • 逆にOutlookOneNoteなどのMS製品との親和性を高めてほしい。
  • バージョン管理機能とかつけてほしい。

というあたりでしょうか。

OneNote Mobile 2007

どこが変わったのか、あまりよくわからないのですが、

使い方が判りやすくなった

少なくとも今までは、どうやって使うのか?使い込む労力に見合う対価が得られるのか?というところがよくわからなかった部分がありました。

今回は、豊富なテンプレートや例題がついていることによって、「どうやって使ったらよいのか?」という具体例が判りやすくなり、「モノマネ」から入ることで、十分使いこなせるようになったように感じます。

ノートブックの共有

まさに名前のとおり、"One"ノートで済ませることができるようになります。
以前もあったのかもしれませんが、

  1. OneNote Mobileの内容はActive Syncで取り込まれて「落書きノート」の中に放り込まれる。
  2. "ミニノート"でとった内容も同様に「落書きノート」の中に放り込まれる。

という感じになっていて、わりと使いやすいです。

今までは、どういう感じでノートの同期をとっていいのかわからなかったのですが、

  • SharePointを使った共有
  • 共有フォルダを使った共有
  • Grooveを使った共有(後述)

ができるようになり、便利になりました。

ファイルのD&D

ファイルをD&Dで、

  1. リンクの挿入
  2. ファイルの添付
  3. ファイルの添付とファイルの印刷イメージの挿入

という動作ができるようになったのですが、この「ファイルの添付とファイルの印刷イメージの挿入」というのが非常に良いです。

今まで、論文やらドキュメントやらの整理に苦労していたのですが、説明的なファイル名をつけるか、ファイルを開かないと中身がわからなかったようなものでも、印刷可能なファイルであれば、その中身をそっくりそのままOneNoteのページに挿入することができるようになりました。

そこにいろいろメモ書きなんかを残すこともできるのでなかなか良いです。

Outlookとの連携

Outlookツールバーが挿入できるようになり、その場でTODOとして挿入したりできるようになりました。

管理する情報の階層の柔軟さ

OneNoteが管理する情報の単位としては、

  • ノートブック
  • セクショングループ
  • セクション
  • ページ
  • サブページ

となっており、それらを組み合わせることにより情報のネストする階層がかなり深くできるにもかかわらず、操作性が非常に良いという点です。

昔は富士ゼロックスの情報箱というソフトを使っていましたが、いろいろ細かい点でかゆいところに手が届かない面がありました。
あのソフトは本当に秀逸だったと思うので、富士ゼロックスが開発をやめてしまったのは非常に残念です。

OneNote 2007は、情報箱を超える能力があるように思いました。

今後、期待する機能としては、

  • Wikiとしても動作してほしい。
  • Semanticな機能を追加してほしい。
  • 情報にアクセスするためのナビゲーションビューとして、他の種類のビューなども追加してほしい。

というあたりでしょうか。

#確かに「紙」のすごさというのはありますが、「紙」のエミュレーションでとどまらないでほしいです。