control - wpf show text




Resolución de recursos de un UserControl a un UserControl principal (2)

Tengo un control de usuario UserControl1, que define un estilo en sus recursos. Ese control de usuario contiene una instancia de UserControl2, que hace referencia a ese estilo:

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

Sin embargo, UserControl2 no puede encontrar ese recurso de estilo, aunque esté en el árbol lógico (dentro de los recursos de UserControl1). ¿Cómo puedo obtener UserControl2 para encontrar los recursos en UserControl1?


Puedes hacerlo pero, en cambio, te sugiero usar un ResourceDictionary .

De todos modos, si quieres hacerlo de esta manera, puedes usar FindAncestor para encontrar el padre y acceder al Resource que deseas de Parent 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 es un diccionario al que puedes acceder usando la key como en el código detrás


Tuve el mismo problema y pude resolverlo haciendo referencia al recurso a través de DynamicResource lugar de StaticResource :

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

El compilador todavía da una advertencia de que el recurso no se puede resolver.





resources