将资源从一个UserControl解析为父UserControl

时间:2013-03-08 17:19:35

标签: wpf user-controls resources

我有一个用户控件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中找到资源?

2 个答案:

答案 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>

编译器仍会发出无法解析资源的警告。