Question

J'ai cette bibliothèque avec des propriétés personnalisées Couleur . Je veux pouvoir utiliser ces propriétés dans XAML comme ceci:

    <Style TargetType="{x:Type eg:MyWindow}">
        <Setter Property="Background">
            <Setter.Value>
                <SolidColorBrush Color="CustomClass.CustomColorProperty"/>
            </Setter.Value>
        </Setter>
    </Style>

L'espace de noms contenant CustomClass est déjà référencé. Comment dois-je m'y prendre? Merci.

EDIT:

Je viens de remarquer que CustomClass est statique, je ne peux donc pas en créer une instance en XAML. De plus, lorsque je tape par exemple: , CustomClass ne s'affiche pas dans intellisense. Je ne peux utiliser aucune de vos solutions, même si elles le devraient, si j'avais une classe d'instance. Existe-t-il une solution de contournement à cette situation?

EDIT 2:

Il s'agit de la classe et de l'espace de noms actuels:

namespace Assergs.Windows
{
    public static class OfficeColors
    {
        public class Background
        {
            public static Color OfficeColor1 = (Color)ColorConverter.ConvertFromString("#e4e6e8");
            public static Color OfficeColor2 = (Color)ColorConverter.ConvertFromString("#dce0ed");
            public static Color OfficeColor3 = (Color)ColorConverter.ConvertFromString("#a8c3e0");
        }
    }
}

Et voici l’espace de noms XAML:

xmlns:aw="clr-namespace:Assergs.Windows;assembly=Assergs.Windows"

Et si j'utilise cette ligne, comme suggéré par Zenuka:

<SolidColorBrush Color="{x:Static aw:OfficeColors.Background.OfficeColor1}"/>

Il lève cette erreur lors de la compilation:

Cannot find the type 'OfficeColors.Background'. Note that type names are case sensitive.
Était-ce utile?

La solution

Utilisez ceci:

<SolidColorBrush Color="{x:Static aw:OfficeColors+Background.OfficeColor1}"/>

Notez le signe + au lieu d'un point pour référencer les classes imbriquées

Autres conseils

Je suppose que vous avez une propriété Static sur CustomClass? Ensuite, vous pouvez utiliser:

<SolidColorBrush Color="{x:Static eg:CustomClass.CustomColorProperty}"/>

mais vous devez peut-être changer le préfixe de l'espace de noms ...

EDIT:
Le problème réside dans le fait que vous déclarez une classe dans une autre classe ... Je vous suggère de déplacer la classe Backgroud en dehors de la classe OfficeColors et de la déclarer statique ou de déplacer les propriétés de la classe d'arrière-plan vers la classe OfficeColors (peut-être avec un préfixe Background), OU d'utiliser des espaces de noms lorsque vous essayez d'essayer.

Amusez-vous :))

EDIT2:
Utilisez la méthode de Nir en utilisant le signe + 'aw: OfficeColors + Background.OfficeColor1' pour faire référence à des classes imbriquées, ne le connaissait pas:)

Vous devez déclarer une instance de la classe en tant qu'une des ressources. (En supposant que CustomColorProperty n'est pas statique)

<CustomNamespace.CustomClass x:Key=CcInstance />
<Style TargetType="{x:Type eg:MyWindow}">        
     <Setter Property="Background">            
         <Setter.Value>                
              <SolidColorBrush Color="{Binding Source={StaticResource CcInstance}, Path=CustomColorProperty} />            
         </Setter.Value>        
     </Setter>    
</Style>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top