J'ai un problème de valeurs contraignantes à partir de propriétés statiques de la classe statique.
Ma classe:
namespace MyNamespace.Data
{
public static class MySettings
{
public static Color BackgroundColor { get; set; }
public static Color FontColor { get; set; }
}
}
Xaml:
<Page ...
xmlns:colors="clr-namespace:MyNamespace.Data"
...>
...
<Button Grid.Column="0" Content="Text"
Background="{Binding Source={x:Static s:MySettings.BackgroundColor}}"
Foreground="{Binding Source={x:Static s:MySettings.FontColor}}"
BorderBrush="{Binding Source={x:Static s:MySettings.FontColor}}"/>
et quand j'exécute ce fond, l'arrière-plan est défini, mais le reste reste inchangé ..
Le problème est que vos propriétés source sont d'un Color
Type et les propriétés de destination sont Brush
. Vous pouvez créer SolidColorBrush
Utilisation de votre couleur comme si:
<Button Content="Text">
<Button.Background>
<SolidColorBrush Color="{Binding Source={x:Static s:MySettings.BackgroundColor}}"/>
</Button.Background>
<Button.Foreground>
<SolidColorBrush Color="{Binding Source={x:Static s:MySettings.FontColor}}"/>
</Button.Foreground>
<Button.BorderBrush>
<SolidColorBrush Color="{Binding Source={x:Static s:MySettings.FontColor}}"/>
</Button.BorderBrush>
</Button>
Vous n'avez pas besoin d'utiliser static
propriétés ... Vous pouvez déclarer une classe à l'aide du modèle Singleton
, il ne peut donc y avoir qu'une seule instance, juste comme A static
classe. Il suffit d'utiliser des propriétés normales public
CLR dans cette classe ... quelque chose comme ça (mais avec des propriétés):
public class StateManager : INotifyPropertyChanged
{
private static StateManager instance;
private StateManager() { }
public StateManager Instance
{
get { return instance ?? (instance = new StateManager()); }
}
...
}
Ensuite, ne faites que référence à partir d'un modèle de vue de base à l'aide de la propriété Instance
comme ceci:
public StateManager StateManager
{
get { return StateManager.Instance; }
}
Ensuite, vous pouvez accéder aux propriétés de l'interface utilisateur simplement, comme ceci ::
<Ribbon:RibbonCheckBox Grid.Row="1" Label="Audit fields"
IsChecked="{Binding StateManager.AreAuditFieldsVisible}" ... />
<Ribbon:RibbonCheckBox Grid.Row="2" Label="ISRCs on results"
IsChecked="{Binding StateManager.AreIsrcsVisibleOnSearchResults}" ... />