2

我一直在阅读 Programming WPF,这是关于 Control Template 的示例之一:

<Button DockPanel.Dock="Bottom" x:Name="addButton" Content="Add">
    <Button.Template>
        <ControlTemplate TargetType="{x:Type Button}">
            <Grid>
                <Ellipse Width="128" Height="32" Fill="Yellow" Stroke="Black" />
                <ContentPresenter VerticalAlignment="Center" HorizontalAlignment="Center" />
            </Grid>
        </ControlTemplate>
    </Button.Template>
</Button>

我想知道为什么使用网格而不是更简单的面板,例如画布?由于我们没有标记任何行/列?

谢谢!

4

1 回答 1

2

如果您不指定任何行或列,则每一个都是隐式的,因此为您提供一个网格单元格。因此,Ellipse和都ContentPresenter占据同一个网格单元。添加到同一单元格的项目的 z 顺序由添加它们的顺序决定。在这种情况下,ContentPresenter将出现在Ellipse.

如果您使用 aCanvas而不是 a Grid,孩子的大小将不受容器大小的限制。那是因为 aCanvas不像 theGrid那样对它的孩子施加任何大小限制。因此,您必须为 和 指定一个大小EllipseContentPresenter并且您需要知道 的大小Canvas才能设置该大小。因此,使用Grid.

于 2009-11-15T15:12:17.543 回答