Доступ к метке в сетке из имени строки - PullRequest
0 голосов
/ 02 ноября 2018

У меня есть цикл, который добавляет метки к определенным столбцам сетки и строкам. Я установил имя каждой метки на «label_x_y», где x и y - соответствующие координаты X и Y. Затем мне нужно получить доступ к каждой метке по имени «label_x_y», чтобы установить некоторые из их цветов фона - как мне это сделать?

Например:

Label playSquare = new Label();
playSquare.Name = String.Format("playSquare_{0}_{1}", 25, 25);
playArea.Children.Add(playSquare);

playSquare_25_25.Background = new SolidColorBrush(Colors.Red);

Ответы [ 3 ]

0 голосов
/ 02 ноября 2018

Должно быть возможно сделать:

Label label = playArea.FindName($"playSquare_{x}_{y}") as Label

если playArea является сеткой

0 голосов
/ 02 ноября 2018

Почему бы вам не установить Grid.Column и Grid.Row вложенные свойства Label, прежде чем добавить его в Grid?

Grid.SetColumn(playSquare, 25);
Grid.SetRow(playSquare, 25);

Затем вы можете просто использовать эти свойства, чтобы получить Label по его положению в Grid:

int x = 25;
int y = 25;
Label label = playArea.Children.OfType<Label>()
    .FirstOrDefault(l => Grid.GetColumn(l) == x && Grid.GetRow(l) == y);

Это лучшее решение, которое пытается определить положение Label в Grid, используя его имя.

0 голосов
/ 02 ноября 2018

Используйте свойство Children, чтобы найти элементы управления, начинающиеся с имени как playSquare. Это то же свойство, которое вы используете для добавления элементов управления в макет элемента управления.

var labelControl = testStackPanel.Children
                                 .OfType<ContentControl>()
                                 .Where(x => x.Name.StartsWith("Label"));

foreach (var item in labelControl)
{
    item.Background = new SolidColorBrush(Colors.Red);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...