0

我正在创建一个 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"/>

似乎找不到任何关于如何做到这一点的资源......所以恐怕这是不可能的:(

4

2 回答 2

0

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

<Application.Resources>
  <ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
      <ResourceDictionary Source="TestStyles.xaml"/>
    </ResourceDictionary.MergedDictionaries>
  </ResourceDictionary>
</Application.Resources>
于 2012-09-28T18:46:53.323 回答
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);
}
于 2012-09-27T19:19:26.070 回答