プログラム系統備忘録ブログ

記事中のコードは自己責任の下でご自由にどうぞ。

C#でJSONを読み込む方法によっては末尾コンマでも読める話

確認時の.NET Frameworkのバージョン: 4.6.00081

.NET標準のメソッドでJSONを読み込もうとした時、「末尾がコンマで終わる配列」「末尾がコンマで終わるオブジェクト」というJSON textではないものを、方法によっては読める、という記事です(長い)。
("trailing comma"の日本語訳って、何か定着した言い回しはあるのでしょうか。)

続きを読む

WPFのControlTemplateとDataTemplateの違い、それとContentPresenter

2016/05/14: ContentTemplateを使用した場合とContentとして直接記述した場合のDataContextの違いを追記

この記事では「コントロールとは何か」「データとは何か」については一切触れません。
代わりにVisual Treeに基づいて記述します。この記事で「子要素」などと記述しているものは、Logical TreeでなくVisual Treeでの話です。

この記事で言及する内容を最初に書いておきます:

ControlTemplate
適用対象Controlの子要素を指定するもの
DataTemplate
ControlTemplate中のContentPresenterの、子要素を指定するもの
続きを読む

Live Shapingを使ってコレクション要素を自動フィルタリングする例

19:00頃: 「一度に大量の要素を変更した場合の性能」を追記

.NET Framework 4.5で ICollectionViewLiveShaping Interface が追加されました。このインターフェースを通じて、コレクション要素のグループ化/ソート/フィルタリングをリアルタイムに行えます。
この記事では、フィルタリング機能を使うサンプルコードを紹介します。
(余談ですが、MSDNのWPF関連のページでは、.NET 4.5〜のページではサンプルコードが表示されないことや、"This topic is no longer available"であることが多々あります。その場合は.NET 4.0のページに移動しましょう。)

続きを読む

TargetedTriggerActionの使用例

2015/09/22 xamlのサンプルをGridView(Header)RowPresenterを使用するものに変更、説明を追加。

System.Windows.Interactivity.TargetedTriggerAction をWPFで使用するメモです。
確認時のExpression Blend SDKのDLLのバージョン

  • System.Windows.Interactivity.dll: Runtime Version=v4.0.30319, Version=4.5.0.0
  • Microsoft.Expression.Interactions.dll: Runtime Version=v4.0.30319, Version=4.5.0.0
続きを読む

xamlでStaticResourceの結果にTypeConverterを適用する方法

2015/09/20 追記: 背景の説明に、xamlでの属性値の処理についての説明を追加

背景

  1. MenuItem.InputGestureTextKeyBinding.Gesture に同じ文字列を二回記述したくない
  2. x:StaticにしてもStaticResourceにしてもマークアップ拡張を通す場合は、 XAML Syntax In Detail | Microsoft Learn の"Processing of Attribute Values"にあるようにTypeConverterが使用されないため、string型をKeyBinding.Gestureに設定しようとしてXamlParseExceptionが発生する
  3. http://stackoverflow.com/questions/2382178/is-it-possible-to-supply-a-type-converter-for-a-static-resource-in-wpf に、依存プロパティならBinding.Sourceで変換できるとあったけれど、KeyBinding.Gestureは通常のプロパティなので使えない
  4. 同じ質問の他の回答で自作マークアップ拡張を使う方法が紹介されている、この方法なら出来るんじゃ

なおこの記事では「StaticResourceにTypeConverterを適用」にしていますが、同様に「x:StaticにIValueConverterを適用」なども可能だと思います(最後に記述していますが、xamlパーサーのバグには注意)。

続きを読む