4

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

4

2 回答 2

1

你可以这样做,但我建议使用 aResourceDictionary代替。

无论如何,如果你想这样做,你可以用它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>

因为Resource是一个字典,您可以使用key就像后面的代码一样访问

于 2013-03-08T22:27:15.773 回答
1

我遇到了同样的问题,并且能够通过引用资源来解决它,DynamicResource而不是StaticResource

<UserControl x:Class="UserControl2">
    <Grid Style="{DynamicResource MyStyle}">
    </Grid>
</UserControl>

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

于 2015-08-20T13:00:27.140 回答