【问题标题】:How to force windows phone 8 app to be run in light theme如何强制 Windows Phone 8 应用程序以浅色主题运行
【发布时间】:2013-10-09 12:38:56
【问题描述】:

我开发了一个 windows phone 应用程序,我希望该应用程序以浅色主题运行,而不管用户设置了什么。意味着有没有办法为 windows phone 8 应用程序设置默认主题。

【问题讨论】:

    标签: c# windows-phone-8 windows-phone-8-emulator


    【解决方案1】:

    您可以使用 Jeff Wilcox 的ThemeManager

    将它添加到您的项目中(有一个NuGet package 可用)并从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...
    }
    

    您可以找到用法示例on his website

    【讨论】:

    • 这里需要哪个nuget包?
    • 您点击了链接吗?您将被直接导航到包页面。
    • 太糟糕了,windows phone 8.1 不支持它
    • 对于 8.1 应用程序的 SL,您只需获取源代码并编译即可。
    • 对于 8.1 应用,请查看此jayway.com/2014/04/17/…
    【解决方案2】:

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

    <Application
        x:Class="App26.App"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        RequestedTheme="Light"
        xmlns:local="using:App26">
    </Application>
    

    或者

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

    来源:Windows phone 8 How to be always on one theme even if phone's theme changed

    【讨论】:

      【解决方案3】:

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

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

      回答

      当 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。

      【讨论】:

      • 行异常:var themeStyles = new ResourceDictionary { Source = new Uri(source, UriKind.Relative) };
      • 您是否将LightStyles.xaml 文件添加到主题文件夹(如答案所述)?
      • 但这就像安排以获得结果一样。是否有任何全球解决方案?
      【解决方案4】:

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

      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);
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-04-28
        • 1970-01-01
        • 2013-08-15
        • 2014-08-30
        • 2020-07-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多