我有以下资源:
<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}"/>
当然上面这行没有编译,我不知道如何解决这个问题......
答案 0 :(得分:3)
将资源放在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资源的新Style,从而获得对它的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>
答案 1 :(得分:2)
只需这样做
<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}" />
希望有所帮助