using WPFluent.Appearance; using WPFluent.Extensions; using WPFluent.Markup; namespace WPFluent; /// /// 表示 UI 应用程序。 /// public class UiApplication { private static UiApplication? _uiApplication; private readonly Application? application; private Window? _mainWindow; private ResourceDictionary? _resources; /// /// 初始化 实例. /// public UiApplication(Application application) { if (application is null) { return; } if (!ApplicationHasResources(application)) { return; } this.application = application; System.Diagnostics.Debug .WriteLine($"INFO | {typeof(UiApplication)} application is {this.application}", "WPFluent"); } private static bool ApplicationHasResources(Application application) { return application .Resources.MergedDictionaries .Where(e => e.Source is not null) .Any( e => e.Source .ToString() .Contains(ApplicationThemeManager.LibraryNamespace, StringComparison.OrdinalIgnoreCase)); } /// /// 将应用程序的 变为 shutdown 模式。 /// public void Shutdown() { application?.Shutdown(); } /// /// Gets or sets the application's main window. /// public object TryFindResource(object resourceKey) { return Resources[resourceKey]; } /// /// 获取当前应用程序。 /// public static UiApplication Current { get { _uiApplication ??= new UiApplication(Application.Current); return _uiApplication; } } /// /// Gets a value indicating whether the application is running outside of the desktop app context. /// public bool IsApplication => application is not null; /// /// Gets or sets the application's main window. /// public Window? MainWindow { get => application?.MainWindow ?? _mainWindow; set { if (application != null) { application.MainWindow = value; } _mainWindow = value; } } /// /// Gets or sets the application's resources. /// public ResourceDictionary Resources { get { if (_resources is null) { _resources = []; try { var themesDictionary = new ThemesDictionary(); var controlsDictionary = new ControlsDictionary(); _resources.MergedDictionaries.Add(themesDictionary); _resources.MergedDictionaries.Add(controlsDictionary); } catch { } } return application?.Resources ?? _resources; } set { if (application is not null) { application.Resources = value; } _resources = value; } } }