2009-11-15 33 views
2

我一直在閱讀編程WPF,這裏是關於控制模板一個例子:WPF控制模板:爲什麼指定一個沒有ColumnDefinations/RowDefinations作爲outter元素的Grid?

<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> 

我不知道爲什麼使用網格而不是一個簡單的面板如帆布?由於我們沒有decalre任何行/列?

謝謝!

回答

2

如果您未指定任何行或列,則每個行或列中的一個是隱式的,因此會爲您提供單個網格單元格。因此,EllipseContentPresenter都佔據相同的網格單元。添加到同一單元格的項目的z順序由它們的添加順序決定。在這種情況下,ContentPresenter將出現在「Ellipse之上」。

如果您要使用Canvas而不是Grid,則子容器的大小不受容器大小的限制。這是因爲Canvas不會像Grid那樣對其子女施加任何尺寸限制。因此,您必須爲EllipseContentPresenter指定尺寸,並且您需要知道Canvas的尺寸才能設置該尺寸。 Ergo,使用Grid更容易,更直觀。

相關問題