90 lines
2.7 KiB
C#
90 lines
2.7 KiB
C#
using System;
|
|
using System.ComponentModel;
|
|
using System.Globalization;
|
|
#if !NET40
|
|
using System.Runtime.CompilerServices;
|
|
#endif
|
|
using System.Windows;
|
|
using System.Windows.Markup;
|
|
using System.Windows.Media.Animation;
|
|
using System.Windows.Navigation;
|
|
using HandyControl.Data;
|
|
using HandyControl.Properties.Langs;
|
|
|
|
namespace HandyControl.Tools;
|
|
|
|
public class ConfigHelper : INotifyPropertyChanged
|
|
{
|
|
private ConfigHelper()
|
|
{
|
|
|
|
}
|
|
|
|
private static readonly Lazy<ConfigHelper> InstanceInternal = new(() => new ConfigHelper(), isThreadSafe: true);
|
|
|
|
public static ConfigHelper Instance => InstanceInternal.Value;
|
|
|
|
private XmlLanguage _lang = XmlLanguage.GetLanguage("zh-cn");
|
|
|
|
public XmlLanguage Lang
|
|
{
|
|
get => _lang;
|
|
set
|
|
{
|
|
if (!_lang.IetfLanguageTag.Equals(value.IetfLanguageTag))
|
|
{
|
|
_lang = value;
|
|
OnPropertyChanged(nameof(Lang));
|
|
}
|
|
}
|
|
}
|
|
|
|
public void SetLang(string lang)
|
|
{
|
|
LangProvider.Culture = new CultureInfo(lang);
|
|
Application.Current.Dispatcher.Thread.CurrentUICulture = new CultureInfo(lang);
|
|
Lang = XmlLanguage.GetLanguage(lang);
|
|
}
|
|
|
|
public void SetConfig(HandyControlConfig config)
|
|
{
|
|
SetLang(config.Lang);
|
|
SetTimelineFrameRate(config.TimelineFrameRate);
|
|
}
|
|
|
|
public void SetTimelineFrameRate(int rate) =>
|
|
Timeline.DesiredFrameRateProperty.OverrideMetadata(typeof(Timeline), new FrameworkPropertyMetadata(rate));
|
|
|
|
public void SetWindowDefaultStyle(object resourceKey = null)
|
|
{
|
|
var metadata = resourceKey == null
|
|
? new FrameworkPropertyMetadata(Application.Current.FindResource(typeof(Window)))
|
|
: new FrameworkPropertyMetadata(Application.Current.FindResource(resourceKey));
|
|
|
|
FrameworkElement.StyleProperty.OverrideMetadata(typeof(Window), metadata);
|
|
}
|
|
|
|
public void SetNavigationWindowDefaultStyle(object resourceKey = null)
|
|
{
|
|
var metadata = resourceKey == null
|
|
? new FrameworkPropertyMetadata(Application.Current.FindResource(typeof(NavigationWindow)))
|
|
: new FrameworkPropertyMetadata(Application.Current.FindResource(resourceKey));
|
|
|
|
FrameworkElement.StyleProperty.OverrideMetadata(typeof(NavigationWindow), metadata);
|
|
}
|
|
|
|
public event PropertyChangedEventHandler PropertyChanged;
|
|
|
|
#if NET40
|
|
protected virtual void OnPropertyChanged(string propertyName)
|
|
{
|
|
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
|
|
}
|
|
#else
|
|
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
|
|
{
|
|
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
|
|
}
|
|
#endif
|
|
}
|