我正在创建一个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"/>
似乎无法找到有关如何做到这一点的任何资源......所以我担心这是不可能的:(
答案 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)
正如Cybermaxs建议的那样,您可以使用ResourceDictionary / MergedDictionaries。以下是使用XAML的方法:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="TestStyles.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>