[XAML] ストアアプリでTextBlockを90度回転して表示させる

2013年7月19日

 元記事はここ(http://ch3cooh.hatenablog.jp/entry/20130719/1374161266)
 近日中に同じシチュエーションに遭遇しそうなので考えてみました。
 ただ、元記事の命題からは外れているかもしれません。とりあえず、
  ・画面右端から 20px
  ・テキストは 270°(-90°)回転
という条件でやってみました。

  1. Alignment とマイナス Margin で無理やり調整

     とりあえず、サンプルの構成から変えず、プロパティの調整だけでなんとかなるかを実験。
     なんとかなった!、けどクソコードだな…(汗、という結果に。

    <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
        <Grid Background="Red" HorizontalAlignment="Stretch"
              VerticalAlignment="Center" Margin="0,0,-1297,0"
              RenderTransformOrigin="0.5,0.5" >
            <TextBlock Foreground="Black" TextAlignment="Center" 
                       FontSize="24" 
                       Text="ここには可変長のテキストが入る" />
            <Grid.RenderTransform>
                <CompositeTransform Rotation="-90" />
            </Grid.RenderTransform>
        </Grid>
    </Grid>
    

     編集画面例

  2. Canvas で囲ってみた

     無限長に可変する必要はないだろう、と勝手に考え、幅を 600px / 高さを 28px に固定。
     回転する際、オブジェクト中央を中心に回転するわけなので、この回転軸が座標 (0,0) となるように Canvas.Top と Canvas.Left を設定。
     そこから、Margin を使って、Canvas の左上ポイントと TextBox の左上ポイントが合致するように引き戻す。
     あとは、それを Grid で囲って、Grid 側の Margin で 右 20px を設定。
     ・・・
     一応それっぽくなったけど、設定多し。メンテ性悪そう。

    <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
        <Grid Background="Red"
              VerticalAlignment="Center" HorizontalAlignment="Right"
              Margin="0,0,20,0">
    
            <Canvas Height="600" Width="28">
                <TextBlock Width="600" Height="28" 
                           Canvas.Left="-300" Canvas.Top="-14"
                           Margin="14,300,0,0"
                           RenderTransformOrigin="0.5,0.5"
                           TextAlignment="Center"
                           Text="ここには可変長のテキストが入る"
                           Foreground="Black"
                           FontSize="24">
                    <TextBlock.RenderTransform>
                            <RotateTransform Angle="-90" />
                    </TextBlock.RenderTransform>
                </TextBlock>
            </Canvas>
        </Grid>
    </Grid>
    

     編集画面例

  3. 270°回転表示用のパネルを別に用意する

     そもそも、Visio や Excel のように回転したオブジェクトを配置しているのではなく、配置したオブジェクトを回転させるような振る舞いなのが、そもそも無理を生じているわけですよね…というのに気づきまして(汗
     そういうことなら、とりあえず配置自身は回転前にやっておいて、配置がすんだらそのパネルごと回転させればいいんじゃね?というのが以下。
     つまり、回転させないオブジェクトを配置するパネルと、270°回転させるオブジェクトを配置するパネルをそれぞれ作って、重ねて表示すればよいのではと。(Azure 色が 270°回転表示配置用パネル)
     大げさだけど、これが一番シンプルで基本に忠実な気がする…(汗

    <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
        <Grid Background="Azure"
              RenderTransformOrigin="0.5,0.5"
              Margin="660,250,-440,250">
    
            <Grid Background="Red"
                  HorizontalAlignment="Center" VerticalAlignment="Bottom"
                  Margin="0,0,0,20">
                <TextBlock Foreground="Black"
                       FontSize="24" 
                       Text="ここには可変長のテキストが入る"/>
            </Grid>
            <Grid.RenderTransform>
                <CompositeTransform Rotation="-90" />
            </Grid.RenderTransform>
        </Grid>
    </Grid>
    

     編集画面例






カテゴリー: Program, xaml

Follow comments via the RSS Feed | Leave a comment | Trackback URL

コメントを投稿する

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


«   »
 
Powered by Wordpress and MySQL. Theme by Shlomi Noach, openark.org