2012-05-26 2 views
0

В моем текущем приложении Windows Phone 7 мы хотим использовать две темы: Dark And Light, и мы также используем некоторые элементы управления панорамированием и поворота в нашем приложении. Каждый элемент управления имеет другое изображение для каждой темной и легкой темы.Загрузка изображений, связанных с темными и светлыми темами в WP7

Для этой цели я сделал две отдельные темы в своем проекте. Однако я не могу загружать изображения для темы. Кто-нибудь может предложить, как я могу загружать изображения с темы в зависимости от того, является ли она темной или легкой версией?

+0

Почему вы капитализировать каждое слово? – Blender

+1

Я догадываюсь, что это мои любимые письма. Извините за беспокойство. :) Теперь вы можете прийти к реальной проблеме. i.e Мой вопрос –

ответ

0

I Guess Лучше Подход сделать два отдельных темы One для светлых и темных тему, а затем принять Decsion по применению Загрузка По Тема видимости Bit.

В нашей теме мы можем загрузить изображения Like That

<BitmapImage x:Key="SearchImage" UriSource="/Images/searchIcon.png" /> 
0

Вы можете использовать следующий фрагмент кода, чтобы решить тему, и соответственно установить изображения.

if ((double)Application.Current.Resources["PhoneDarkThemeOpacity"] == 1) 
{ 
    //Dark Theme 
} 
else 
{ 
    //Light Theme 
} 

Вы также можете посмотреть here для получения более подробной информации.

1

Если вы только отображать изображения, которые вы можете создать ValueConverter определить тему:

// Assumes a dark theme image is passed in the parameter variable 
public class ImageThemeValueConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if(parameter == null) return null; 

     Visibility darkBackgroundVisibility = 
      (Visibility)Application.Current.Resources["PhoneDarkThemeVisibility"]; 

     if (darkBackgroundVisibility == Visibility.Visible) 
     { 
      return new Uri(parameter.ToString(); 
     } 
     else 
     { 
      string path = parameter.ToString(); 
      path = System.IO.Path.GetDirectoryName(path) + System.IO.Path.GetFileNameWithoutExtension(path) + ".light"+System.IO.Path.GetExtension(path); 
      return new Uri(path); 
     } 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

и в вашем XAML:

<Image Source="{Binding Converter={StaticResource ImageThemeValueConverter}, ConverterParameter=Images/ThemeImage.png}"/> 

Если положить изображения в кнопки и изображения используйте только цвет фона и переднего плана (черный и белый), вы можете иметь стиль, который изменит цвет.

<Button Style="{StaticResource PhoneButton}"> 
    <ImageBrush ImageSource="/Images/appbar.save.png" Stretch="None"/> 
</Button> 

И стиль:

<Style TargetType="Button" x:Key="PhoneButton"> 
    <Setter Property="Width" Value="48"/> 
    <Setter Property="Height" Value="48"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="Button"> 
       <Grid> 
        <VisualStateManager.VisualStateGroups> 
         <VisualStateGroup x:Name="CommonStates"> 
          <VisualState x:Name="Normal"/> 
          <VisualState x:Name="MouseOver"> 
           <Storyboard> 
            <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.HorizontalAlignment)" Storyboard.TargetName="ContentContainer"> 
             <DiscreteObjectKeyFrame KeyTime="0"> 
              <DiscreteObjectKeyFrame.Value> 
               <HorizontalAlignment>Stretch</HorizontalAlignment> 
              </DiscreteObjectKeyFrame.Value> 
             </DiscreteObjectKeyFrame> 
            </ObjectAnimationUsingKeyFrames> 
            <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.VerticalAlignment)" Storyboard.TargetName="ContentContainer"> 
             <DiscreteObjectKeyFrame KeyTime="0"> 
              <DiscreteObjectKeyFrame.Value> 
               <VerticalAlignment>Stretch</VerticalAlignment> 
              </DiscreteObjectKeyFrame.Value> 
             </DiscreteObjectKeyFrame> 
            </ObjectAnimationUsingKeyFrames> 
           </Storyboard> 
          </VisualState> 
          <VisualState x:Name="Pressed"> 
           <Storyboard> 
            <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="ContentContainer"> 
             <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneBackgroundBrush}"/> 
            </ObjectAnimationUsingKeyFrames> 
            <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Fill" Storyboard.TargetName="Border"> 
             <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneForegroundBrush}"/> 
            </ObjectAnimationUsingKeyFrames> 
            <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Stroke" Storyboard.TargetName="Border"> 
             <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneForegroundBrush}"/> 
            </ObjectAnimationUsingKeyFrames> 
           </Storyboard> 
          </VisualState> 
          <VisualState x:Name="Disabled"> 
           <Storyboard> 
            <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="ContentContainer"> 
             <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneDisabledBrush}"/> 
            </ObjectAnimationUsingKeyFrames> 
            <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Stroke" Storyboard.TargetName="Border"> 
             <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneDisabledBrush}"/> 
            </ObjectAnimationUsingKeyFrames> 
            <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Fill" Storyboard.TargetName="Border"> 
             <DiscreteObjectKeyFrame KeyTime="0" Value="Transparent"/> 
            </ObjectAnimationUsingKeyFrames> 
           </Storyboard> 
          </VisualState> 
         </VisualStateGroup> 
        </VisualStateManager.VisualStateGroups> 
        <Grid> 
         <Ellipse x:Name="Border" Fill="{TemplateBinding Background}" Canvas.Left="0" Stretch="Fill" 
            StrokeThickness="3" StrokeLineJoin="Round" Stroke="{TemplateBinding BorderBrush}"/> 
         <Grid x:Name="ContentContainer" OpacityMask="{TemplateBinding Content}" Background="{TemplateBinding Foreground}"/> 
        </Grid> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style>