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