2011-02-24 155 views
19

我有一個路徑(看起來像一個橢圓形):WPF:縮放路徑的正確方法?

<Path Data="Bla Bla"/> 

現在我想擴展路徑的寬度和高度,以任何我喜歡的。我找到了一種方法:

<Grid Width="400" Height="50"> 
<Viewbox Stretch="Fill"> 
    <Path Data="Bla Bla"/> 
</Viewbox> 
</Grid> 

這個工程,但我想知道這是否是最有效的方式來做到這一點? (我已經向大家介紹一個網格,並視框中做到這一點)

回答

17

另一種方式來標尺上路徑是使用RenderTransformLayoutTransform

<Path Data="Bla Bla" 
     RenderTransformOrigin="0.5, 0.5"> 
    <Path.RenderTransform> 
     <ScaleTransform ScaleX="1.5" ScaleY="1.5"/> 
    </Path.RenderTransform> 
</Path> 
+4

一般喜歡'LayoutTransform'這樣,當'Path'增長,在'Panel'它佔用的空間也會這樣做的。 – user7116 2011-02-24 20:19:43

+1

@sixlettervariables:是的,除非你想要相反的場景:)但正如你所說,在大多數情況下'LayoutTransform'是你想要你使用的那個 – 2011-02-24 20:33:10

+1

我也相信一個LayoutTransform不會影響筆畫粗細,而一個RenderTransform可以。 – MarqueIV 2011-10-01 18:33:12

7

你基本上有3種方式標尺上路徑:

  1. 裹成一個視框
  2. 套用ScaleTransform
  3. 明確設置寬度和高度

方法1和2.將產生相同的結果,而3.稍有不同,因爲形狀會改變大小,但筆劃會保持原始厚度(所以它不是真正的縮放)。

方法1.當您想要填充給定大小的區域時,該方法將適用。另一方面,方法2將有助於將路徑放大(或縮小)給定量,例如。是原始尺寸的兩倍。

12

只是供參考,因爲ViewBox使用ScaleTransform內部它基本上是一樣好的性能。

1

你可以做到這一點programmaticaly,像 http://social.msdn.microsoft.com/Forums/vstudio/en-US/a0d473fe-3235-4725-aa24-1ea9307752d3/how-to-rendertransform-in-code-behind-c?forum=wpf

kUIWEB:kArrow mArrow = new kUIWEB:kArrow(); 
mArrow.Width=30; 
mArrow.Height=30; 
mArrow.RenderTransformOrigin=new Point(0.5, 0.5); 


ScaleTransform myScaleTransform = new ScaleTransform(); 
myScaleTransform.ScaleY = 1; 
myScaleTransform.ScaleX = 1; 

RotateTransform myRotateTransform = new RotateTransform(); 
myRotateTransform.Angle = 0; 

TranslateTransform myTranslate = new TranslateTransform(); 
myTranslate.X = 12; 
myTranslate.X = 15; 

SkewTransform mySkew = new SkewTransform(); 
mySkew.AngleX=0; 
mySkew.AngleY=0; 

// Create a TransformGroup to contain the transforms 
// and add the transforms to it. 
TransformGroup myTransformGroup = new TransformGroup(); 
myTransformGroup.Children.Add(myScaleTransform); 
myTransformGroup.Children.Add(myRotateTransform); 
myTransformGroup.Children.Add(myTranslate); 
myTransformGroup.Children.Add(mySkew); 

// Associate the transforms to the object 
mArrow.RenderTransform = myTransformGroup; 
+5

請注意,[只有鏈接的答案](http://meta.stackoverflow.com/tags/link-only-answers/info)不鼓勵,所以答案應該是搜索解決方案的終點(vs.而另一個引用的中途停留時間往往會隨着時間推移而過時)。請考慮在此添加獨立的摘要,並將鏈接保留爲參考。 – kleopatra 2013-10-07 13:08:39