理解统一网格控件

32

我刚刚在尝试使用统一网格,了解它是如何工作的。

代码:

<UniformGrid Name="uniformGrid1" Rows="2" Columns="3">
        <Button Content="Rohit" Grid.Row="0" Grid.Column="0" />
        <Button Content="asit" Grid.Row="0" Grid.Column="2" />
</UniformGrid>

我发现这两个按钮相邻,但它们之间存在一列。为什么会这样?(在统一的网格中,每个单元格的大小应该是相似的,它们之间应该只有一个单元格)

通过答案理解了为什么会这样,但还是想知道如果 Grid.Row & Grid.Column 没有任何作用的话,附加属性的意义是什么?

3个回答

56

UniformGrid包含两个属性,Rows和Columns,用于设置行数和列数。控件按照它们声明的顺序添加到网格中。因此,它们之间不会有任何列。在你的例子中,你声明了Columns=3,但只添加了两个控件。但如果你添加另一个控件,它会放在最后。

  <UniformGrid Name="uniformGrid1"
                 Rows="2"
                 Columns="3">
        <Button Content="Rohit"
                 Margin="2" />
        <Button Content="asit"
                 Margin="2" />
        <Button Content="asit"
                Margin="2" />
    </UniformGrid>

1
听起来不错。但在这种情况下,Grid.Row和Grid.Column附加属性的意义是什么?一般来说,它们代表了网格中控件的位置。 - Rohit
2
已更新答案。这是我的错误,不需要提供Grid.Row和Grid.Column附加属性。我只是复制了你的代码,没有注意到。 - Kishore Kumar
另外一点 - 控件是按照的顺序添加的,也就是说,如果你有3列并添加了4个控件,你会有一行有3个和第二行有1个。 - NextInLine
1
此外,通常最好只指定“行”或“列”,而不是两者都指定(未指定的一个将根据子元素的数量自动计算)。如果两者都指定,则UniformGrid将按照指定的大小精确调整大小,但是额外的控件将出现在UniformGrid边界外的其他行中(较少的控件将留下空白行在UniformGrid范围内)。 - NextInLine

16

正如MSDN文章中对UniformGrid的说明,它没有附加的Grid.RowGrid.Column属性。

相反,Intellisense可能会建议使用它,因为在文档树中您有一个Grid。如果它是附加的属性,那么更有可能被称为UniformGrid.Row,因为这就是访问附加属性的方式。


1
UniformGridGrid类似,可以具有多行和多列的可能性,但有一个重要区别:所有行和列的大小都相同!当您需要Grid行列大小相同时,请使用此选项。例如,您已经为UniformGrid定义了3列,但是您有4个元素,则第四个元素将移动到下一行。因此,基本上使用UniformGrid时,您不需要将Grid.RowGrid.Column附加属性设置为Button或任何其他嵌套元素。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接