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

时间:2018-11-02 12:07:24

标签: c# wpf xaml

我有一个循环,可将标签添加到某些网格列和行。我将每个标签的名称设置为“ 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 :(得分: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中的位置。