2009-10-28 7 views
2

J'ai cette bibliothèque avec des propriétés personnalisées Couleur. Je veux être en mesure d'utiliser ces propriétés en XAML comme ceci:Comment définir une propriété personnalisée en tant que valeur XAML?

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

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

EDIT:

Je viens de remarquer que CustomClass est statique, donc je ne peux pas créer une instance de celui-ci en XAML. En outre, lorsque je tape par exemple:, CustomClass n'apparaît pas dans intellisense. Je ne peux pas faire fonctionner vos solutions, même si elles le devraient, si j'avais une classe d'instance. Y at-il une solution de contournement pour cette situation?

EDIT 2:

Ceci est la classe réelle et espace de noms:

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 c'est l'espace de noms XAML:

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

Et si j'utilise cette ligne, comme le suggère Zenuka:

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

Il jette cette erreur au moment de la compilation:

Cannot find the type 'OfficeColors.Background'. Note that type names are case sensitive. 
+1

Est-ce que l'espace de noms « par exemple » support pour l'espace de noms de la CustomClass est trouvé dans?Et la CustomClass est-elle déclarée publique (ou d'une autre manière accessible)? – Zenuka

+0

Oui et oui. Je peux accéder à CustomClass à partir de code-behind, mais je ne peux pas en XAML. – sker

+1

Eh bien, si vous pouvez y accéder à partir du code derrière alors quelque chose devrait mal dans l'include XAML, pourriez-vous partager la ligne xmlns: eg = "....." et le haut de la CustomClass (Namespace et déclaration de classe). .. – Zenuka

Répondre

3

Utilisez ceci:

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

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

+0

Merci. Cela devrait être dans les fonctionnalités cachées de WPF/XAML, si ce n'est pas encore fait. – sker

2

J'Asuming vous avez une propriété statique sur la CustomClass? Ensuite, vous pouvez utiliser:

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

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

EDIT:
Le problème est parce que vous êtes en déclarant 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 (éventuellement avec un préfixe Background), OU utiliser des espaces de noms.

Amusez-vous :)

EDIT2:
Utilisez la méthode de Nir en utilisant le signe + 'aw: OfficeColors + Background.OfficeColor1' pour référencer les classes imbriquées, ne savait pas que l'on :)

+0

Merci pour votre suggestion et votre aide. J'envisageais de le faire, mais Nir le clouait. Qui aurait pensé, un signe +. – sker

1

Vous aurait à déclarer une instance de la classe comme l'une des ressources. (En supposant 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> 
Questions connexes