WPF:扩展路径的正确方法?

时间:2011-02-24 18:47:48

标签: c# wpf xaml

我有一条路径(看起来像一个椭圆形):

<Path Data="Bla Bla"/>

现在我想将路径的宽度和高度缩放到我喜欢的任何位置。我找到了一种方法:

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

这有效,但我想知道这是否是最有效的方法呢? (我必须引入一个网格和视图框来执行此操作)

4 个答案:

答案 0 :(得分:21)

缩放路径的另一种方法是使用RenderTransformLayoutTransform

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

答案 1 :(得分:13)

只是FYI,因为ViewBox在其中使用了ScaleTransform,它基本上与性能一样好。

答案 2 :(得分:7)

您基本上有3种方法来缩放路径:

  1. 将其包装到ViewBox中
  2. 应用ScaleTransform
  3. 明确设置宽度和高度
  4. 方法1.和2.将产生相同的结果,而3.略有不同,因为形状将改变大小,但笔划将保持原始厚度(因此它不是真正的缩放)。

    方法1.当你想要填充给定大小的区域时,它是合适的。另一方面,方法2对于将路径放大(或减小)给定量是有用的,例如。原始尺寸的两倍。

答案 3 :(得分:1)

你可以通过编程方式完成,比如 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;