2011-02-24 158 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