2015-08-19 4 views
1

Я хотел бы создать простой ColorComboBox, но я не знаю, Как получить системные цвета (KnownColors) в Universal Windows Platform с помощью C#. Тип KnownColors недоступен.Как получить список системных цветов в uwp

+0

Что вы имеете в виду с системными цветами? Все доступные цвета акцента? Все тематические ресурсы типа Color? – sibbl

ответ

4

Windows.UI.Colors класса имеет свойство известных цветов от AliceBlue до желто-зеленого. Если вам нужен список этих цветов, вы можете использовать отражение, чтобы пройти через имена свойств, чтобы создать свой собственный список для привязки.

Например:

класс для хранения нашей информации о цвете

public class NamedColor 
{ 
    public string Name { get; set; } 
    public Color Color { get; set; } 
} 

и свойство связываться с:

public ObservableCollection<NamedColor> Colors { get; set; } 

Использование отражения для создания списка NamedColor:

foreach (var color in typeof(Colors).GetRuntimeProperties()) 
{ 
    Colors.Add(new NamedColor() { Name = color.Name, Color = (Color)color.GetValue(null) }); 
} 

И некоторые Xaml для привязки к цветовой коллекции:

<ComboBox ItemsSource="{Binding Colors}"> 
    <ComboBox.ItemTemplate> 
     <DataTemplate> 
      <Grid> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="auto" /> 
        <ColumnDefinition Width="*" /> 
       </Grid.ColumnDefinitions> 

       <Rectangle Grid.Column="0" Height="30" Width="30" Margin="2" VerticalAlignment="Center" Stroke="{ThemeResource SystemControlForegroundBaseHighBrush }" StrokeThickness="1"> 
        <Rectangle.Fill> 
         <SolidColorBrush Color="{Binding Color}" /> 
        </Rectangle.Fill> 
       </Rectangle> 
       <TextBlock Text="{Binding Name}" Grid.Column="1" VerticalAlignment="Center"/> 
      </Grid> 
     </DataTemplate> 
    </ComboBox.ItemTemplate> 
</ComboBox> 
+0

Спасибо, он отлично работает! – Ive

+0

Для начинающего UWP: вам нужно использовать System.Reflection; – Paulustrious

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