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

我有一个用户控件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资源是一个字典,你可以使用密钥访问,就像后面的代码一样

点赞