我想生成不同的颜色'列表框中的项目。例如 - 每个项目中不同颜色的矩形。我无法这样做。 到目前为止,我已经创建了一个这样的类
public class RandomColorGenerator
{
public Color randomBrush { get; set; }
private static Random randomColor = new Random();
private static uint[] uintColors =
{
0xFF34AADC,0xFFFF2D55,0xFF007AFF,0xFFFF9500,0xFF4CD964,
0xFFFFCC00,0xFF5856D6,0xFFFF3B30,0xFFFF4981,0xFFFF3A2D
};
public RandomColorGenerator()
{
randomBrush = generateRandomColor();
}
private static Color ConvertColor(uint uintCol)
{
byte A = (byte)((uintCol & 0xFF000000) >> 24);
byte R = (byte)((uintCol & 0x00FF0000) >> 16);
byte G = (byte)((uintCol & 0x0000FF00) >> 8);
byte B = (byte)((uintCol & 0x000000FF) >> 0);
return Color.FromArgb(A, R, G, B); ;
}
public static Color generateRandomColor()
{
return ConvertColor(uintColors[randomColor.Next(0, 9)]);
}
}
和XAML
<ListBox x:Name="TestListBox" >
<ListBox.ItemTemplate>
<DataTemplate>
<Rectangle Margin="10" Height="100" Width="400" >
<Rectangle.Fill>
<SolidColorBrush Color="{Binding randomBrush,
Source={StaticResource colorgenerate}}">
</SolidColorBrush>
</Rectangle.Fill>
</Rectangle>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
完成所有这些后,我得到了这样的结果 -
重新启动应用后,我明白了
虽然每次运行应用程序时都会出现随机颜色。但是一种颜色适用于所有矩形。
我不知道如何获得理想的结果。 我想要这样的东西 -
任何帮助都将不胜感激。
答案 0 :(得分:4)
重点是,只有在创建类RandomColorGenerator时才会生成RabdomBrush。
每次调用时都应该生成新的RandomBrush。有点像这样:
public class RandomColorGenerator
{
public Color randomBrush {
get {return generateRandomColor(); }
}
....
答案 1 :(得分:1)
您的所有代码都已准备就绪。只需在代码中进行这些更改。
您的列表框xaml
<ListBox x:Name="TestListBox">
<ListBox.ItemTemplate>
<DataTemplate>
<Rectangle Margin="10" Height="100" Width="400" >
<Rectangle.Fill>
<SolidColorBrush Color="{Binding}">
</SolidColorBrush>
</Rectangle.Fill>
</Rectangle>
</DataTemplate>
</ListBox.ItemTemplate>
在您的页面构造函数中。添加以下代码
List<RandomColorGenerator> list = new List<RandomColorGenerator>();
list.Add(new RandomColorGenerator());
list.Add(new RandomColorGenerator());
list.Add(new RandomColorGenerator());
list.Add(new RandomColorGenerator());
list.Add(new RandomColorGenerator());
list.Add(new RandomColorGenerator());
TestListBox.ItemsSource = list;
希望这有帮助
答案 2 :(得分:1)
对于你的不重复的问题,我已经更新了你的课程,请参阅下面的课程。现在你的颜色不会重复。但请确保您不要添加超过10种颜色。
public class RandomColorGenerator
{
private static List<int> addedIndex = new List<int>();
public Color randomBrush { get { return generateRandomColor(); } }
private static Random randomColor = new Random();
private static uint[] uintColors =
{
0xFF34AADC,0xFFFF2D55,0xFF007AFF,0xFFFF9500,0xFF4CD964,
0xFFFFCC00,0xFF5856D6,0xFFFF3B30,0xFFFF4981,0xFFFF3A2D
};
private static Color ConvertColor(uint uintCol)
{
byte A = (byte)((uintCol & 0xFF000000) >> 24);
byte R = (byte)((uintCol & 0x00FF0000) >> 16);
byte G = (byte)((uintCol & 0x0000FF00) >> 8);
byte B = (byte)((uintCol & 0x000000FF) >> 0);
return Color.FromArgb(A, R, G, B); ;
}
public static Color generateRandomColor()
{
int random = randomColor.Next(0, 9);
if (addedIndex.Count < 9)
{
while (addedIndex.Contains(random))
{
random = randomColor.Next(0, 9);
}
addedIndex.Add(random);
}
return ConvertColor(uintColors[random]);
}
}
希望这会有所帮助
答案 3 :(得分:0)
您可能需要将一组Color分配给ListBox,如下面的代码片段中所示:
在Xaml中:
<ListBox x:Name="TestListBox" ItemSource={Binding ColorList}>
<ListBox.ItemTemplate>
<DataTemplate>
<Rectangle Margin="10" Height="100" Width="400" >
<Rectangle.Fill>
<SolidColorBrush Color="{Binding}">
</SolidColorBrush>
</Rectangle.Fill>
</Rectangle>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
在视图模型中:
public class RandomColorGeneratorViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
private List<Color> _colorList;
public List<Color> ColorList
{
get { return _colorList; }
set { _colorList = value; }
}
}
在Window / UserControl构造函数中,添加以下行:
public MainWindow()
{
InitializeComponent();
this.DataContext = new RandomColorGeneratorViewModel();
}
现在,生成随机颜色的最佳方法是生成整数的红色,绿色,蓝色值,并将它们转换为十六进制并分配给此集合。