我有一个用户控件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中找到资源?
最佳答案 你可以这样做,但我建议使用ResourceDictionary.
无论如何,如果您想这样做,您可以使用FindAncestor查找父级并从父级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资源是一个字典,你可以使用密钥访问,就像后面的代码一样