2

我想使用 C# 将颜色列表添加到 Metro 应用程序中的组合框。反过来,用户可以从列表中选择一种特定的颜色来改变背景。

可用的可能库是 Windows.UI.Colors

这是一个简单的桌面应用程序的链接:http ://www.c-sharpcorner.com/uploadfile/mahesh/how-to-load-all-colors-in-a-combobox-using-C-Sharp /

但我无法将它移植到地铁环境。

此外,作为列表项的颜色名称和颜色本身都是一个巨大的优势。

来自 MSDN 的另一个线程:http: //social.msdn.microsoft.com/Forums/en-US/winappswithcsharp/thread/880a3b5b-e287-4cdc-a1ab-d1cd4a19aedb/

4

2 回答 2

3

这段代码对我有用:

var colorsTypeInfo = typeof(Colors).GetTypeInfo();
var properties = colorsTypeInfo.DeclaredProperties;
Dictionary<string, string> colours = new Dictionary<string, string>();
foreach (var dp in properties)
{
    colours.Add(dp.Name, dp.GetValue(typeof(Colors)).ToString());
}

确保您已添加以下参考,否则将无法正常工作

using System.Reflection;
using Windows.UI;
于 2012-04-13T09:47:01.620 回答
2
<ComboBox x:Name="cbColorNames" Grid.Row="1" Height="40"
      ItemsSource="{Binding Colors}"
      SelectedItem="{Binding SelectedColorName, Mode=TwoWay}">
<ComboBox.ItemTemplate>
    <DataTemplate>
        <Grid Background="Black">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
            <Rectangle Width="35" Height="20" Fill="{Binding Name}" Margin="5,0"/>
            <TextBlock Grid.Column="1" Margin="10,0,0,0" Text="{Binding Name}" Foreground="White"/>
        </Grid>
    </DataTemplate>
</ComboBox.ItemTemplate>

这是 xaml 文件。

private static void LoadColors()
{
    var t = typeof(Colors);
    var ti = t.GetTypeInfo();
    var dp = ti.DeclaredProperties;
    colors = new List<PropertyInfo>();
    foreach (var item in dp)
    {
        colors.Add(item);
    }
}
private static List<PropertyInfo> colors;
public List<PropertyInfo> Colors
{
    get
    {
        if (colors == null)
            LoadColors();
        return colors;
    }
}

这是 C# 代码。

感谢大家的支持和帮助。

于 2012-04-13T09:45:23.917 回答