如何访问WPF中的嵌套资源

本文关键字:嵌套 资源 WPF 何访问 访问 | 更新日期: 2023-09-27 18:25:23

我有以下资源:

<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}"/>

当然,上面的行没有编译,我不知道如何解决这个问题。。。

如何访问WPF中的嵌套资源

将资源放在FrameworkElement的ResourceDictionary中意味着您不希望该资源在此FrameworkElement之外可访问(尽管您可以在代码后面绕过它)。

在您的情况下,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>

只需执行此

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

希望对有所帮助