如何强制Windows Phone 8应用程序以轻主题运行

我已经开发了一个Windows手机应用程序,我希望该应用程序以轻主题运行,无论用户设置了什么。 意味着有没有办法为Windows Phone 8应用程序设置默认主题。

你可以使用Jeff Wilcox的ThemeManager

将它添加到您的项目中(有一个可用的NuGet包 )并从App()构造函数中调用它。

 public App() { // Global handler for uncaught exceptions. UnhandledException += Application_UnhandledException; // Standard Silverlight initialization InitializeComponent(); // Phone-specific initialization InitializePhoneApplication(); ThemeManager.ToLightTheme(); // Other code that might be here already... } 

您可以在他的网站上找到用法示例。

对于Windows Phone 8.1,您可以使用:

   

要么

 public App() { this.RequestedTheme = ApplicationTheme.Light; this.InitializeComponent(); this.Suspending += this.OnSuspending; } 

来源: Windows phone 8即使手机的主题发生变化,如何始终在一个主题上

来自http://developergoodies.blogspot.nl/2012/10/force-windows-phone-theme.html

(经过测试和validation;获取主题;从资源中复制以防止将来无法访问)

回答

当UI专为黑暗主题设计时,它在光主题上看起来不太好,反之亦然。

为了防止这种情况,应用程序可以强制默认的暗或亮主题。

在应用程序类的构造函数中,使用此代码强制使用黑暗主题:

 if ((Visibility)Application.Current.Resources["PhoneLightThemeVisibility"] == Visibility.Visible) MergeCustomColors("/Themes/DarkStyles.xaml"); 

或者这个代码强制轻量级主题:

 if ((Visibility)Application.Current.Resources["PhoneDarkThemeVisibility"] == Visibility.Visible) MergeCustomColors("/Themes/LightStyles.xaml"); 

项目中的任何位置都放置此方法:

 private void MergeCustomColors(String Theme) { ResourceDictionary Dictionaries = new ResourceDictionary(); String source = String.Format(Theme); var themeStyles = new ResourceDictionary { Source = new Uri(source, UriKind.Relative) }; Dictionaries.MergedDictionaries.Add(themeStyles); ResourceDictionary appResources = Current.Resources; foreach (DictionaryEntry entry in Dictionaries.MergedDictionaries[0]) { SolidColorBrush ColorBrush = entry.Value as SolidColorBrush; SolidColorBrush ExistingBrush = appResources[entry.Key] as SolidColorBrush; if (ExistingBrush != null && ColorBrush != null) { ExistingBrush.Color = ColorBrush.Color; } } } 

该代码假定项目包含名为Themes的文件夹中的DarkStyles.xaml和LightStyles.xaml文件。

在您的应用程序构造函数中调用此方法

 private void LightTheme() { ((SolidColorBrush)Resources["PhoneRadioCheckBoxCheckBrush"]).Color = ((SolidColorBrush)Resources["PhoneRadioCheckBoxBorderBrush"]).Color = ((SolidColorBrush)Resources["PhoneForegroundBrush"]).Color = Color.FromArgb(0xDE, 0x00, 0x00, 0x00); ((SolidColorBrush)Resources["PhoneBackgroundBrush"]).Color = Color.FromArgb(0xFF, 0xFF, 0xFF, 0xFF); ((SolidColorBrush)Resources["PhoneContrastForegroundBrush"]).Color = Color.FromArgb(0xFF, 0xFF, 0xFF, 0xFF); ((SolidColorBrush)Resources["PhoneContrastBackgroundBrush"]).Color = Color.FromArgb(0xDE, 0x00, 0x00, 0x00); ((SolidColorBrush)Resources["PhoneDisabledBrush"]).Color = Color.FromArgb(0x4D, 0x00, 0x00, 0x00); ((SolidColorBrush)Resources["PhoneProgressBarBackgroundBrush"]).Color = Color.FromArgb(0x19, 0x00, 0x00, 0x00); ((SolidColorBrush)Resources["PhoneTextCaretBrush"]).Color = Color.FromArgb(0xDE, 0x00, 0x00, 0x00); ((SolidColorBrush)Resources["PhoneTextBoxBrush"]).Color = Color.FromArgb(0x26, 0x00, 0x00, 0x00); ((SolidColorBrush)Resources["PhoneTextBoxForegroundBrush"]).Color = Color.FromArgb(0xDE, 0x00, 0x00, 0x00); ((SolidColorBrush)Resources["PhoneTextBoxEditBackgroundBrush"]).Color = Color.FromArgb(0x00, 0x00, 0x00, 0x00); ((SolidColorBrush)Resources["PhoneTextBoxReadOnlyBrush"]).Color = Color.FromArgb(0x2E, 0x00, 0x00, 0x00); ((SolidColorBrush)Resources["PhoneSubtleBrush"]).Color = Color.FromArgb(0x66, 0x00, 0x00, 0x00); ((SolidColorBrush)Resources["PhoneTextBoxSelectionForegroundBrush"]).Color = Color.FromArgb(0xFF, 0xFF, 0xFF, 0xFF); ((SolidColorBrush)Resources["PhoneButtonBasePressedForegroundBrush"]).Color = Color.FromArgb(0xFF, 0xFF, 0xFF, 0xFF); ((SolidColorBrush)Resources["PhoneTextHighContrastBrush"]).Color = Color.FromArgb(0xDE, 0x00, 0x00, 0x00); ((SolidColorBrush)Resources["PhoneTextMidContrastBrush"]).Color = Color.FromArgb(0x73, 0x00, 0x00, 0x00); ((SolidColorBrush)Resources["PhoneTextLowContrastBrush"]).Color = Color.FromArgb(0x40, 0x00, 0x00, 0x00); ((SolidColorBrush)Resources["PhoneSemitransparentBrush"]).Color = Color.FromArgb(0xAA, 0xFF, 0xFF, 0xFF); ((SolidColorBrush)Resources["PhoneInactiveBrush"]).Color = Color.FromArgb(0x33, 0x00, 0x00, 0x00); ((SolidColorBrush)Resources["PhoneInverseInactiveBrush"]).Color = Color.FromArgb(0xFF, 0xE5, 0xE5, 0xE5); ((SolidColorBrush)Resources["PhoneInverseBackgroundBrush"]).Color = Color.FromArgb(0xFF, 0xDD, 0xDD, 0xDD); ((SolidColorBrush)Resources["PhoneBorderBrush"]).Color = Color.FromArgb(0x99, 0x00, 0x00, 0x00); ((SolidColorBrush)Resources["PhoneAccentBrush"]).Color = Color.FromArgb(0xFF, 0x00, 73, 99); ((SolidColorBrush)Resources["PhoneChromeBrush"]).Color = Color.FromArgb(0xFF, 0xDD, 0xDD, 0xDD); }