2017/01/07

StackGrid

exe化されてしまうxamlでは気にはなっていましたが まあいいかと思っていたのですが スキンはテキストなのでGridの冗長さが非常に気になります
簡潔に書けるように StackPanelのような使い勝手の1行(1列)Gridを作りました

    <Grid>
      <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="30" />
        <ColumnDefinition /><!--<ColumnDefinition Width="*" />-->
        <ColumnDefinition Width="2*" />
      </Grid.ColumnDefinitions>
      <Button Content="aaaaa" />
      <Button Grid.Column="1" />
      <Button Grid.Column="2" />
      <Button Grid.Column="3" />
    </Grid>
これが
    <z:StackGrid><!--<z:StackGrid Orientation="Horizontal">-->
      <Button z:StackGrid.Length="Auto" Content="aaaaa" />
      <Button z:StackGrid.Length="30" />
      <Button /><!--<Button z:StackGrid.Length="*" />-->
      <Button z:StackGrid.Length="2*" />
    </z:StackGrid>
こう書けます

メリット
  • ColumnDefinitions(RowDefinitions)の行を削減できる
  • Grid.Column="1"等を書かなくて済む
ほとんどの場合セル1つに1つのコントロールでしょうから行数を半分にできます
コントロールの追加や削除の際に数字を変えるのがほんと面倒でした

デメリット
  • 1行または1列限定
  • Grid.ColumnSpan(RowSpan)に当たるものがない
  • 子要素を重ねられない
1行限定はStackGridなりGridなりを重ねれば済むことが多いと思いますSpanは1行なら使いたいことはまずないはずです
子要素を重ねられないのはやや残念ですが 作りこむのが面倒だったのでそういう場面では素直にGridを使ってください

0 件のコメント :

コメントを投稿