トップ > Tech > CSharp > WPF > ResourceDictionary.MergedDictionariesで例外XamlPaserExceptionが発生する

ResourceDictionary.MergedDictionariesで例外XamlPaserExceptionが発生する

こんな感じの 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>
(2010/09/16 13:28:54)
17259
プロフィール

Kenz Yamada(山田研二)。1984年生。大阪。ちょっとずつ好きなプログラム作ってます。 好きなものはカメラと旅行。ガジェットや身の回り、ちょっとこだわります。 詳しくは Web mixi で。

Bookmark and Share