Files
HandyControl/src/Shared/HandyControl_Shared/Tools/Helper/ConfigHelper.cs
T
2024-07-14 22:23:46 +08:00

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
}