如何在旋转之后使WPF元素调整大小,而不是之前?

时间:2009-09-17 05:12:15

标签: .net wpf xaml .net-3.5 layout

我有一个简单的水平<Line>元素。此行应用了一个RotateTransform,它以我选择的任何角度倾斜线。问题是在应用变换之前计算了线的渲染长度。结果是该线在旋转后不再适合其父元素。

我目前的代码与此类似,以15°为例:

<Grid Background="Orange">
    <Line   HorizontalAlignment="Left" VerticalAlignment="Bottom"
            RenderTransformOrigin="0,0" Stretch="UniformToFill"
            StrokeThickness="1" Stroke="Green" X1="0" Y1="0" X2="1" Y2="0">
        <UIElement.RenderTransform>
            <RotateTransform Angle="-15" />
        </UIElement.RenderTransform>
    </Line>
</Grid>

结果如下:
http://img179.imageshack.us/img179/2592/slantpartial.png
如图所示,由于旋转,该线不与控制器的右侧接触。我需要将线拉伸到可能的最大尺寸并完全填充其父控件,无论我将角度设置为什么。角度将在运行时动态变化,我不能在当前项目中使用斜率计算。我需要保持RotateTransform作为倾斜线的手段。

我需要完成的一个例子 - 再次,以15°为例:
http://img42.imageshack.us/img42/8276/slantcomplete.png

3 个答案:

答案 0 :(得分:1)

使线条与父容器的左上角和右下角之间的最大距离一致。当平放时,这将使线条略长于容器,但在50%斜率时完美适合。让父母裁掉溢出。

答案 1 :(得分:1)

您可以在旋转变换前尝试缩放变换:

<UIElement.RenderTransform>
  <TransformGroup>
    <ScaleTransform ScaleX="2.0" />
    <RotateTransform Angle="-15" />
  </TransformGroup>
</UIElement.RenderTransform>

答案 2 :(得分:0)

最简单的解决方案是动态更改X和Y值,而不使用RenderTransform。为什么不能使用斜率计算?