Зависит от вашего намерения по поводу темы;как говорит Ханс в своем комментарии, обычно использование системной «темы» для элементов управления и внешнего вида окна считается преимуществом.
Однако для элементов темы в вашем приложении - например, для фона панели заголовка или цвета шрифта заголовкаи т. д. затем я построю интерфейс с определениями цветов / изображений в вашем приложении (например, ITheme
), а затем просто использую регулярную привязку данных для их соответствующей настройки во время выполнения, когда установлен ITheme
.
public interface ITheme
{
string Name { get; }
Image Logo { get; }
String BrandText1 { get; }
String BrandText2 { get; }
Image BrandBannerLogo { get; }
Color BrandPanelText_Left { get; }
Color BrandPanelText_Centre { get; }
}
На самом деле, вы могли бы сделать еще один шаг ... Например, в нашем приложении мы также определяем IThemeManager
:
public interface IThemeManager : INotifyPropertyChanged
{
event EventHandler CurrentThemeChanged;
ITheme CurrentTheme { get; set; }
Dictionary<string, ITheme> AvailableThemes { get; }
}
. Мы разрешаем вводить в ThemeManager зависимость, а затемпривязать к его Current
свойству в наших элементах управления:
[Dependency]
public IThemeManager ThemeManager
{
get { return _themeManager; }
set
{
if (_themeManager != value)
{
_themeManager = value;
if (_themeManager != null && !DesignMode)
{
_headerPanelBackgroundImageBinding = themePanel.DataBindings.Add("BackgroundImage", ThemeManager, "CuurentTheme.Logo", false, DataSourceUpdateMode.Never);
}
else
{
// Reset to the default
this.DataBindings.Remove(_headerPanelBackgroundImageBinding);
}
Invalidate();
}
}
}