0

如何旋转 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 字符串的长度在编译时是未知的(使用实体框架从数据库中提取)。我也尝试过水平和垂直对齐的变体,但由于事物旋转的方式,它们似乎都不能很好地工作。

4

2 回答 2

3

您可以尝试使用LayoutTransform属性而不是RenderTransform. 由于在解析布局RenderTransform旋转名称标签,因此计数标签的位置就好像名称标签仍然是水平的。

使用LayoutTransform会在布局分辨率之前旋转名称标签,并且计数标签应该很好地对齐。

于 2012-07-21T05:00:21.760 回答
0

使用艾伦的答案解决了这个问题。结果如下:

使用艾伦的答案解决了这个问题。 结果如下:

一旦使用了 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>

谢谢艾伦!有人给他投票,因为我还不能;)

于 2012-07-21T05:41:29.003 回答