Come impostare la proprietà personalizzata come valore XAML?
-
06-07-2019 - |
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.
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>