Architect's Log

I'm a Cloud Architect. I'm highly motivated to reduce toils with driving DevOps.

WPFエントリのまとめ

WPF関連のエントリをこのページにまとめます。エントリするたびに随時更新します。

Hello World

WPFをはじめました - プログラマーな日々

エディタだけでWPFのHello World - プログラマーな日々
ソースコードとプロジェクトファイルを手書きしてHello Worldをやってみました。 ...

マークアップだけでHelloWorld - プログラマーな日々
マークアップだけでHelloWorldをやってみました。 ...

マークアップだけでHelloWorld(続編) - プログラマーな日々
ウィンドウ定義を独立したファイルに移動します。 ...

コントロール

ウィンドウにコントロールを表示する - プログラマーな日々

コントロールのレイアウトを変更する - プログラマーな日々
以下のエントリーを元にMyWindow.xamlのStackPanelをWrapPanelに変更し、ビルドします。 ...

コントロールを操作する - プログラマーな日々

複数のコントロールで色定義を共有する - プログラマーな日々

複数のコントロール間でプロパティをバインドする - プログラマーな日々
SliderのValueをTextBoxのテキストにバインドする。 ...

ユーザーコントロールを作成する - プログラマーな日々

コントロールにアクセスキーを設定する - プログラマーな日々

ListViewに項目を表示する - プログラマーな日々

TreeViewに項目を表示する - プログラマーな日々

メニューに項目を表示する - プログラマーな日々

ツールバーに項目を表示する - プログラマーな日々

コンテナコントロールを使用する - プログラマーな日々

Sliderを使用する - プログラマーな日々

RichTextBoxを使用する - プログラマーな日々

RichTextBoxのマークアップと各要素のオフセット - プログラマーな日々

RichTextBoxに検索機能を実装する - プログラマーな日々

ドキュメントビューアを使用する - プログラマーな日々
今回はFlowDocumentReaderを使用しますが、 ...

ツールチップを表示する - プログラマーな日々

ToolTipServiceを使用してツールチップの動作を変更する - プログラマーな日々

ドラッグで移動可能な領域を実装する - プログラマーな日々

Borderで境界線を描画する - プログラマーな日々

Popupでフローティングウィンドウを実装する - プログラマーな日々

ScrollViewerでスクロール可能にする - プログラマーな日々

ViewBoxでスペースにフィットするようにコンテンツを伸縮させる - プログラマーな日々

テンプレート

ボタンにコントロールテンプレートを適用する - プログラマーな日々

ボタンクリックでテンプレートを適用する - プログラマーな日々

ボタンにリッチなテンプレートを適用する - プログラマーな日々

テンプレートバインディングを適用する - プログラマーな日々

テンプレートバインディングを適用する(その2) - プログラマーな日々
プロパティ名が一致していなくてもテンプレートバインディングを使用することができます。 ...

ListBoxのアイテムを2列に並べる - プログラマーな日々
通常のControlTemplateではなく、ItemsPanelTemplateを使用します。 ...

ListBoxをさらにカスタマイズする - プログラマーな日々
ItemsPanelTemplateは、項目のレイアウトに使用されるパネルを指定します。それ以上のカスタマイズにはControlTemplateを使用します。 ...

XBAP

XBAPでHello World - プログラマーな日々

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アプリケーションに組み込んだリソースをコードから参照する - プログラマーな日々
アプリケーションに組み込んだリソースをコードから参照します。 ...

レイアウト

Zインデックスで重なりの順序を指定する - プログラマーな日々

Canvasにレイアウトする - プログラマーな日々

Canvasにレイアウトする(その2) - プログラマーな日々

Canvasを使ってコントロールをフローティングする - プログラマーな日々

DockPanelでエクスプローラの画面構成を再現する - プログラマーな日々

WrapPanelで折り返しのレイアウトを実装する - プログラマーな日々

UniformGridでグリッドレイアウトを実装する - プログラマーな日々
UniformGridは基本的な機能しか提供しないので、Gridよりもパフォーマンス面で有利です。 ...

変換

LayoutTransformプロパティとRenderTransformプロパティの違い - プログラマーな日々
LayoutTransformプロパティを使用する(背景色緑)とレイアウトに前に適用されるので、描画に必要な領域が確保されます。 RenderTransformプロパティを使用する(背景色橙)とレンダリングの直前に適用されるので、領域は変わりません。 ...

スタイル

コントロールにスタイルを適用する - プログラマーな日々

スタイルでトリガーを適用する - プログラマーな日々

リソース参照でスタイルの定義を共有する - プログラマーな日々

型をキーにしてスタイルを適用する - プログラマーな日々

トリガとリソースをスタイルに関連付ける - プログラマーな日々

Style.TriggersとControlTemplate.Triggersの違い - プログラマーな日々
Buttonの既定のテンプレートが(境界線の背景を明示的に赤にすることにより)背景のテンプレートバインディングを削除するため、スタイルのトリガは何の影響も与えません。このような現象が起きる理由は、コントロールテンプレートが視覚ツリー要素のプロパティのみに影響を与えるのに対し、スタイルはコントロールのプロパティのみに影響を与えるからです。 ...

スタイルの継承 - プログラマーな日々

プラグイン

MEFでWPFのプラグインを実装する - プログラマーな日々
MEFは.NET4で提供された.NET標準のDIコンテナです。このMEFを使ってWPFのプラグインを実装してみます。 ...

MEFでWPFのプラグインを実装する(複数プラグイン編) - プログラマーな日々
前回の実装を改良して複数のプラグインを読み込んでみます。 ...

MEFでWPFのプラグインを実装する(複数プラグインをファイル名で指定して読み込む) - プログラマーな日々
前回の実装を改良して、ファイル名を指定して複数のプラグインを読み込めるようにします。 ...

MEFでWPFのプラグインを実装する(複数プラグインをファイル名で指定して読み込む)改良版 - プログラマーな日々
前回の実装を改良します。AggregateCatalogクラスでカタログを集約し、一度に読み込めるようにします。 ...