Как установить несколько фонов холста для умножения отдельных цветов? - PullRequest
0 голосов
/ 13 мая 2018

Я хочу использовать несколько холстов и устанавливать различный фон для каждого холста.Я назначаю фон холста для функции генерации случайных цветов.Но он возвращает только один цвет для всего холста.

wpf пример:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition></ColumnDefinition>
        <ColumnDefinition></ColumnDefinition>
    </Grid.ColumnDefinitions>

    <Canvas Name="canvas1" Grid.Column="0"></Canvas>
    <Canvas Name="canvas2" Grid.Column="1"></Canvas>
</Grid>

c # пример:

    private void SetColor()
    {
         canvas1.Background = new SolidColorBrush(RandomNewColor());
         canvas2.Background = new SolidColorBrush(RandomNewColor());
    }

    private Color RandomNewColor()
    {
        Random RandomColor = new Random();
        Byte[] _byte = new Byte[3];

        RandomColor.NextBytes(_byte);
        byte red = _byte[0];
        byte green = _byte[1];
        byte blue = _byte[2];

        return Color.FromArgb(255, red, green, blue);
    }

1 Ответ

0 голосов
/ 14 мая 2018

Класс Random использует начальное значение для генерации своей последовательности чисел.Вызывая его без параметра, он использует системные часы для начального числа и, скорее всего, вызывается слишком быстро между двумя элементами управления canvas, поэтому в итоге используется одинаковое начальное значение для обоих.Из документов в Microsoft :

Однако, поскольку часы имеют конечное разрешение, использование конструктора без параметров для создания различных случайных объектов в тесной последовательности создает генераторы случайных чисел, которые производят идентичные последовательностислучайных чисел.

Вы можете добавить параметр к вызову конструктора, но я не думаю, что это действительно решит вашу проблему.Лучше всего переместить экземпляр Random и сделать его единственным членом класса.т.е.

private Random RandomColor = new Random();
private Color RandomNewColor()
    {
        Byte[] _byte = new Byte[3];
        RandomColor.NextBytes(_byte);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...