Skip to content

MS_WPFFeatures

nishi_74322014 edited this page Aug 21, 2026 · 2 revisions

WPFの機能

概要

WPFがサポートする機能と、その制限事項を纏める。

サポートする機能

グラフィック

2D/3Dグラフィック・レンダラー

従来は、

  • 2D(図形、ブラシ、ペン)は GDI(GDI
  • 3D(光源、カメラ位置情報)は Direct3D
  • ビデオは DirectShow

など、異なる API 群を組み合わせていたが、
WPFの UI フレームワークでは、これらを統一して扱えるようになっている。

ベクタ グラフィック

  • 従来のラスタ グラフィックから、画素密度非依存のベクタ グラフィックに変更。
  • 画素密度の変更や、拡大・縮小をしても、画質が維持される。

補足(高 DPI で効いてくる): この「画素密度非依存」という性質が、
4K / 高 DPI ディスプレイが一般化した現在、WPF
明確な優位点になっている。
Windows Formsは GDI+ のラスタ描画が基本のため、
高 DPI 対応には app.manifest の DPI 認識設定やスケーリング処理の
作り込みが必要になる(.NET Framework 4.7 以降で改善はされた)。

GPUレンダリング

CPU 描画の他の技術より高速で、同時に CPU への負担を最小限に抑えることができる。

  • CPU によりビットマップ イメージのレンダリングを行っていた
    GDI, GDI+から、
  • Direct3D 経由で GPU を使用するレンダリングに変更されている。

透過性

透過性をサポートしている。

メディア

ドキュメント

  • WPF ドキュメント(XPS ドキュメントやフロー ドキュメント)を表示できる。
  • ドキュメント表示のための FixedDocumentFlowDocument コントロールが
    標準で提供されている。

イメージ

  • JPEG や GIF など多様な形式のイメージを表示できる。
  • 静止画を表示するための Image コントロールが標準で提供されている。

ビデオ

  • WMV、AVI、MPEG など多様な形式のメディアを表示できる。
  • 動画や音声を再生するための MediaElement コントロールが標準で提供されている。

補足: MediaElement は内部で Windows Media Player のコーデック
依存する。このため、コーデックが入っていない環境(Server Core、
Windows Server の既定など)では再生できない。
現在の実務では WebView2 に HTML5 <video> を埋める方が
環境差の影響を受けにくい。

コントロール

コントロール種類

  • Windows の標準的な UI を実装するために必須である、
    基本的な組み込みコントロールが提供される。
  • なお、HTML と同様に、これらのコントロール類を XAMLで実装するため、
    コントロール単位に XAML タグが用意されている。

データ バインディング

UI コントロールと、CLR オブジェクトの間をマッピングする。

スタイル・テンプレート

UI コントロールの「外観」や、イベント ハンドラ・イベント トリガなども含めた、
UI コントロールの標準化・カスタマイズを行う。

レイアウト

パネルと呼ばれるレイアウト用コントロールを使用して、
Windows フォームのような座標レイアウト、
HTML のようなフロー レイアウト(ブロック化、格子分割)にも対応する。

パネル レイアウト
Grid 行・列による格子分割。最も多用される
StackPanel 縦横に順に積む
DockPanel 上下左右に貼り付ける
WrapPanel 収まらなければ折り返す
Canvas 座標指定(Windows Forms 的な配置)

アニメーション

イベント トリガ、トリガ アクション、ストーリ ボードを定義することで、
UI コントロールなどの表示項目にタイムライン ベースの
アニメーションの効果を付加できる。

デプロイ

ClickOnce(ClickOnce)、XBAPなどのデプロイが可能。

相互運用性

API

P/Invoke や RCW 呼出しなど Win32 連携技術を使用した相互運用が可能である
COMを参照)。

コントロール

また、WindowsFormsHostHwndHost を使用することで、
Windows フォームや ActiveX の UI コントロールを
使用することも可能である(パフォーマンス的には不利)。

例えば、下記は、System.Windows.Forms 名前空間の DataGrid コントロールを
ホストする WPF の例である。

<Window x:Class="WpfApplication1.Window1"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
  Title="HostingWfInWpf" Height="150" Width="300" Loaded="Window_Loaded">
  <Canvas>
    <WindowsFormsHost Name="windowsFormsHost1" Height="100" Width="275">
      <wf:DataGrid x:Name="dataGrid1"/>
    </WindowsFormsHost>
  </Canvas>
</Window>

移行メモ(正誤): 元ページの Hwndhost は、
正しくは HwndHostH が大文字)である。

補足(エアスペース問題): WindowsFormsHost / HwndHost を使うと、
「エアスペース (airspace) 問題」 に必ず遭遇する。

  • ホストされた領域は HWND を持つ別ウィンドウとして描画される。
  • このため WPF 側の要素を上に重ねられない
    (ポップアップ・メニュー・半透明オーバーレイが下に隠れる)。
  • Z-OrderOpacity も効かない。

段階移行(Windows Forms → WPF)で必ず問題になる点なので、
相互運用は「画面単位で分ける」(同一画面内で混在させない)方針が無難である。
なお、Windows App SDKXAML Islands
同じ制約を抱えている。

機能の制限事項

主に 3D グラフィックの高度な機能に関する制限であるので、
リッチでインタラクティブな業務アプリケーションの開発に、
大きな支障は無いと言える。

項番 区分 説明
1 パフォーマンス Direct3D と比べるとオーバーヘッドがあり、GPU 負荷が高くなる。また、WPF は Direct3D 9 対応であり、Direct3D 10 対応のグラフィックボードであってもパフォーマンスは向上しない。
2 シェーダ WPF は内部的にシェーダを使用しているが、開発者が WPF からシェーダを使用することはできない。
3 スキニング WPF ではスキニングができないので、滑らかな関節を持つアニメーションはできない(剛体アニメーションのみサポート)。
4 環境マッピング WPF では環境マッピングが使用できないので、物体に周囲の景色が反射しているような効果は表現できない。
5 WPF ではステンシル バッファや深度バッファを使用できないためリアルな影を生成できない。
6 テクスチャ・フィルタリング ポリゴンにテクスチャをマッピングする際の拡大/縮小フィルタを WPF から指定することはできない。

移行メモ(正誤): 項番 2「開発者が WPF からシェーダを使用することは
できない」は、.NET Framework 3.5 SP1(2008)以降では誤りである。
ShaderEffect クラスにより、ピクセル シェーダ(HLSL、PS 2.0/3.0)を
カスタム エフェクトとして適用できる
ようになった。
ただし頂点シェーダは使えない(2D エフェクト限定)ため、
3D 表現に関する制約という趣旨自体は残る。

用語

シェーダ

  • 3D グラフィックにおいて、グラフィック リソースに対して光源計算、
    陰影処理とレンダリング(ピクセル化)を実行するために使用する
    ソフトウェア命令の組み合わせ。
  • シェーダには、3D グラフィックを 2D グラフィックのように表示する
    トゥーン シェーダや、毛筆で描かれたような水彩画風の特殊な絵のタッチで
    表示する筆シェーダなどがある。

スキニング

3D グラフィックにおいて、人間の関節のような滑らかな屈曲を表現するための手法。

環境マッピング

  • 3D グラフィックにおいて、レイトレーシングを使わずに
    反射率の高い表面をシミュレートするテクニック。
  • オブジェクトを囲むシーンの画像を含む特殊なテクスチャを、
    オブジェクト自体に適用する。
  • 結果、反射面の特徴を上手く模倣し、膨大な計算を必要とする
    レイトレーシングを使わずに、十分実用的なものになる。

注意事項

標準UIコンポーネント

初期は不足があり、サードパーティ製品に依存していたが、最近は拡充された。

帳票ビューア

初期はサードパーティ製品に不足があったが、最近は拡充された。

座標レイアウト

Windows フォームの開発と同様に、
Visual Studioデザイナからコントロールを D&D して
座標レイアウトでコントロール位置を指定する方式の開発を望む場合は、
パネル要素に Canvas コントロールを使用する。

補足(Canvas は避けたい): 「Windows Forms と同じ感覚で作れる」ため
移行時に選ばれがちだが、Canvas

  • ウィンドウのリサイズに追従しない
  • 高 DPI / 多言語(文字列長の違い)で崩れる

という問題を抱える。WPF の強みである解像度非依存を
自ら捨てる形になるため、
原則 Grid、どうしても必要な箇所だけ Canvas とするのが望ましい。


Tags: 移行, .NET開発, UIサブシステム, WPF/Silverlight, XAML

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally