2009-09-17 49 views
3

我有一個簡單的,水平的<Line>元素。這條線有一個RotateTransform應用於它,它以我選擇的任何角度偏斜線。問題是在應用轉換之前之前計算行的渲染長度爲。結果是該行在旋轉後不再適合其父元素。如何在旋轉後調整WPF元素的大小,而不是之前?

我當前的代碼類似於此,使用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

回答

1

只要充分利用線的左上角和右下角之間的最大距離父容器。這樣會使線條比平放時稍長一點,但在50%的坡度上完美貼合。讓父母收穫溢出。

+1

這不適用於RenderTransform,因爲該線在應用RenderTransform之前被佈局系統裁剪。但是,該解決方案可以與LayoutTransform完美協作。手動延長線會使佈局系統使用代碼指定的長度,覆蓋除「拉伸」以外的其他任何因素。線路的「拉伸」屬性需要設置爲「無」才能使此解決方案起作用。同樣,「Horizo​​ntalAlignment」和「VerticalAlignment」屬性不應設置爲「Stretch」。 – Giffyguy 2009-09-17 20:55:18

+0

(系統不會允許我提高你的答案,這真的很奇怪......) – Giffyguy 2009-09-17 20:56:30

1

您可以嘗試規模旋轉變換變換前:

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

這個解決方案的問題在於它也會縮小線條的粗細,扭曲最終結果。 – Giffyguy 2009-09-17 20:23:58

0

最簡單的解決辦法是改變X和Y值動態,而不是使用的RenderTransform。爲什麼不能使用斜率計算?

+0

我無法使用斜率來定義線條,因爲我很可能需要稍後將漸變線和其他眼睛糖果應用於此線。斜線對梯度的座標系會有不同的反應,但平線總是會以同樣的方式作出反應。由於在漸變之後應用了轉換,因此漸變將與該線一起旋轉,因此它仍然可以正確渲染。爲進一步澄清,請參閱我的問題關於此:http://stackoverflow.com/questions/1412833/ – Giffyguy 2009-09-17 19:05:17

相關問題