我有一个用户控件UserControl1,它在其资源中定义了一种样式。该用户控件包含UserControl2的实例,该实例引用该样式:
<UserControl x:Class="UserControl1">
<UserControl.Resources>
<Style x:Key="MyStyle" />
</UserControl.Resources>
<Grid>
<UserControl2 />
</Grid>
</UserControl>
<UserControl x:Class="UserControl2">
<Grid Style="{StaticResource MyStyle}">
</Grid>
</UserControl>
但是,UserControl2找不到该样式资源,即使它位于逻辑树中(在UserControl1的资源内)。如何让UserControl2在UserControl1中找到资源?
答案 0 :(得分:1)
你可以这样做,但我建议改为使用ResourceDictionary
。
无论如何,如果你想这样做,你可以使用FindAncestor
查找父母,并访问父母Resource
ResourceDictionary
<UserControl x:Class="UserControl1">
<UserControl.Resources>
<Style x:Key="MyStyle" />
</UserControl.Resources>
<Grid>
<UserControl2 />
</Grid>
</UserControl>
<UserControl x:Class="UserControl2">
<Grid Style="{Binding Resources[MyStyle], RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:UserControl1}}}">
</Grid>
</UserControl>
Beacause Resource
是一个字典,您可以使用key
访问,就像后面的代码一样
答案 1 :(得分:1)
我遇到了同样的问题,并且能够通过DynamicResource
而不是StaticResource
引用资源来解决问题:
<UserControl x:Class="UserControl2">
<Grid Style="{DynamicResource MyStyle}">
</Grid>
</UserControl>
编译器仍会发出无法解析资源的警告。