Я занимаюсь разработкой приложения для форм Xamarin, и я решил, что для упрощения согласования стилей во всем приложении я бы оставил такие вещи, как цветовая палитра в одноэлементном классе, а затем привязал к нему свойства в XAML.
Первоначально я реализовал это как статический класс для использования x:Static
, но быстро понял, что это не может действительно работать, так как мне был нужен INotifyPropertyChanged, то есть при запуске приложения все было белым.
Теперь я реализовал класс как отдельный синглтон, например:
public class Colors : INotifyPropertyChanged
{
private Color primary;
public Color Primary
{
get
{
return primary;
}
set
{
primary = value;
NotifyPropertyChanged("Primary");
}
}
private Color success;
public Color Success
{
get
{
return success;
}
set
{
success = value;
NotifyPropertyChanged("Success");
}
}
private Color failure;
public Color Failure
{
get
{
return failure;
}
set
{
failure = value;
NotifyPropertyChanged("Failure");
}
}
private Colors()
{
Primary = new Color(142, 190, 232);
Success = new Color(134, 232, 133);
Failure = new Color(255, 265, 173);
}
private static Colors instance;
public static Colors Instance
{
get
{
if(instance == null)
{
instance = new Colors();
}
return instance;
}
}
// INotifyPropertyChanged implementation
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String info)
{
var handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(info));
}
}
}
Я пытался использовать {Binding Source={local:Colors.Instance.Primary}}
в качестве привязки для этих цветов, но мне не удается скомпилировать мой XAML с ошибкой MarkupExtension not found for local:Colors.Instance
, которая не очень полезна.
Документация Microsoft по этому вопросу тоже довольно бесполезна, поэтому я немного растерялся. Кто-нибудь может указать мне правильное направление?