Domanda

Ho questa libreria con proprietà Color personalizzate. Voglio essere in grado di utilizzare queste proprietà in XAML in questo modo:

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

Lo spazio dei nomi che contiene CustomClass è già referenziato. Come devo procedere? Grazie.

EDIT:

Ho appena notato che CustomClass è statico, quindi non posso crearne un'istanza in XAML. Inoltre, quando digito ad esempio: , CustomClass non viene visualizzato in intellisense. Non riesco a far funzionare nessuna delle tue soluzioni, anche se dovrebbero, se avessi una classe di istanza. Esiste una soluzione alternativa per questa situazione?

MODIFICA 2:

Questa è la classe e lo spazio dei nomi attuali:

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");
        }
    }
}

E questo è lo spazio dei nomi XAML:

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

E se uso questa linea, come suggerito da Zenuka:

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

Genera questo errore in fase di compilazione:

Cannot find the type 'OfficeColors.Background'. Note that type names are case sensitive.
È stato utile?

Soluzione

Usa questo:

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

Nota il segno + invece di un punto per fare riferimento alle classi nidificate

Altri suggerimenti

Suppongo che tu abbia una proprietà statica su CustomClass? Quindi è possibile utilizzare:

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

ma forse devi cambiare il prefisso dello spazio dei nomi ...

EDIT:
Il problema sta nel fatto che stai dichiarando una classe in un'altra classe ... Ti suggerisco di spostare la classe Backgroud fuori dalla classe OfficeColors e dichiararla statica o spostare le proprietà della classe Background nella classe OfficeColors (forse con un prefisso Background), O utilizzare gli spazi dei nomi come si sta provando.

Buon divertimento :)

EDIT2:
Usa il metodo di Nir usando il segno + 'aw: OfficeColors + Background.OfficeColor1' per fare riferimento a classi nidificate, non lo sapevo :)

Dovresti dichiarare un'istanza della classe come una delle risorse. (Supponendo che CustomColorProperty non sia statico)

<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>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top