如何在Windows Phone中应用主题特定的样式?

时间:2012-09-27 18:52:18

标签: windows-phone-7

我正在创建一个Windows Phone(7.5)应用程序,我需要根据选择的主题(黑暗或光明)更改某些样式。

这个应用程序只是试图找到一种适用于这两种情况的颜色,这还不够好。

其中一些可以在我知道的代码中完成,但我想把它放在xaml中,因为这实际上只是我在C#代码中不需要的标记/样式:)

这是我想在伪代码中做的事情:

    <ImageBrush x:Key="BackgroundImageBrush" ApplyForTheme="Dark" Stretch="None" 
ImageSource="/WindowsFanDkApp;component/Content/AppBackground.jpg"/>

    <ImageBrush x:Key="BackgroundImageBrush" ApplyForTheme="Light" Stretch="None" 
ImageSource="/WindowsFanDkApp;component/Content/AnotherAppBackground.jpg"/>

似乎无法找到有关如何做到这一点的任何资源......所以我担心这是不可能的:(

2 个答案:

答案 0 :(得分:0)

您可以在应用程序的资源中搜索特定的密钥,然后更改图像刷的uri。

以下是提示:

var isLightTheme = (Visibility)Application.Current.Resources["PhoneLightThemeVisibility"];
var theBrush = new ImageBrush();
var imageUri = new Uri(isLightTheme == Visibility.Visible ? "bg-light.jpg" : "bg-dark.jpg", UriKind.Relative);
theBrush .ImageSource = new System.Windows.Media.Imaging.BitmapImage(imageUri);

编辑: 如何在启动时加载样式

public App()
{
   ...
    //dynamic load style
    LoadDictionary(); 
   ...     
}

private void LoadDictionary()
{
    var dictionaries = Resources.MergedDictionaries;
    dictionaries.Clear();
    string source = String.Format("/MyProject;component/DarkStyles.xaml");
    var themeStyles = new ResourceDictionary { Source = new Uri(source, UriKind.Relative) };
    dictionaries.Add(themeStyles);
}

答案 1 :(得分:0)

正如Cyber​​maxs建议的那样,您可以使用ResourceDictionary / MergedDictionaries。以下是使用XAML的方法:

<Application.Resources>
  <ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
      <ResourceDictionary Source="TestStyles.xaml"/>
    </ResourceDictionary.MergedDictionaries>
  </ResourceDictionary>
</Application.Resources>