У меня есть приложение WPF с «окном сетки».В этом окне нет добавленного XAML.Я создаю сетку (столбцы и строки), затем помещаю прямоугольник в каждый из них в C #.Это позволяет мне создавать сетку, в которой я устанавливаю «Штрих», и отображать местоположения на сетке, когда я устанавливаю «Заполнение».
Вся сетка установлена одинаково, другими словами, если одна часть сетки красная, вся сетка красная.В настоящее время я устанавливаю сетку, перебирая все прямоугольники и устанавливая свойство 'Stroke'.Это прекрасно работает, но кажется очень медленным по сравнению с большинством других операций.Я хотел бы связать свойство stroke с переменной в C # (если итерация не является разумным способом справиться с этим).
Я рассмотрел довольно много вопросов здесь, но большинство хочет использовать XAML.Мой код ниже основан на Binding без XAML [WPF] .Нет ошибок, сетка просто никогда не появляется.
// put a rectangle in each square
for (int i = 0; i < x; i++) // for each column
{
for (int j = 0; j < y; j++) // for each row
{
// create a new rectangle with name, height, width, and starting color (transparent)
var rect = new Rectangle()
{
Name = $"rec{(i + 1).ToString("00")}{(j + 1).ToString("00")}", //column 5 row 2 -> rec0502
Height = squareSize,
Width = squareSize,
Fill = _ColorOff
};
// create the binding
var binder = new Binding
{
Source = _GridColor, // Brush that is updated on color change
Path = new PropertyPath("Stroke")
};
// apply the binding to the rectangle
rect.SetBinding(Rectangle.StrokeProperty, binder);
rect.DataContext = binder;
// place the rectangle
Grid.SetColumn(rect, i); // current column
Grid.SetRow(rect, (y - j - 1)); // same row but from the bottom (puts point 0,0 at bottom left)
// add the rectangle to the grid
grdBattleGrid.Children.Add(rect);
}
}
Даже если итерация в порядке, я все равно хотел бы знать, что я делаю неправильно.
РЕДАКТИРОВАТЬ: Имя цветавыбирается из ComboBox в отдельном окне.Это обновляет пользовательские настройки, которые, в свою очередь, генерируют событие, на которое подписано мое «окно сетки».Я преобразую имя в SolidColorBrush перед итерацией по прямоугольникам.