連載:〜ScottGu氏のブログより〜WPF 4(VS 2010&.NET 4シリーズ)Scott Guthrie 著/Chica 訳2009/11/11 |
|
|
[ブログに加え、最近はTwitterを使用して簡単な投稿やリンクをシェアしています。twitter.com/scottguにて、わたしをTwitterでフォローできます(@scottguがわたしのTwitter名です)]
これは、VS 2010および.NET 4リリースに向けたブログ投稿シリーズの第11弾です。今回の投稿では、WPF 4をカバーします。
WPF 4の改善点
WPF(Windows Presentation Foundation)は、.NET Frameworkのコア・コンポーネントの1つで、開発者はリッチで差別化が可能なWindowsクライアント・アプリケーションを構築ができます。WPF 4では、特にコントロール、XAML、テキスト、グラフィック、Windows 7との統合(マルチタッチ、タスク・バー統合など)、コア部分の基本要素、デプロイメントに関して、生産性、パフォーマンス、機能の面で大きな改善が行われています。今回は、今後数カ月で予定している、改善点や新機能についての最初の投稿になります。
別の投稿では、VS 2010のWPFおよびSilverlightデザイナでの主要な進化について、いくつかカバーする予定です。そこには山ほどの改善点も含まれています。
コントロール
図1 |
■リッチなクライアント構築のためのコントロール
WPF 4ではさまざまな新コントロールが追加され、それにより、顧客に対してリッチな業務アプリケーションを簡単に素早く構築できます。この新しくよりリッチなコントロール一式には、DataGrid、DatePicker、Calendarなどの業務アプリの要素が含まれています。これらの新しいコントロールは、99%のAPIで、Silverlightでの同じものと動作的に互換があり、開発者はSilverlightとWPFの両方の実装でコードを再利用することによりワークフローを最適化でき、かつクライアントとWeb間で統一された操作を作り出せます。
■Bag O'Tricksが戻ってきました
WPF Bag O' Tricksと呼ばれる8つのクライアントの帯域外(out-of-band)コレクションのダウンロードもリリースしました。これには次のものが含まれます。
AnimatingTilePanel、ColorPicker、InfoTextBox、ListPager、NumericUpDown、Reveal、TransitionsPresenter、TreeMapPanel
■Windows 7 & Officeリボン・コントロール
新しいWPFリボン・コントロールは、WPF 4のリリース後、すぐにダウンロード可能になります。Windows 7やOfficeのスキンに加え、エンドユーザーに親しみのあるタブおよびグループ、動的リサイズ、クイック・アクセス・ツールバー、アプリケーション・メニュー、コンテキスト・タブ、キー・チップなどのすべての標準リボン機能が特徴です。
図2 |
WPFのリボンは、今後のリリースでのガイドラインの変化に対応するため、完全に拡張性のあるものになる予定です。機能限定セットのCTPは、ここから入手できるようになりました。
グラフィックス
図3 |
■キャッシュ・コンポジション(Cached Composition)
WPF 4の新しいキャッシュ・コンポジション機能により、大きなパフォーマンス改善が可能になります。これにより、アプリケーションでは、ライブかつ完全にインタラクティブ可能なコントロールや、ベクトル・ジオメトリなどの任意のコンテンツを、ビデオメモリ上のビットマップとしてキャッシュできるようになります。一度キャッシュされると、キャッシュされた要素を再度描画することなく、それらの要素を任意に変形させたり、アニメーション化させたり、操作したりでき、またエフェクトを適用することもできます。
これはCPUとGPUの両方でその再描画コンテンツのコストを分けないで、GPUがキャッシュから直接描画できるようにしています。キャッシュはダーティな部分を理解しているので、例えば、キャッシュされたテキスト・ブロック内で点滅しているカーソルについては、複数フレーム間で、そのカーソルを再描画するだけでよいということになります。さらに、このインテリジェントなキャッシュを特に使用する、非常に大きくパフォーマンスが改善された効率的なVisualBrushという新しいブラシもあります。
■Pixel Shader 3のサポート
WPF 4は、WPF3.5 SP1で最初に導入された、非常に人気のあるShaderEffectサポート上に構築されており、これはPixel Shaderバージョン3.0を使用してアプリケーションでエフェクトをかけることができます。このPS 3.0のシェーダ・モデルはPS 2.0と比較すると劇的に洗練されており、それをサポートしているハードウェア上ではさらに、賞賛せずにはいられないほどのエフェクトが可能になっています。
■LayoutRounding
WPF 4 では、もともとSilverlight 2で導入されたUseLayoutRoundingプロパティを採用しています。WPFのレイアウト・エンジンは、頻繁にサブピクセルの座標位置を計算します。これにより、サブピクセルの境界線上に位置する要素が複数の物理的なピクセルにわたってアンチエイリアス化されるため、描画誤差が生まれます。
UseLayoutRoundingはレイアウト・エンジンが要素をピクセル境界上に配置するように強制するため、この問題で起こるほとんどの描画誤差が取り除かれ、デフォルトで、クリーンではっきりとしたUIが生成されるようになります。
■アニメーションのイージング関数(Easing Function)
図4 |
Discrete、Linear、Splineアニメーションは、以前のWPFバージョンでもサポートされていました。WPF 4では、イージング関数の新しい概念を導入しており、アプリケーションの作成者はアニメーションを使用して流ちょうな動きを作成できるようになりました。これはさまざまな方法で使用できます。例えば、バネのような動きを作成したり、アニメーションにアンティシペーション(先取り)を加えたり、などです。イージング関数は、アニメーションの開始から終了までの流れの中で、その動作をカスタマイズできます。ビルトインのイージング関数は、例えば、アニメーションの循環的、急増的、伸縮的、弾力的な動きを提供しています。拡張性のある設計により、アプリケーション作者は独自のイージング関数を作成し、アニメーションの進行の方法を定義できます。この機能は簡単に利用できるので、デザイナーは難なく流動的でまとまりのあるアニメーションを作成できます。
■CleartypeHint
新しいCleartypeHint添付プロパティにより、アプリケーション作者は以前なら無効にしなければならなかった多くの場面で、高品質なClearTypeのテキスト描画を有効にできます。例えば、レイヤ化されたウィンドウ内のテキストや、VisualBrushes、DrawingBrushes、BitmapCacheBrushes内のテキスト、そのほか、中間レンダー・ターゲット(Intermediate Render Target)により、以前はグレースケールのテキスト描画になってしまっていたような状況です。
テキスト・スタック
■新しいテキスト描画スタック
WPFのテキスト描画スタックは完全に置き換えられました。この変更により、テキスト描画の明りょうさや、設定の幅、および各国の言語サポートが大幅に改善されました。新しいテキスト・スタックは現在、表示に最適化されたテキスト・レイアウトをサポートし、Win32/GDIテキストに匹敵する鮮明なテキストを生成します。
図5 |
WPFの新しいテキスト・スタックでは、エイリアス、グレースケール、ClearTypeの描画モードから明示的に選択できるようになりました。
図6 |
新しいテキスト・スタックにより、アニメーション化されたテキストまたは静的なテキストのどちらに対しても、テキストのヒンティングおよびスナッピングを最適化できます。さらに新しいテキスト・スタックは、いまや埋め込みビットマップを持ったフォントをサポートしています。これにより多くの東南アジアのフォントは、Win32ユーザーにはおなじみの鮮明さで描画されます。
■BindableRun
最初のWPFのリリースから、Run.Textは通常のCLRのプロパティでした。つまりRun.TextにはWPFの依存プロパティ・システムのすべての利点が欠けていたのです。特にバインド機能です。WPF 4では、Run.Textを依存プロパティに変更し、バインド可能なRunを提供するWPFを開発者が初めて使用できるようにしました。詳細は、ここから確認できます。
■独自の辞書
WPFには、WPF 4以前では入力検証にOSが提供した辞書しか使えなかったスペルチェッカがあります。これは、特殊な用語を持つ特定の業界で使用されるアプリケーションには大きな問題で、それらのアプリケーションはスペルミスの指摘に悩まされていました。WPF 4では、WPFがスペルチェックに使用している辞書にアプリケーションが用語を追加できるようにするAPIを導入しました。詳細は、ここから確認できます。
■選択とキャレット・ブラシ
WPFアプリケーションのルック&フィールをリッチにカスタマイズできるようにしたことで、開発者は2つの簡単なプロパティを通じて、WPFのテキスト選択を描画するのに使用するブラシおよびキャレットを変更できます。SelectionBrushおよびCaretBrushです。
図7 |
図8 |
WINDOWS 7ライトアップ
図9 |
■Windows 7のマルチタッチ・サポート
マルチタッチ入力と操作処理サポートの導入により、WPF 4ではWindows 7でクライアント・アプリケーションを輝かせる素晴らしい方法を提供します。マルチフィンガー入力は、WPF 4では既存あるいは新規の入力イベントを通して公開されていますが、新しい操作や慣性のイベントも開発者は利用できるようになりました。
- UIElement上のマルチタッチ操作と慣性(パン、ズーム、回転)イベント
- UIElement、UIElement3D、ContentElement上の生のマルチタッチ・イベント(アップ、移動、ダウン)
- 複数のアクティブなコントロールをサポートするマルチキャプチャ
- マルチタッチのパンをサポートするためのScrollViewerの強化
- タッチ・デバイスの拡張性
- 今後のサーフェイスSDK互換
■Windows 7のシェル統合
WPF 4ではまた、いくつかの新しく主要なWindows 7のシェル機能をWPF開発者に公開しました。これらのシェル機能は、よりリッチで統合されたユーザー・エクスペリエンスを可能にします。新しいタスクバーは以前より雑然感がなく、より多くの情報を一目で分かるようになっています。Aeroのサムネイルはユーザー・コマンドをサポートしています。ジャンプ・リストはアプリケーションで利用可能なコンテキスト・スタートアップ・タスクやファイルへのアクセスを提供します。
WPF 4は、Windows 7のジャンプ・リスト機能と統合しており、これには以下のものが含まれます。
- タスク
- アイテム
- 最近使ったリストとよく使うリストの統合
- 独自カテゴリ
Windows 7のタスクバーとの統合には次のものが含まれます。
- プログレス・バー
- オーバーレイ・アイコン
- コマンドのサポートを持つサムネイル・ボタン
- テキストDWMサムネイル・クリッピングの詳細
図10 |
Windows 7では、タスクバーが以前より整理され、そしてユーザーは以前より少ないクリックでタスクを実行できるように再設計されました。WPF 4はXAMLでのWindows 7タスクバーとの統合を提供しているため、アプリケーションは、アイコン・オーバーレイ、プログレス・バー、サムネイル・ツールバー、サムネイルの説明文、サムネイル・クリッピングを使用して、アプリケーションのタスク・バー・アイコンからユーザーに対して有用な情報を表示できます。
WPF 4には、新しいTaskbarItemInfoクラスもあり、依存プロパティとして公開されています。それにはWindows 7に導入された新しいタスクバー機能がすべて含まれています。
図11 |
■アイコン・オーバーレイ
アイコン・オーバーレイにより、アプリケーションはボタンの右下の角の小さいオーバーレイ表示により、そのタスクバーのボタンを通して特定の通知や状態をユーザーへ知らせることができます。
■プログレス・バー
タスクバーのボタンは、ユーザーがアプリケーションのウィンドウに戻ることなく、簡単な進ちょく情報を表示するために使用できます。プログレス・バーはファイルのコピー、ダウンロード、インストール、メディアへの焼き込み、そのほか一定の時間が必要なオペレーションを追跡するのに使用できます。
■サムネイル・ツールバー
サムネイル・ツールバーは、ユーザーがウィンドウをリストアまたはアクティブ化することなく、アプリケーションの主要なコマンドへのアクセスを提供します。この機能により、アプリケーション作者はウィンドウのサムネイル・プレビューに、アクティブなツールバー・コントロールを埋め込めます。アプリケーションは、現状の状態に合わせて、そのサムネイル・ツールバーからボタンの表示、有効化、無効化、非表示が可能です。
図12 |
WPFの基本要素
■新しいXAML/BAMLパーサ・エンジン
WPF 4では、XamlReader.Loadメソッド、BAMLローディング、コントロールのデータ・テンプレート機能の実装を、新しいSystem.Xaml.dll上に構築された新しいエンジンと入れ替えました。この工程の一部として、多くのバグを修正し、多くの機能改善を行いました。XamlReader.Loadメソッドのユーザーは、ジェネリック型のサポートなどのXAML2009にある新しい言語機能をいくつか利用できます。MarkupExtensionやTypeConverterは、オブジェクト・グラフ作成時にさらに多くのサービスを得られ、Rootオブジェクトへのアクセスなど、より多くのシナリオを可能にしています。XAMLの分析や操作用のツールも非常に簡単になっており、System.Xaml.dllで提供されている新しい低レベルのAPIで作成できます。
■DLRに対するデータ・バインディング・サポート
CLRクラスとは違い、動的オブジェクトのメンバは実行時に定義されます。DynamicObjectは.NET Framework 4での新しい抽象クラスで、開発者は簡単にIDynamicMetaObjectProviderインターフェイスを実装できます。実行時に定義されるオブジェクトのプロパティやメンバを公開する標準的な方法として、‘dynamic’キーワードによるC#の新しいDLRサポートにより、いくつかのライブラリの実装を、DynamicObjectクラスやIDynamicMetaObjectProviderインターフェイスを使用するように切り替えようとしています。IDynamicMetaObjectProviderインターフェイスに対するWPF 4のデータ・バンディング・サポートにより、動的プロパティへアクセスするために自然なプロパティ構文が使用できます。
この機能はWPFのデータ・バインディング・エンジンを拡張しており、IDynamicMetaObjectProviderインターフェイスにより提供される動的メンバへのアクセスをサポートするために、既存のプロパティやインデクサによるアクセスをデータ・バインディング構文にマップします。
■Visual State Manager(VSM)
そのほかのWPF−Silverlight連続性をサポートする新しい機能はVisualStateManagerです。これはコントロールに現在の状態を適用する簡単で新しい方法を導入します。このメカニズムは、開始時および終了時のそれぞれの状態に対して、コントロールのロジックをマップする方法を提供することで、コントロールのルック&フィールを簡単にカスタマイズする方法を提供します。
図13 |
VSMは非常に柔軟性があり、自動的に各状態間で推移するアニメーションを生成するため、コントロールの作者は、コードを書く時間を少なくでき、コントロールのテンプレートで定義されているビジュアルの状態に時間をかけることができます。VSMは、コントロールのルック&フィールを簡単に入れ替える機能をコントロールの作者に提供し、また、ユーザーに対するコントロールの視覚的な反応を簡単に入れ替える方法も提供します。これはExpression Blendで完全にサポートされています。
■HTML-XBAPスクリプトの相互運用性
WPF 4は、XBAPとホストのHMTLページにあるスクリプト間で直接対話する手段を提供しています(XBAPはHTMLのフレームまたはIFRAME要素にロードされます)。XBAPは、HTML DOMへ深くアクセスでき、これには、それが含まれているHTMLページに埋め込まれたActiveXコントロールへのアクセスや、DOMイベント処理などが含まれます。
WPFはメインのスクリプト・オブジェクトをホスト・フレームから公開しています。これは動的なオブジェクトであり、フレームのウィンドウ・オブジェクトに、HTMLページのスクリプトにある独自のスクリプト関数やグローバル変数を加えたものを意味します。そこから、アプリケーションは直接スクリプト関数を起動したり、HTML DOMに“ドット(.)で接続”したりできます。この機能は部分信頼のXBAPで、Internet ExplorerまたはFirefoxのすべてのサポートされているバージョンにおいて利用可能です。
■UIAutomationの仮想化
WPFは以前のリリースで仮想化したコントロールを導入しましたが、自動化されたクライアントが仮想化コントロールと対話するための標準化された方法がありませんでした。2つのコントロール・パターン、ItemsContainerPatternおよびVirtualizedItemPatternは、WPF 4で追加され、仮想化された要素へのアクセスと対話をサポートしています。ItemsContainerPatternは仮想化されたコントロールへのアクセスと仮想化された項目の検索に使用され、VirtualizedItemPatternは仮想化された項目を実体化するために使用されます。
■SynchronizedInputパターン
これはWPF 4で追加されたもう1つのUIAコントロール・パターンです。このパターンは自動クライアントにより使用されるもので、与えられた入力イベントが正しい要素へWPFフレームワークによってルーティングされているかどうかを追跡できます。このパターンは3つの関連する自動イベント、すなわち、InputReachedTargetEvent、InputReachedOtherElementEvent、InputDiscardedEventを持ち、入力が処理された場所を示します。
クライアントの展開
■.NET Framework 4クライアント・プロファイル
.NET Framework 4の展開のサイズ、時間、全体のエクスペリエンスを改善するために、完全版.NET Framework 4のサブセットである.NETのもっとコンパクトなバージョンがあります。これは、.NET Framework4 クライアント・プロファイルと呼ばれています。.NET Framework 4クライアント・プロファイルの現在の再配布サイズは、約30MBytesです。完全版のMicrosoft .NET Framework 4は、クライアント・プロファイルの純粋なスーパーセットです。
.NET Framework 4クライアント・プロファイルの目標は、クライアント・アプリケーションに対する展開のサイズ、時間、信頼性、全体の展開エクスペリエンスを改善し、合理化に努めることです。クライアント・プロファイルには、ほとんどの一般的なデスクトップ・クライアント・アプリケーション(WindowsフォームおよびWPFアプリケーションを含む)が必要とする機能が含まれていて、恐らくクライアント・アプリケーションの開発者の大半が完全版.NET Framework 4の代わりに、それをターゲットにするだろうと予測されています。それが理由で、ほとんどのVisual Studio 2010ベータ2のクライアント・プロジェクトのテンプレートは、デフォルトで.NET Framework 4ベータ2クライアント・プロファイルをターゲットにしています。
.NET Framework 3.5 SP1のクライアント・プロファイルとは違い、.NET Framework 4クライアント・プロファイルでの重要な改善点は、x86およびx64の両方のWindows Vista、Windows XP、Windows Servers 2003および2008、Windows 7を含む、すべてのプラットフォームやOSでのサポートです。
ターゲットにするフレームワークのバージョンを確認または変更するには、プロジェクトのプロパティ・ウィンドウを開いて、“Application”ページを選択してください。“Target framework”ドロップダウンで、完全版.NET Framework もしくは.NETクライアント・プロファイルを変更できます。プロジェクトの公開(Publish)プロパティのページでは、ClickOnceデプロイメントに必要な前提条件の選択もできます。ベータ2では、VS 2010は自動的にプロジェクトの第1ターゲットに応じて、正しいプロファイル(クライアント・プロファイルまたは完全版)を選択します。
図14 |
(“新しいプロジェクトの追加”/“そのほかのプロジェクトの種類”の下にある)“セットアップと配置”のプロジェクトを作成すると、上記の図と同じ前提条件ダイアログが表示されます。この場合では、デフォルトで.NET Framework 4クライアント・プロファイルの前提条件が選択されます。
■.NET 4クライアント・プロファイル vs. .NET 3.5 SP1クライアント・プロファイル
クライアント・プロファイルの概念は新しいものではなく、.NET Framework 3.5 SP1で導入されたものではありますが、.NET Framework 4クライアント・プロファイルにはいくつか重要な改善点が含まれています。
| ||||||||||||||||||
表1 | ||||||||||||||||||
.NET 4.0は.NET Frameworkの以前のリリースからサイドバイサイドになっているため、.NET 4.0 Frameworkのインストールでは、マシン上にある以前の.NETバージョンにパッチを行う必要はありません。つまり、.NET 4.0 クライアント・プロファイルは.NET 3.5 SP1クライアント・プロファイルよりもはるかに速くインストールされます。
■完全信頼のXBAP配置
WPF 4から、ClickOnceの権限昇格プロンプトが、イントラネットや信頼ゾーンのXAMLブラウザ・アプリケーション(XBAP)に対しても有効化され、完全信頼のXBAPの配置をより簡単にします。イントラネットや信頼ゾーンでの最低限のコード・アクセス・セキュリティ(CAS)権限以上のセキュリティ権限が必要なXBAPについては、ユーザーは要求された権限でXBAPを実行させるようにするために、ClickOnceの権限昇格プロンプト上で‘実行’をクリックできます。
まとめ
上記でお分かりのように、WPF 4.0では非常に多くの素晴らしい新機能があります。以下は、これらの機能のいくつかについて、より詳細を学ぶためのリンクやリソースです。
- Channel 9:Chipalo Street氏は、WPF 4のテキストに関する新機能および改善点を説明しています
- Chipalo氏はWPF 4の新しいテキスト・スタック改善点について詳細な投稿シリーズも書いています
- Channel 9:David Teitlebaum氏によるWPF 4のグラフィック入門
- Channel 9:Jossef Goldberg氏は.NET Framework 4でのクライアント・プロファイルの新機能について探求しています
- Jossef氏は、.NET 4クライアント・プロファイルの紹介と.NET 4ベータ2クライアント・プロファイルでの新機能についての詳細も投稿しています
- Channel 9:Mark Wilson-Thomas氏は、Visual Studio 2010 WPFおよびSilverlightデザイナでの新機能をデモしています
- そして、Windows Client.net上でハンズオン・ラボやビデオが追加されています
- Jaime Rodriguez氏は、Visual Studio 2010ベータ2のWPF 4およびWPFデザイナにある主要な新機能をいくつか紹介しています
今後数カ月にわたって、新しいWPF 4の新機能やその利用方法にハイライトを当てた投稿をもっと行っていきます。また、VS 2010のWPFやSilverlightのデザイナについても、まもなく別の投稿を行う予定です。それにより、Visual Studio 2010内で直接WYSIWYGデザイナを使用して、素晴らしいWPFおよびSilverlightアプリケーションが構築できるようになります。
Hope this helps,
「〜ScottGu氏のブログより〜」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|