Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

My app is generally designed for dark theme, and I'm using StaticResources So if the user changes his phone's theme to light the app gets unreadable and unusable.

I tried to change manually color of each element and avoid using StaticResources and things like:

Style="{StaticResource PhoneTextLargeStyle}"

and StaticResources for font and color. But this is a hard work.

How can I globally change the theme to my app think the phone theme is dark? (it's a windows phone 8 app)

like image 654
user2490629 Avatar asked Jul 11 '13 00:07

user2490629


People also ask

Can I change the theme of my Windows Phone on Windows 10?

If you have theme sync turned on in your Windows Phone 8.1 settings, you’ll be able to change the theme and accent colour on your Windows 10 mobile device from your other Windows Phone and vice versa.

Can Windows 10 mobile devices SYNC start screens and theme settings?

Windows 10 Mobile can sync themes with Windows Phone 8.1 devices. While Windows 10 Mobile devices may not yet be able to sync start screens and theme settings with each other, they are still able to sync with Windows Phone 8.1 devices at the moment.

What do you like most about Windows Phone 8?

Windows Phone 8 gives you much more control over the lock screen that its predecessor. One of my favorite new tweaks is the ability to change the order and line up of quick status notification icons at the bottom of lock.

How can I Make my Windows Phone more HR-friendly?

Notice that Windows Phone allows you to create a different signature for each account, so you can have something a little more HR-friendly for the office and show your true NSFW colors in personal correspondence. Not into showy signatures? Go minimal and turn it off. 6. Button up the Internet Explorer address bar


2 Answers

Update : Since the release of Windows Phone 8.1, you can set the RequestedTheme attribute on any control, or even at the app level to override the Theme set by the users in the Settings.

Example to force the Light theme:

In code, within the constructor of the App class :

/// <summary>
/// Provides application-specific behavior to supplement the default Application class.
/// </summary>
public sealed partial class App : Application
{
    private TransitionCollection transitions;

    /// <summary>
    /// Initializes the singleton application object.  This is the first line of authored code
    /// executed, and as such is the logical equivalent of main() or WinMain().
    /// </summary>
    public App()
    {
        this.RequestedTheme = ApplicationTheme.Light;

        this.InitializeComponent();
        this.Suspending += this.OnSuspending;
    }
}

Or in XAML :

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

For the old Windows Phone 8 application model :

It is of course recommended in the design guidelines to use the theme resources to make sure your app works with any theme and accent color.

However if you really want to force the dark theme, here is a solution provided by Rudy Huyn on his blog: http://www.rudyhuyn.com/blog/2013/01/18/forcer-un-theme-sous-windows-phone-8/

The idea is to add a method in your App class that will override all the system brushes with the colors of the dark theme:

private void DarkTheme()
{
    ((SolidColorBrush)Resources["PhoneRadioCheckBoxCheckBrush"]).Color = ((SolidColorBrush)Resources["PhoneRadioCheckBoxBorderBrush"]).Color = ((SolidColorBrush)Resources["PhoneForegroundBrush"]).Color = Color.FromArgb(0xFF, 0xFF, 0xFF, 0xFF);
    ((SolidColorBrush)Resources["PhoneBackgroundBrush"]).Color = Color.FromArgb(0xFF, 0x00, 0x00, 0x00);
    ((SolidColorBrush)Resources["PhoneContrastForegroundBrush"]).Color = Color.FromArgb(0xFF, 0x00, 0x00, 0x00);
    ((SolidColorBrush)Resources["PhoneContrastBackgroundBrush"]).Color = Color.FromArgb(0xFF, 0xFF, 0xFF, 0xFF);
    ((SolidColorBrush)Resources["PhoneDisabledBrush"]).Color = Color.FromArgb(0x66, 0xFF, 0xFF, 0xFF);
    ((SolidColorBrush)Resources["PhoneProgressBarBackgroundBrush"]).Color = Color.FromArgb(0x19, 0xFF, 0xFF, 0xFF);
    ((SolidColorBrush)Resources["PhoneTextCaretBrush"]).Color = Color.FromArgb(0xFF, 0x00, 0x00, 0x00);
    ((SolidColorBrush)Resources["PhoneTextBoxBrush"]).Color = Color.FromArgb(0xBF, 0xFF, 0xFF, 0xFF);
    ((SolidColorBrush)Resources["PhoneTextBoxForegroundBrush"]).Color = Color.FromArgb(0xFF, 0x00, 0x00, 0x00);
    ((SolidColorBrush)Resources["PhoneTextBoxEditBackgroundBrush"]).Color = Color.FromArgb(0xFF, 0xFF, 0xFF, 0xFF);
    ((SolidColorBrush)Resources["PhoneTextBoxReadOnlyBrush"]).Color = Color.FromArgb(0x77, 0x00, 0x00, 0x00);
    ((SolidColorBrush)Resources["PhoneSubtleBrush"]).Color = Color.FromArgb(0x99, 0xFF, 0xFF, 0xFF);
    ((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(0xFF, 0xFF, 0xFF, 0xFF);
    ((SolidColorBrush)Resources["PhoneTextMidContrastBrush"]).Color = Color.FromArgb(0x99, 0xFF, 0xFF, 0xFF);
    ((SolidColorBrush)Resources["PhoneTextLowContrastBrush"]).Color = Color.FromArgb(0x73, 0xFF, 0xFF, 0xFF);
    ((SolidColorBrush)Resources["PhoneSemitransparentBrush"]).Color = Color.FromArgb(0xAA, 0x00, 0x00, 0x00);
    ((SolidColorBrush)Resources["PhoneChromeBrush"]).Color = Color.FromArgb(0xFF, 0x1F, 0x1F, 0x1F);

    ((SolidColorBrush)Resources["PhoneInactiveBrush"]).Color = Color.FromArgb(0x33, 0xFF, 0xFF, 0xFF);
    ((SolidColorBrush)Resources["PhoneInverseInactiveBrush"]).Color = Color.FromArgb(0xFF, 0xCC, 0xCC, 0xCC);
    ((SolidColorBrush)Resources["PhoneInverseBackgroundBrush"]).Color = Color.FromArgb(0xFF, 0xFF, 0xFF, 0xFF);
    ((SolidColorBrush)Resources["PhoneBorderBrush"]).Color = Color.FromArgb(0xBF, 0xFF, 0xFF, 0xFF);
}

Then, in the App constructor, you check whether the Light theme is enabled, and if it is, you override the theme:

if ((Visibility) Resources["PhoneLightThemeVisibility"] == Visibility.Visible)
{
    DarkTheme();
}
like image 74
Renaud Dumont Avatar answered Nov 15 '22 22:11

Renaud Dumont


I just wanted to recommend Jeff Wilcox's 'Windows Phone Theme Manager' nuget package as an easy way to implement this functionality for both light and dark themes.

http://www.nuget.org/packages/PhoneThemeManager/

Just add a function call to the App constructor:

ThemeManager.ToDarkTheme();

or

ThemeManager.ToLightTheme();
like image 28
snacky Avatar answered Nov 15 '22 23:11

snacky