5

我正在尝试用 system.drwaing.color 项目填充我的列表以选择随机颜色并将其设置为 backColor。

这是我的代码:

    List<Color> myList = new List<Color>();
    //rc.Add(Color.Chartreuse);
    //rc.Add(Color.DeepSkyBlue);
    //rc.Add(Color.MediumPurple);
    foreach (Color clr in System.Drawing.Color)
    {
      //error  
    }
    Random random = new Random();
    Color color = myList[random.Next(myList.Count - 1)];
    this.BackColor = color;

错误:“System.Drawing.Color”是“类型”,在给定的上下文中无效

谁能帮我一把?

4

5 回答 5

11
public static List<Color> ColorStructToList()
{
    return typeof(Color).GetProperties(BindingFlags.Static | BindingFlags.DeclaredOnly | BindingFlags.Public)
                        .Select(c => (Color)c.GetValue(null, null))
                        .ToList();
}

List<Color> colorList = ColorStructToList();


private void randomBackgroundColorButton_Click(object sender, EventArgs e)
{
    List<Color> myList = ColorStructToList();
    Random random = new Random();
    Color color = myList[random.Next(myList.Count - 1)];
    this.BackColor = color;
}

public static List<Color> ColorStructToList()
{
    return typeof(Color).GetProperties(BindingFlags.Static | BindingFlags.DeclaredOnly | BindingFlags.Public)
                        .Select(c => (Color)c.GetValue(null, null))
                        .ToList();
}
于 2013-04-21T12:16:09.607 回答
3

这个问题

string[] colors = Enum.GetNames(typeof(System.Drawing.KnownColor));
于 2013-04-21T11:50:07.637 回答
0

这是您的代码:

private List<Color> GetAllColors()
{
    List<Color> allColors = new List<Color>();

    foreach (PropertyInfo property in typeof(Color).GetProperties())
    {
        if (property.PropertyType == typeof(Color))
        {
            allColors.Add((Color)property.GetValue(null));
        }
    }

    return allColors;
}
于 2015-06-28T00:11:58.963 回答
0

我的场景如下,我希望有人觉得它有用:

我在 wpf 窗口中有一个 ComboBox 控件,我想显示 Brushes 类中的所有颜色。

主窗口.xaml

在窗口声明中,我添加了以下参考:

 xmlns:converters="clr-namespace:MyProjectName.Converters"

在 Window.Resources 部分中,我使用“ColorConverter”名称注册了转换器:

 <converters:StringToColorConverter x:Key="ColorConverter"/>

在我的 xaml 代码的某个地方,我实现了以下组合框:

<ComboBox Grid.Column="1" Grid.Row="3" ItemsSource="{Binding VBColors}"
 Margin="5,5,0,5" HorizontalContentAlignment="Stretch">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <Rectangle Height="20" Fill="{Binding Path=., Converter={StaticResource ColorConverter}}"/>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

主窗口.cs

 private List<string> _vbColors =  typeof(Brushes).GetProperties().Select(x => x.Name).ToList();
 public List<string> VBColors
 { get { return _vbColors; } }

StringToColorsConverter.cs

    [ValueConversion(typeof(bool), typeof(SolidColorBrush))]
    public sealed class StringToColorConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            var stringValue = (string)value;
            SolidColorBrush solidColor = (SolidColorBrush)new BrushConverter().ConvertFromString(stringValue);
            return solidColor;
        }

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

一些技巧....

在 ComboBox.ItemTemplate 绑定中,您将找到与“Binding Path=”的绑定。=>由于颜色列表不是对象列表而是字符串列表,Binding Path=。是将控件绑定到字符串名称的方法

另外...设置 te ComboBox Horizo​​ntalContentAlignment="Stretch" 用于将 Rectangle 拉伸到 ComboBox 宽度...尝试查看差异。

继续编码,JJ

于 2019-07-24T06:53:59.237 回答
0

根据 Artxzta 在 VB.net 中的回答:

Imports System.Reflection

Dim allColors As New List(Of String)

For Each [property] As PropertyInfo In GetType(Colors).GetProperties()
        allColors.Add([property].Name)
Next
于 2017-01-07T08:07:13.633 回答