2

次のリソースがあります。

<Window.Resources>
    <Style x:Key="TopKey" TargetType="local:CustomType">
        <Style.Resources>
            <DataTemplate x:Key="NestedKey">
                <TextBlock Text="{Binding Path=Name}"/>
            </DataTemplate>
        </Style.Resources>
    </Style>
</Window.Resources>

次に、次の宣言があります。

<local:CustomType ItemTemplate="{StaticResource TopKey.NestedKey}"/>

もちろん、上記の行はコンパイルされず、これを解決する方法がわかりません...

4

2 に答える 2

3

Resource を FrameworkElement の ResourceDictionary に配置するということは、この FrameworkElement の外部で Resource にアクセスできないようにすることを意味します (ただし、コード ビハインドで回避できます)。

あなたの場合、NestedKey は間違った ResourceDictionary にあります。次のようなことを試してください:

<Window.Resources>
    <DataTemplate x:Key="NestedKey">
        <TextBlock Text="{Binding Path=Name}"/>
    </DataTemplate>
    <Style x:Key="TopKey" TargetType="local:CustomType">
        <!-- here I can use {StaticResource NestedKey} -->
    </Style>
</Window.Resources>

<!-- in the same window I can use: -->
<local:CustomType ItemTemplate="{StaticResource NestedKey}"/>

また、TopKey リソースに基づく新しいスタイルを定義して、その ResourceDictionary にアクセスすることもできます (ただし、これはより適切に実行できる回避策です)

<local:CustomType>
    <local:CustomType.Style>
        <Style BasedOn={StaticResource TopKey} TargetType="local:CustomType">
            <!-- here I can use {StaticResource NestedKey} -->
        </Style>
    </local:CustomType.Style>
</local:CustomType>
于 2013-07-29T11:10:48.563 に答える