如何访问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}"/>
当然,上面的行没有编译,我不知道如何解决这个问题。。。
将资源放在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}" />
希望对有所帮助