飴屋

WPF

WPF(Windows Presentation Foundation)

WPFとは、マイクロソフトの提供する新しい形のGUIへのアプローチです。リッチなコントロールはユーザを視覚的に聴覚的に魅了するだけではなく、ユーザビリティの向上にも貢献すると思います。開発者側にとっても、予め用意された.NET Frameworkの恩恵を受けられるというメリットがあります。

このWPFという枠組みを調べるうちに、以前から構想にあったシステムの構築に非常にマッチすることがわかったので、製作中の勉強の過程を以下に記録します。目指すところは、

  • WEBアプリケーション
  • 3Dインターフェイス
  • 簡単なチャット機能

といった感じです。

日記

  1. 日記1 - 開発環境
  2. 日記2 - 3D表示
  3. 日記3 - カキワリ設置
  4. 日記4 - アバタ作成
  5. 日記5 - リソース辞書
  6. 日記6 - モデルの変形・移動
  7. 日記7 - 参考資料
  8. 日記8 - アニメーションとキー操作
  9. 日記9 - コントロールとレイアウト
  10. 日記10 - 通信
  11. 日記11 - フキダシ表示
  12. 日記12 - XMLパース
  13. 日記13 - スタイル、テンプレート、バインディング

浮かんだ疑問

x:Key属性とx:Name属性ってどう使いわけるのだろうか?

x:Key属性はResourceDictionaryの中の要素を識別するユニークな文字列を指定するためのものらしいです。
x:Name属性はスコープ内で要素を識別するユニークな文字列で、オブジェクトへの参照を持っているとかなんとか。こちらはResourceDictionaryの中では使えません。

リソースディクショナリーから読み込んだ要素を、コード上で動的に追加してやった場合、コード上からその要素のプロパティを操作するのに楽な方法はないのだろうか。

XAMLは宣言型の言語なので、動的な変更についてもバインディングを使って変更するのが望ましい・・・らしい。ただし、バインディングできるプロパティは依存関係プロパティに限られるとかなんとか。Converterで値の変換も自由にできたりとすごい便利そうです。
でも、リソースディクショナリから読み込んだ要素の中の奥底に包括されていたTextBlockのTextプロパティをコード上で変更する方法について真剣に悩みました。リソースから読み込んだ要素のプロパティを動的に変更するというのがそもそもお行儀が悪いことなんでしょうか?リソースは静的であるべき?
StaticResourceとDynamicResourceは指定のリソースを初回に読み込むだけかどうかの違いとかなんとか。リソースの中身とは関係ないか。
とりあえず、変更したいオブジェクトにInitializedプロパティをつけて、初期化イベントの中でsenderを捕獲する方法を思いついたので、それでお茶を濁してます。きっともっといい方法があるに違いない・・・。

部分信頼ってなんだろう?

開発者とユーザの信頼関係は、インストールしたソフトとWEBページに埋め込まれるようなプログラムとでは、前者の方が圧倒的に高いという考え方から生まれたものと勝手に解釈しています。XBAPのようなものは信頼が薄いのでセキュリティの確保されたサンドボックスの中で実行され、一定のセキュリティポリシーから逸脱するような所作は許されないという絶妙な信頼関係のこと。
制限がきついので、所定の手続きを踏んでユーザの許可を取り付けて、完全信頼に実行環境を近づけることもできるようですが、セキュリティ関連の勉強をしっかりしないと難しいことのようです。