呼び出し側のアプリケーションIDを確定できません。
前のエントリで設定値を保存するコマンドクラスを書いていたが、それをBlend4のInvokeCommandActionビヘイビアでパインドして使おうとしたのだが、Visual Studio 2010では何も問題が無いのにBlend4で以下のエラーが出ることが解った。
エラーの発生元がXAMLだしメッセージからはエラーが全く解らない(MS製品ではよくあることだ)が、Blend4でしかエラーが発生しないことから、デザイン時に何かをしようとしてエラーになっているのだろうと推測した。
デザイン時であるか否かは以下のイディオムで簡単に判定できる。
if (System.ComponentModel.DesignerProperties.IsInDesignTool)
あとはこれを怪しい所にセットしていけば良いのだが、原因はすぐに判明した。
AppSettingsCommand.cs (修正前)
public AppSettingsCommand(Action<T> execute) : base(execute) { _isolatedStore = IsolatedStorageSettings.ApplicationSettings; }
IsolatedStorageSettings.ApplicationSettingsはランタイム時ではないと取得できないのである。
従ってここにIsInDesignToolを挿入することにする。
AppSettingsCommand.cs (修正後)
public AppSettingsCommand(Action<T> execute) : base(execute) { if (!System.ComponentModel.DesignerProperties.IsInDesignTool) { _isolatedStore = IsolatedStorageSettings.ApplicationSettings; } }
これでBlend4でもエラーはでなくなった。