如何在StackPanel或其他容器中旋转一个项目并保持对齐?
我要做的是拥有一个带有项目名称的标签,其中文本的方向是向上和向下,结果值将直接在其下方取消旋转。原因是项目的名称很长,但结果只是1位或2位数字,所以如果标签上下都可以在屏幕上挤出更多数据。
似乎项目围绕其原始位置(左上角?)而不是围绕它们的中心枢转,因此位于项目原始位置下方的项目最终偏向一侧,但是旋转项目的高度和宽度之间的差异。
这是我到目前为止尝试过的代码:
<StackPanel Orientation="Vertical" Margin="0, 0, 0, 0">
<Label Name="x" Content="{Binding Path=SummarizedTestName}" Height="50" HorizontalAlignment="Center" FontSize="14">
<Label.RenderTransform>
<RotateTransform Angle="-90" />
</Label.RenderTransform>
</Label>
<Label Content="{Binding Path=Count}" Width="50" HorizontalAlignment="Center" FontSize="14" />
</StackPanel>
我曾想过使用TransformGroup,但问题是SummarizedTestName字符串的长度在编译时是未知的(使用Entity Framework从数据库中提取)。我也尝试了水平和垂直对齐的变化,但由于事物的旋转方式,它们似乎都不好用。
答案 0 :(得分:3)
您可以尝试使用LayoutTransform属性而不是RenderTransform
。由于RenderTransform
在解析布局后旋转了名称标签,因此计数标签的位置就像名称标签仍然是水平的一样。
使用LayoutTransform
会在布局分辨率之前旋转名称标签,并且计数标签应该很好地排列。
答案 1 :(得分:0)
使用Eren的答案解决了这个问题。结果如下:
使用LayoutTransform后,代码非常简单和干净:
<StackPanel Orientation="Vertical" >
<Label Name="x" Content="{Binding Path=SummarizedTestName}" FontSize="14" HorizontalAlignment="Left" Margin="0, 0, 0, 10" >
<Label.LayoutTransform>
<RotateTransform Angle="90" />
</Label.LayoutTransform>
</Label>
<Label Content="{Binding Path=Count}" FontSize="14" HorizontalAlignment="Right" VerticalAlignment="top" Width="50" />
</StackPanel>
谢谢Eren!有人给他投票,因为我还不能;)