当其中一个旋转WPF时,将元素保持在一起

时间:2012-07-21 04:29:37

标签: c# wpf xaml

如何在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从数据库中提取)。我也尝试了水平和垂直对齐的变化,但由于事物的旋转方式,它们似乎都不好用。

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

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

Using Eren's answer solved the problem. Below is the result:

使用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!有人给他投票,因为我还不能;)