我正在尝试使用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'是'type',在给定的上下文中无效
任何人都可以帮我一把吗?
答案 0 :(得分:9)
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();
}
答案 1 :(得分:2)
string[] colors = Enum.GetNames(typeof(System.Drawing.KnownColor));
答案 2 :(得分: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;
}
答案 3 :(得分: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
答案 4 :(得分:0)
我的情况如下,我希望有人能发现它有用:
我在wpf窗口中有一个ComboBox控件,我想显示Brushes类中的所有颜色。
MainWindow.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>
MainWindow.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 =”的绑定。 =>因为颜色列表不是对象列表而是字符串列表,所以绑定路径=。是将控件绑定到字符串名称的方法
也... 将te ComboBox HorizontalContentAlignment =“ Stretch”设置为将Rectangle延伸到ComboBox的宽度...请尝试查看其差异。
继续编码, JJ