搜尋此網誌

2009年11月6日 星期五

Silverlight:Children使用Grid

先看到以下Silverlight敘述:

<Grid x:Name="LayoutRoot" Height="400" Width="800"
      ShowGridLines="True" Background="White">
  <Grid.RenderTransform>
    <TransformGroup>
      <TranslateTransform X="0" Y="10" />
    </TransformGroup>
  </Grid.RenderTransform>
  <Grid.RowDefinitions>
    <RowDefinition />
    <RowDefinition />
  </Grid.RowDefinitions>
  <Grid.ColumnDefinitions>
    <ColumnDefinition />
      <ColumnDefinition />
      <ColumnDefinition />
    </Grid.ColumnDefinitions>
  <Canvas x:Name="box1" Grid.Row="0" >
    <Canvas.RenderTransform>
      <TranslateTransform X="35" Y="10"/>
    </Canvas.RenderTransform>
      <Rectangle Width="100" Height="100" Fill="Red" Grid.Column="1"/>
  </Canvas>

</Grid>



在某些情況下(例如動態排列物件位置)使用Grid元件時,當我們將要將Silverlight元件丟進名為box1的Canvas物件內,並設定其位置到Grid的第1行第2列時(Row=0、Column=1),將物件置入box1後,直接在該物件上設定Grid.Row的屬性將行不通,例如:

<Canvas x:Name="box1" Grid.Row="0" >
  <Canvas.RenderTransform>
    <TranslateTransform X="35" Y="10"/>
  </Canvas.RenderTransform>
    <Rectangle Width="100" Height="100" Fill="Red" Grid.Column="1"/>
</Canvas>

以上敘述的Rectangle物件將不會被設定至Grid(0,1)的位置。而是乖乖的待在其所屬的parent Canvas元件的起始位置。

將以上<Grid>內改改變如下:

<Grid x:Name="LayoutRoot" Height="400" Width="800" Background="White">
  <Grid.RenderTransform>
    <TransformGroup>
      <TranslateTransform X="0" Y="10" />
    </TransformGroup>
  </Grid.RenderTransform>

  <Grid.RowDefinitions>
    <RowDefinition />
    <RowDefinition />
  </Grid.RowDefinitions>

  <Canvas x:Name="box1" Grid.Row="1" Grid.Column="1" >
    <Canvas.RenderTransform>
      <TranslateTransform X="0"/>
    </Canvas.RenderTransform>
    <Grid ShowGridLines="True" Width="870" x:Name="privateGridBox">
      <Grid.ColumnDefinitions>
        <ColumnDefinition />
        <ColumnDefinition />
        <ColumnDefinition />
       </Grid.ColumnDefinitions>
    </Grid>
  </Canvas>

</Grid>

將Silverlight元件置於在上敘box1元件的<Grid>內,可正常使用Grid功能。

沒有留言:

張貼留言