如何在uwp中获取系统颜色列表

Ive*_*Ive 2 c# uwp

我想构建简单的ColorComboBox,但我不知道,如何在通用Windows平台中使用c#获取系统颜色(KnownColors).无法访问类型KnownColors.

Rob*_*SFT 7

Windows.UI.Colors类有已知的颜色从艾莉斯蓝到黄绿色特性.如果您需要这些颜色的列表,可以使用反射来遍历属性名称以构建您自己的列表以进行绑定.

例如:

用于保存我们的颜色信息的类

public class NamedColor
{
    public string Name { get; set; }
    public Color Color { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

和绑定到的属性:

public ObservableCollection<NamedColor> Colors { get; set; }
Run Code Online (Sandbox Code Playgroud)

使用反射构建NamedColor列表:

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

还有一些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>
Run Code Online (Sandbox Code Playgroud)