WPF の BitmapImage で表示した画像ファイルが削除・上書きできなくなる問題の解決方法
BitmapImage で表示した画像ファイルがロックされ、削除・上書きできなくなる。原因である既定のキャッシュ動作と、BitmapCacheOption.OnLoad・StreamSource による解決方法を整理する。
WPF・XAML・C# および Windows アプリ開発に関する技術記事を掲載しています。
BitmapImage で表示した画像ファイルがロックされ、削除・上書きできなくなる。原因である既定のキャッシュ動作と、BitmapCacheOption.OnLoad・StreamSource による解決方法を整理する。
既定の文字列ソートでは "item10" が "item2" より前に並んでしまう。本記事では Win32 API の StrCmpLogicalW を P/Invoke で呼び出し、IComparer を実装したクラスとしてエクスプローラーに近い自然順ソートを実現する方法...
自作 RelayCommand の CanExecute を変えてもボタンが更新されないのは CanExecuteChanged が発火されないため。CommandManager.RequerySuggested への委譲と手動発火の使い分けを整理する。
GetBindingExpression().UpdateSource() を View から呼ぶ際に起きる null・一括更新・方向取り違え・MVVM 設計の落とし穴を、一次情報を基に整理する。
TextBox.Text の既定が LostFocus であるために起きる「入力が ViewModel に届かない」問題を、UpdateSourceTrigger の三値の使い分けと落とし穴から整理する。
バインド中の ObservableCollection を別スレッドから変更すると NotSupportedException が発生する。原因のスレッドアフィニティと、EnableCollectionSynchronization・Dispatcher による解決策を整理する。
Fluent テーマの TextBox がフォーカス時に表示するクリアボタンを、入力挙動を変えずに非表示化する。名前付きパーツを操作する方法と AcceptsReturn を使う方法を .NET 10・9 対応で整理する。
StackPanel の中に置いた ScrollViewer がスクロールしないのは、StackPanel が高さを制約しないためである。原因と、Grid や DockPanel を使った解決方法・選択基準を解説する。
コンバーターを書かずに Binding.StringFormat で数値・通貨・日付を書式化する手法を整理し、カルチャ依存や ContentControl での制約までまとめる。
キーごとの集計で GroupBy が抱える中間グルーピングの割り当てコストを整理し、.NET 9 の CountBy・AggregateBy・Index を辞書への直接集計で .NET Framework に実装する方法と、GroupBy 委譲実装との挙動差を解説する。
SQL の LEFT JOIN / RIGHT JOIN に対応する .NET 10 の LeftJoin・RightJoin と Shuffle を .NET Framework へ実装し、GroupJoin イディオムとの対応関係、擬似シャッフルとの違い、IQuerya...
WPF の Binding が動かないとき、Visual Studio の出力ウィンドウにはバインディングエラーが記録される。エラーメッセージの構造の読み方、トレースの詳細化、パターン別の対処を整理する。
.NET 8 の ToDictionary 新オーバーロード(KeyValuePair 版・タプル版)を .NET Framework で再現する際に問われる、既存オーバーロードとの共存・名前付き引数による解決先の固定・notnull 制約の一致というシグネチャ設計を解説する。
既存の OrderBy への委譲だけで完結する Order・OrderDescending のポリフィルを題材に、戻り値型 IOrderedEnumerable が決める ThenBy 互換性と、環境によって異なるソート時例外という 2 つの互換性論点を解説する。
.NET Framework で Chunk・MaxBy・MinBy・DistinctBy を代用する GroupBy・全件ソートの回避イディオムを実行コストの面から検証し、計算量を改善するポリフィルの実装と、バージョン別シンボルによる移行ガードの選び方を解説する。
LINQ ポリフィル自作時の 3 つの設計原則(引数検証とイテレータの分離・バッファリングの最小化・条件付きコンパイルによる移行ガード)を、.NET Core 期に追加された Append・Prepend・TakeLast・SkipLast の実装を題材に解説する。
WPF DataGrid のソート状態を初期化する代表的な方法を整理し、単一列ソートと複数列ソートの両方で使える実装例を示す。
.NET Framework 環境では ??= などの C# 新構文が使用できない場合がある。本記事では C# 各バージョンで追加された演算子と初期化の糖衣構文をバージョン対応表とコード例とともに網羅的に整理する。
C# 14 の extension ブロックで Directory のような静的クラスを対象にすると、静的メンバーは追加できるがインスタンスメンバーは CS0721 / CS9303 で拒否される。レシーバーの書き方による境界と、インスタンス形式で呼びたい場合の代替手段を整...
StaticResource はXAMLロード時に値を確定するため、実行時の変更は反映されない。動的な変更が必要な場合は DynamicResource を使用する。両者の仕組みと使い分けの判断基準を解説する。
WPF で Label を大量配置した際に描画が遅くなる原因を整理し、TextBlock との違い、使い分け、置き換え時の注意点を実装例付きでまとめる。
WPF の Label にアンダーバー(_)を含む文字列を表示しようとすると、画面上で消えてしまうことがあります。この原因と 3 つの回避方法を解説します。
DataGridTemplateColumn の CellTemplate と CellEditingTemplate を使い分け、表示時と編集中で最適な UI を構成する方法を解説します。
TreePaste で発生したタスクトレイから表示した ContextMenu が閉じない問題に対し、StaysOpen=False と SetForegroundWindow の併用で解消する方法を整理します。
WPF 標準機能だけで Fluent デザインの見た目を整え、SystemColors を使って Windows の色設定に追従する実装方法を整理します。
WPFでTextBlockの代わりにTextBoxを使い、編集不可のままテキストを選択・コピー可能に表示する方法を解説します。
ItemsSource に渡すデータ構造によって、DisplayMemberPath・SelectedItem・SelectedValue の設定方法が変わります。文字列リスト、オブジェクトリスト、Enum の各パターンを整理します。
ListBox の仮想化有効時に選択状態が維持されない理由と、IsSelected を各アイテムに持たせて MVVM で安定させる解決方法を解説する。Shift 範囲選択への対応も含める。
DataGrid のソート処理の基本と、実務で使いやすい実装パターンを解説する。
XAML とコードビハインドの両面から、WPF DatePicker の日付表示形式を変更する方法をまとめる。