using System.ComponentModel; namespace Lattice.Themes; /// /// Базовый класс для пакетов тем. /// public abstract class ThemePack : INotifyPropertyChanged { private string _name; private string _description = string.Empty; private string _version = "1.0.0"; private bool _isDark; public event PropertyChangedEventHandler? PropertyChanged; protected ThemePack(string name) { _name = name ?? throw new ArgumentNullException(nameof(name)); } /// /// Название темы. /// public string Name { get => _name; set { if (_name != value) { _name = value; OnPropertyChanged(nameof(Name)); } } } /// /// Описание темы. /// public string Description { get => _description; set { if (_description != value) { _description = value; OnPropertyChanged(nameof(Description)); } } } /// /// Версия темы. /// public string Version { get => _version; set { if (_version != value) { _version = value; OnPropertyChanged(nameof(Version)); } } } /// /// Определяет, является ли тема тёмной. /// public bool IsDark { get => _isDark; set { if (_isDark != value) { _isDark = value; OnPropertyChanged(nameof(IsDark)); } } } /// /// Возвращает список словарей ресурсов, которые должны быть подключены. /// public abstract IReadOnlyList GetResourceUris(); /// /// Вызывается при применении темы. /// public virtual void OnApply() { // Может быть переопределено в производных классах } /// /// Вызывается при удалении темы. /// public virtual void OnRemove() { // Может быть переопределено в производных классах } protected virtual void OnPropertyChanged(string propertyName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } }