0

選択したテーマ(ダークまたはライト)に基づいていくつかのスタイルを変更する必要があるWindows Phone(7.5)アプリを作成しています。

このアプリでは、両方の場合に機能する色を見つけようとするだけでは不十分です。

これのいくつかは私が知っているコードで行うことができますが、これは実際には私のC#コードでは望まないマークアップ/スタイリングであるため、xamlに入れたいと思います:)

これが私が擬似コードでやりたいことです:

    <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

アプリケーションのリソースで特定のキーを検索してから、imagebrush の 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);

EDIT:起動時にスタイルをロードする方法

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 に答える
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 に答える