从字符串名称访问网格中的标签



我有一个循环,它为某些网格列和行添加标签。我将每个标签的名称设置为"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是网格

为什么不先设置LabelGrid.ColumnGrid.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);

这是一个更好的解决方案,尝试使用名称来识别LabelGrid中的位置。

相关内容

  • 没有找到相关文章

最新更新