for WPF developers
Home Profile Tips 全記事一覧

WPF 逆引き集

最初は自分のメモ代わりにしていた情報ですが、ここで公開することでこれから WPF を始める方ややり方をド忘れした方(主に自分)のためになれば幸いです。

おおまかには次のようになっています。

  1. はじめに
  2. 共通する設定およびクラス
  3. C# によるあれこれ
  4. WPF によるあれこれ
  5. コード分析によるあれこれ
  6. C/C++ による汎用 DLL あれこれ
  7. Visual Studio に関するあれこれ
  8. おわりに
以下、目次の全体となりますが、かなり長くなってきたので、 ページ内検索をおこなうなどして効率良く活用してください。


はじめに

共通する設定およびクラス

MVVM パターンを意識した内部構造
MainWindow.xaml および MainWindow.xaml.cs を削除する
"Views"、"ViewModels"、"Models" フォルダを追加する
"Views" フォルダに MainView ウィンドウクラスを追加する
"ViewModels" フォルダに MainViewModel クラスを追加する
App.xaml に記述されている StartupUri プロパティを削除する
App.xaml.cs で OnStartup() メソッドをオーバーライドする
MVVM パターンのための基本的なクラス
NotificationObject クラス
DelegateCommand クラス
Person クラス
Gender 列挙子
Person クラス

C# によるあれこれ

System.Linq による拡張メソッドを使いこなす
Aggregate 拡張メソッドで独自の集計をおこなう
All 拡張メソッドですべての要素が条件を満たしているかどうかを判断する
Any 拡張メソッドでシーケンスが空かどうかを確認する
Any 拡張メソッドで条件を満たしている要素があるかどうかを判定する
AsEnumerable 拡張メソッドで独自に定義した拡張メソッドと区別を付ける
Average 拡張メソッドで平均値を算出する
Cast 拡張メソッドで型変換をおこなう
Concat 拡張メソッドで 2 つのシーケンスを連結する
Contains 拡張メソッドで指定した要素が含まれているかどうかを確認する
Count 拡張メソッドで要素数を数える
DefaultIfEmpty 拡張メソッドで空シーケンスに対する既定値を取得する
Distinct 拡張メソッドで重複する要素をシーケンスから除外する
ElementAt 拡張メソッドで指定したインデックスの要素を取得する
ElementAtOrDefault 拡張メソッドで指定したインデックスの要素を取得する
Empty 拡張メソッドで空のシーケンスを作成する
Except 拡張メソッドで差集合を取得する
First 拡張メソッドで先頭要素を取得する
FirstOrDefault 拡張メソッドで先頭要素を取得する
GroupBy 拡張メソッドで要素をグループ化する
GroupJoin 拡張メソッドでシーケンスを連結してグループ化する
Intersect 拡張メソッドで積集合を取得する
Join 拡張メソッドでシーケンスを連結する
Last 拡張メソッドでシーケンスの最終要素を取得する
LastOrDefault 拡張メソッドでシーケンスの最終要素を取得する
LongCount 拡張メソッドで要素数を数える
Max 拡張メソッドで最大値を探索する
Min 拡張メソッドで最小値を探索する
OfType 拡張メソッドで型によるフィルタリングをおこなう
OrderBy 拡張メソッドで要素を昇順に並べ替える
OrderByDescending 拡張メソッドで要素を降順に並べ替える
Range 拡張メソッドで連続する整数を生成する
Repeat 拡張メソッドで指定したオブジェクトをコピーしたシーケンスを生成する
Reverse 拡張メソッドで要素の順番を逆にする
Select 拡張メソッドでシーケンスの各要素を別の型に射影する
SelectMany 拡張メソッドでシーケンスに射影した各要素を 1 次元に平坦化する
SequenceEqual 拡張メソッドで 2 つのシーケンスが等しいかどうかを判定する
Single 拡張メソッドでシーケンス内の唯一な要素を取得する
SingleOrDefault 拡張メソッドでシーケンス内の唯一な要素を取得する
Skip 拡張メソッドで指定した分だけ先頭から連続する要素を除外する
SkipWhile 拡張メソッドで条件にしたがって連続する先頭要素を除外する
Sum 拡張メソッドで合計値を算出する
Take 拡張メソッドで指定した分だけ先頭から連続した要素を抽出する
TakeWhile 拡張メソッドで条件にしたがって連続する先頭要素を抽出する
ThenBy 拡張メソッドで昇順に並べ替える条件を加える
ThenByDescending 拡張メソッドで降順に並べ替える条件を加える
ToArray 拡張メソッドでシーケンスから配列を生成する
ToDictionary 拡張メソッドでシーケンスから Dictionary<TKey, TSource> を生成する
ToList 拡張メソッドでシーケンスから List<TSource> を生成する
ToLookup 拡張メソッドで要素をグループ化する
Union 拡張メソッドで和集合を取得する
Where 拡張メソッドでシーケンスをフィルタリングする
Zip 拡張メソッドで 2 つのシーケンスをマージする
メソッドチェーンについて
遅延評価について
byte[] と int などの基本データ型を相互に変換する
int などのデータ型から byte[] に変換する
byte[] から int などのデータ型に変換する
string 文字列と byte[] の相互変換
string 文字列を文字コードに変換する
byte[] から string 文字列に変換する
string のコレクションを並べ替える
特殊ディレクトリのフルパスを取得する
ログファイルを出力する
Debug クラスによるログファイル出力
Trace クラスによるログファイル出力
独自イベントの作成方法
ソースにリンクしたデバッグ出力をおこなう
元に戻す/やり直し機能を実装するには
データではなく操作を保持する
Action デリゲートで操作を保持する
元に戻す/やり直し機能を実装する
#if ~ #endif の代わりに Conditional 属性を使う
#if ~ #endif が向かない例
Conditional 属性の使い方
複数シンボルの条件
シリアル通信をおこなうには
ポートの開放と閉鎖
データを受信する
データを送信する
乱数を扱う
シードについて
範囲設定に注意
平均値と標準偏差で一様分布であることを確認する
最下位ビットも乱数として扱える
ボックス=ミュラー法による正規分布の乱数生成

WPF によるあれこれ

XAML デザイナーで ViewModel のメンバを Intellisense 候補とする
デザイン実行かどうかを判定する
StringFormat によってフォーマットを指定する
コントロールを変形させたい
RenderTransform プロパティ
LayoutTransform プロパティ
コントロールを変形したときのマウス位置を特定したい
原点を中心に座標を回転する
ある点を中心に座標を回転する
Thumb コントロールの DragDelta イベントと DragCompleted イベント
ListBox コントロールなどを物理スクロールにする
ListBox のアイテム追加/削除のときにアニメーションする
添付ビヘイビアを作成する
添付プロパティとは
添付プロパティの作成
ビヘイビアの作成
DataGrid コントロールの行ヘッダに行番号を表示する
ドラッグ操作でゴーストを表示する
Adorner クラス
ゴーストを表示するための Adorner 派生クラス
ゴーストを表示するための添付ビヘイビア
装飾のコントロールレイアウトを XAML で指定する
Adorner クラスからの派生クラスを用意する
添付プロパティの定義
使用例
DataTemplateSelector クラスによる装飾の切り替え
TabControl コントロールのあれこれ
ViewModel のコレクションを ItemsSource プロパティに指定する
タブを追加/削除する
多言語対応にする
多言語化されたリソース
XAML からリソースを参照する
動的な言語切替
二重起動させないようにする
Alt+Tab メニューのウィンドウ一覧に表示させないようにする
「デスクトップの表示」ボタンを押しても最小化しないようにしたい
ShowDesktopBehavior 添付ビヘイビア
複数ウィンドウへの適用
Win32 API を使用する
ウィンドウハンドルを取得する
ウィンドウの位置を取得または設定する
システムメニューを表示しないようにする
ホットキーを登録する
ハンドルされていない例外を処理する
UI スレッドにおける未処理例外の捕捉
UI スレッド以外における未処理例外の捕捉
独自のマークアップ拡張を作成するには
基本的な使い方
Binding マークアップ拡張を自作してみよう
非同期処理をおこなうには
Thread による非同期処理
ThreadPool による非同期処理
Asynchronous Programming Model (APM) による非同期処理
Event-based Asynchronous Pattern (EAP) による非同期処理
Task-based Asynchronous Pattern (TAP) による非同期処理
非同期で RS-232C 通信を永続的におこなうには

コード分析によるあれこれ

"やってはいけない" コードを検出するコード分析機能を使おう
SQL クエリ構文を string.Format で生成してはいけない (CA2100)
StreamReader/Writer クラスを using で入れ子にしてはいけない (CA2202)
コンストラクタ内でオーバーライド可能なメソッドを呼び出してはいけない (CA2214)

C/C++ による汎用 DLL あれこれ

C/C++ による汎用 DLL 作成用プロジェクト作成手順
DLL として関数を公開するには
C# から C/C++ DLL で公開されている関数を使用するには
文字列を渡す
文字列を返してもらう
構造体を渡す
構造体を返してもらう
ポインタを含む構造体を受け渡すには

Visual Studio に関するあれこれ

設定のインポートとエクスポート
ネットワーク共有におけるアクセス許可

おわりに