我有一个循环,可将标签添加到某些网格列和行。我将每个标签的名称设置为“ 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);
答案 0 :(得分:0)
使用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);
}
答案 1 :(得分:0)
应该可以:
Label label = playArea.FindName($"playSquare_{x}_{y}") as Label
如果playArea是网格
答案 2 :(得分:0)
为什么在将Grid.Column
的{{1}}和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
中的位置。