使用父名称访问子项

时间:2016-05-24 08:52:52

标签: c# wpf xaml

我正在编写一个简单的游戏,我需要多次在Grid中重复使用相同的行。我有一个名为1到5的5 Rectangle块。我想要做的是对这些块中的x进行编号,然后将Rectangle作为block1.rectangle1.someMethod()进行访问。 一个简单的方法就是rectangle1rectangle26等等,但这很烦人......

块是这样的:

<Grid>
<Grid.ColumnDefinitions>
    <ColumnDefinition Width="1*"/>
    <ColumnDefinition Width="1*"/>
    <ColumnDefinition Width="1*"/>
    <ColumnDefinition Width="1*"/>
    <ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>
    <Rectangle Name="point1" Grid.Column="0"/>
    <Rectangle Name="point2" Grid.Column="1"/>
    <Rectangle Name="point3" Grid.Column="2"/>
    <Rectangle Name="point4" Grid.Column="3"/>
    <Rectangle Name="point5" Grid.Column="4"/>
</Grid>

1 个答案:

答案 0 :(得分:1)

命名Grid(父级)并使用其Children属性迭代所有子元素:

foreach(UIElement element in grid1.Children)
{
    Rectangle rect = element as Rectangle;
    if(rect == null) continue;

    rect.someMethod();
}

同样的事情可以用你的&#34;块&#34;当然

foreach(UIElement outerElement in gridParent.Children)
{
    Grid grid = outerElement as Grid;
    if(grid == null) continue;

    foreach(UIElement element in grid.Children)
    {
        Rectangle rect = element as Rectangle;
        if(rect == null) continue;

        rect.someMethod();
    }
}

如果您不想创建所有这些&#34;块&#34;我建议您使用ItemsControlDataTemplate根据ViewModel为您生成这些内容。