我有一个循环,它为某些网格列和行添加标签。我将每个标签的名称设置为"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);
使用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);
}
应该可以做到:
Label label = playArea.FindName($"playSquare_{x}_{y}") as Label
如果playArea是网格
为什么不先设置Label
的Grid.Column
和Grid.Row
附加属性,然后再将其添加到Grid
?
Grid.SetColumn(playSquare, 25);
Grid.SetRow(playSquare, 25);
然后,您可以简单地使用这些属性通过Grid
:中的位置来检索Label
int x = 25;
int y = 25;
Label label = playArea.Children.OfType<Label>()
.FirstOrDefault(l => Grid.GetColumn(l) == x && Grid.GetRow(l) == y);
这是一个更好的解决方案,尝试使用名称来识别Label
在Grid
中的位置。