WPF関連のエントリをこのページにまとめます。エントリするたびに随時更新します。
Hello World
エディタだけでWPFのHello World - プログラマーな日々
ソースコードとプロジェクトファイルを手書きしてHello Worldをやってみました。 ...
マークアップだけでHelloWorld - プログラマーな日々
マークアップだけでHelloWorldをやってみました。 ...
マークアップだけでHelloWorld(続編) - プログラマーな日々
ウィンドウ定義を独立したファイルに移動します。 ...
コントロール
コントロールのレイアウトを変更する - プログラマーな日々
以下のエントリーを元にMyWindow.xamlのStackPanelをWrapPanelに変更し、ビルドします。 ...
複数のコントロールで色定義を共有する - プログラマーな日々
複数のコントロール間でプロパティをバインドする - プログラマーな日々
SliderのValueをTextBoxのテキストにバインドする。 ...
コントロールにアクセスキーを設定する - プログラマーな日々
RichTextBoxのマークアップと各要素のオフセット - プログラマーな日々
RichTextBoxに検索機能を実装する - プログラマーな日々
ドキュメントビューアを使用する - プログラマーな日々
今回はFlowDocumentReaderを使用しますが、 ...
ToolTipServiceを使用してツールチップの動作を変更する - プログラマーな日々
Popupでフローティングウィンドウを実装する - プログラマーな日々
ScrollViewerでスクロール可能にする - プログラマーな日々
ViewBoxでスペースにフィットするようにコンテンツを伸縮させる - プログラマーな日々
テンプレート
ボタンにコントロールテンプレートを適用する - プログラマーな日々
ボタンクリックでテンプレートを適用する - プログラマーな日々
ボタンにリッチなテンプレートを適用する - プログラマーな日々
テンプレートバインディングを適用する - プログラマーな日々
テンプレートバインディングを適用する(その2) - プログラマーな日々
プロパティ名が一致していなくてもテンプレートバインディングを使用することができます。 ...
ListBoxのアイテムを2列に並べる - プログラマーな日々
通常のControlTemplateではなく、ItemsPanelTemplateを使用します。 ...
ListBoxをさらにカスタマイズする - プログラマーな日々
ItemsPanelTemplateは、項目のレイアウトに使用されるパネルを指定します。それ以上のカスタマイズにはControlTemplateを使用します。 ...
XBAP
XBAPにコードを追加する - プログラマーな日々
Visual Studioで「WPFブラウザーアプリケーション」のプロジェクトを作成し、"Hello World"を現在時刻で書きかえる処理を追加しただけのアプリです。 結局動作させることはできなかったが、後のために過程を残しておきます。 ...
画面遷移
ナビゲーション(画面遷移)のサンプル - プログラマーな日々
WPFでの画面遷移のサンプルを作成します。 ...
ナビゲーションとページ(ビハインドコード) - プログラマーな日々
今回はマークアップを使わずにビハインドコードでナビゲーションを実装します。 ...
ナビゲーションとページ(マークアップ) - プログラマーな日々
前回(以下のエントリー)と同じ機能をマークアップで実装します。 ...
ナビゲーションとページ(マークアップその2) - プログラマーな日々
前回(以下のエントリー)と同じ機能をNavigationWindowの定義を省略して実装します。 ...
Application.Propertiesを使用してページ間で状態を受け渡す - プログラマーな日々
Application.Propertiesを使用して、入力された名前を次のページに受け渡します。 ...
プロパティを使用してページ間で状態を受け渡す - プログラマーな日々
Helloクラスのプロパティを使用して、入力された名前を次のページに受け渡します。 ...
スタートアップ
スタートアップロジックをカプセル化する - プログラマーな日々
Applicationクラスのサブクラスを作成して、スタートアップロジックをカプセル化します。 ...
スタートアップロジックをマークアップ定義で実装する - プログラマーな日々
前回(以下のエントリー)ソースコードで作成したスタートアップロジックをマークアップ定義で実装します。 ...
Startupイベントでアプリケーションを初期化する - プログラマーな日々
アプリケーションの初期化を、Applicationオブジェクトのコンストラクタではなく、Startupイベントで処理します。 ...
例外処理
WPFのエラー処理を集約例外ハンドラで解決する - プログラマーな日々
WPFに限らず、例外処理は一ヶ所にまとめましょう。 ASP.NETに「Application_Error」が、Windowsフォームアプリケーションに「Application,ThreadException」があるように、WPFにも「Application.DispatcherUnhandledException」イベントがあります。 ...
状態管理
Application.Propertiesを使用して状態を管理する - プログラマーな日々
Application.Propertiesを使用して状態を管理します。Applicationオブジェクトはアプリケーションのライフタイム全体で使用可能です。 Propertiesは任意のオブジェクトを他の任意のオブジェクトをキーにして格納することができます。 ...
Applicationオブジェクトのプロパティで状態を管理する - プログラマーな日々
Applicationオブジェクトはアプリケーションのライフタイム全体で使用可能なので、プロパティで状態管理することも可能です。 ...
アプリケーション設定をWPFで利用する - プログラマーな日々
使い方は、Widowsフォームアプリケーションやコンソールアプリけショーションと同じです。 ...
リソース
ファイルパスやURIでリソースを参照する - プログラマーな日々
ファイルパスやURIでリソースを参照します。 ...
リソースをWPFアプリケーションに組み込む - プログラマーな日々
リソースを3種類の方法でWPFアプリケーションに組み込みます。 ...
WPFアプリケーションに組み込んだリソースをマークアップから参照する - プログラマーな日々
前回(以下のエントリー)アプリケーションに組み込んだリソースをマークアップから参照します。 ...
WPFアプリケーションに組み込んだリソースをコードから参照する - プログラマーな日々
アプリケーションに組み込んだリソースをコードから参照します。 ...
ウィンドウ
ウィンドウのモーダルとモードレスを検証する - プログラマーな日々
ダイアログのスタートアップを検証する - プログラマーな日々
Application.ShutdownModeを検証する - プログラマーな日々
以下のマークアップのShutdownModeを変更して検証しました。 ...
WPFで背景が透明なウィンドウを作成する - プログラマーな日々
WPFで背景が透明なウィンドウを作成する方法を紹介します。 ...
レイアウト
Zインデックスで重なりの順序を指定する - プログラマーな日々
Canvasにレイアウトする(その2) - プログラマーな日々
Canvasを使ってコントロールをフローティングする - プログラマーな日々
DockPanelでエクスプローラの画面構成を再現する - プログラマーな日々
WrapPanelで折り返しのレイアウトを実装する - プログラマーな日々
UniformGridでグリッドレイアウトを実装する - プログラマーな日々
UniformGridは基本的な機能しか提供しないので、Gridよりもパフォーマンス面で有利です。 ...
変換
LayoutTransformプロパティとRenderTransformプロパティの違い - プログラマーな日々
LayoutTransformプロパティを使用する(背景色緑)とレイアウトに前に適用されるので、描画に必要な領域が確保されます。 RenderTransformプロパティを使用する(背景色橙)とレンダリングの直前に適用されるので、領域は変わりません。 ...
視覚要素
図形
データ
バインディング
バインディングのプロパティをクラス修飾で指定する - プログラマーな日々
プロパティだけを指定した場合と動作は同じですが、内部でリフレクションを使用しないので、パフォーマンス面で有利です。 ...
複雑なオブジェクトをバインディングする - プログラマーな日々
MVVMパターンでINotifyPropertyChangedを実装して変更が通知されるようにする - プログラマーな日々
データテンプレート
データテンプレートを使用する - プログラマーな日々
データテンプレートはデータ(このエントリではPerson)を受け取り、表示ツリーを構築します。 ...
DataTemplateを使用してXMLをバインディングする - プログラマーな日々
DataTemplateSelectorでテンプレートを選択する - プログラマーな日々
ディレクトリの子項目をリストボックスに表示する - プログラマーな日々
アクション
すべてのボタンに共通のクリックハンドラを設定する - プログラマーな日々
マークアップでメニュー項目をコマンドに結び付ける - プログラマーな日々
RoutedCommandでコマンドバインディングを実装する - プログラマーな日々
コマンドとデータバインディングの統合 - プログラマーな日々
DataTriggerでコマンドのバインディングをマークアップに移動させる - プログラマーな日々
スタイル
リソース参照でスタイルの定義を共有する - プログラマーな日々
トリガとリソースをスタイルに関連付ける - プログラマーな日々
Style.TriggersとControlTemplate.Triggersの違い - プログラマーな日々
Buttonの既定のテンプレートが(境界線の背景を明示的に赤にすることにより)背景のテンプレートバインディングを削除するため、スタイルのトリガは何の影響も与えません。このような現象が起きる理由は、コントロールテンプレートが視覚ツリー要素のプロパティのみに影響を与えるのに対し、スタイルはコントロールのプロパティのみに影響を与えるからです。 ...
プラグイン
MEFでWPFのプラグインを実装する - プログラマーな日々
MEFは.NET4で提供された.NET標準のDIコンテナです。このMEFを使ってWPFのプラグインを実装してみます。 ...
MEFでWPFのプラグインを実装する(複数プラグイン編) - プログラマーな日々
前回の実装を改良して複数のプラグインを読み込んでみます。 ...
MEFでWPFのプラグインを実装する(複数プラグインをファイル名で指定して読み込む) - プログラマーな日々
前回の実装を改良して、ファイル名を指定して複数のプラグインを読み込めるようにします。 ...
MEFでWPFのプラグインを実装する(複数プラグインをファイル名で指定して読み込む)改良版 - プログラマーな日々
前回の実装を改良します。AggregateCatalogクラスでカタログを集約し、一度に読み込めるようにします。 ...