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/