こんな感じの XAML で TextBlock に対する2つの異なるキーのスタイルを定義しているとき、
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Styles.xaml"/>
<ResourceDictionary>
<Style TargetType="TextBlock" x:Key="numberText">
<Setter Property="Foreground" Value="White"/>
</Style>
<Style TargetType="TextBlock" x:Key="errorText">
<Setter Property="Foreground" Value="Red"/>
</Style>
</ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
デザイナでは問題なく表示されるのだが、実行時になって、 'プロパティ 'System.Windows.ResourceDictionary.DeferrableContent' の Set で例外がスローされました。' 行番号 '7'、行位置 '14'。 などという XamlParseException 例外が発生することがある。
これは Style タグで TargetType→x:Key の順に宣言していて、同じ TargetType の Style が複数ある場合に起こるようだ。 下記のように x:Key→TargetType に書き換えると例外は発生しない。
<Style x:Key="numberText" TargetType="TextBlock">
<Setter Property="Foreground" Value="White"/>
</Style>
<Style x:Key="errorText" TargetType="TextBlock">
<Setter Property="Foreground" Value="Red"/>
</Style>
Kenz Yamada(山田研二)。1984年生。大阪。ちょっとずつ好きなプログラム作ってます。
好きなものはカメラと旅行。ガジェットや身の回り、ちょっとこだわります。
詳しくは Web mixi で。