2013-04-12 3 views
1

Я учусь WinRT, и я определить собственную тему для моей программы, в том числе перезаписывать некоторые цвета по умолчаниюXAML определяет цвет на основе другого цвета

В настоящее время я сделать что-то подобное в моей App.xaml

<Application> 
    <Application.Resource> 
     <ResourceDictionary> 
      ... 
      <Color x:Key="PrimaryColor">#FF0055A3</Color> 
      <Color x:Key="PrimaryColorHighlighShade">#FF1263B0</Color> 
      <Color x:Key="PrimaryColorClickShade">#FF2674BD</Color> 
      ... 
      <SolidColorBrush x:Key="SliderTrackDecreaseBackgroundThemeBrush" Color="{StaticResoruce PrimaryColor}" /> 
      <SolidColorBrush x:Key="SliderTrackDecreasePointerOverBackgroundThemeBrush" Color="{StaticResoruce PrimaryColorHighlighShade}" /> 
      <SolidColorBrush x:Key="SliderTrackDecreasePressedBackgroundThemeBrush" Color="{StaticResoruce PrimaryColorClickShade}" /> 
      ... 
     </ResourceDictionary> 
    </Application.Resource> 

Чтобы получить Выделите тень и ClickShade, я открыть фотошоп, Гото ВШБ Slider, и переместить S вниз и B, но мне было интересно, если я мог бы сделать это в XAML, так что все, что я должен был сделать, что изменит PrimaryColor, а другие цвета, е соответственно.

ответ

5

Вы можете привязываться к статическому ресурсу (см. Is it possible to supply a type converter for a static resource in WPF?) и использовать преобразователь значений для создания нового цвета на основе цвета, который вы предоставляете.

Edit:

Вот код, чтобы объяснить:

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

class ColorConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if (value is Color) 
     { 
      var theColor = Color.Add((Color)value, Color.FromArgb(255,255,0,0)); 
      return theColor; 
     } 
     else 
     { 
      return null; 
     } 
    } 

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

Мой app.xaml выглядит следующим образом:

<Application x:Class="SO_15979100.App" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:local="clr-namespace:SO_15979100" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      StartupUri="MainWindow.xaml"> 
    <Application.Resources> 
     <Color x:Key="PrimaryColor">#FF0055A3</Color> 
     <local:ColorConverter x:Key="MyConverter" /> 
     <SolidColorBrush x:Key="PrimaryColorBrush" Color="{StaticResource PrimaryColor}" /> 
     <SolidColorBrush x:Key="ConvertedPrimaryColorBrush" Color="{Binding Source={StaticResource PrimaryColor}, Converter={StaticResource MyConverter}}" /> 
    </Application.Resources> 
</Application> 

Обратите внимание, что я включил локальное пространство имен, чтобы иметь конвертер под рукой.

Мое главное окно определяется следующим образом:

<Window x:Class="SO_15979100.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition /> 
      <ColumnDefinition /> 
     </Grid.ColumnDefinitions> 

     <Rectangle Grid.Column="0" Fill="{StaticResource PrimaryColorBrush}" /> 
     <Rectangle Grid.Column="1" Fill="{StaticResource ConvertedPrimaryColorBrush}" /> 
    </Grid> 
</Window> 

Прямоугольник слева ваш цвет, один справа розовый.

0

Вам не нужно использовать Photoshop для изменения цветовых пространств. Как Visual Studio 2012, так и Expression Blend имеют инструменты RGB, HSB, HLS и CYMK.

  • В своем словаре ресурсов выберите SolidColorBrush.
  • В свойствах сетки щелкните элемент цвета.

enter image description here

  • В раскрывающемся меню выберите "Редактировать ресурс".

enter image description here

  • Вот трюк. Нажмите буквы R, G или B (те, у которых есть подчеркивания) в диалоговом окне «Ресурсы». Это приводит к появлению меню в редакторе Visual Studio. Выберите новое цветовое пространство.

enter image description here

  • Выбрать другой цветовое (HSB в вашем примере).Затем используйте диалог, чтобы изменить значения насыщенности или яркости.

enter image description here

  • Наконец, нажмите кнопку OK, значение цвета изменяется в Словаре ресурсов.
+0

Вы все равно должны отредактировать цвет через конструктора. Если вы хотите автоматически изменить HSB, вам нужно будет написать код. –

Смежные вопросы