WPF: правильный путь для масштабирования пути? - PullRequest
22 голосов
/ 24 февраля 2011

У меня есть путь (выглядит как овал):

<Path Data="Bla Bla"/>

Теперь я хочу масштабировать ширину и высоту пути до того, что мне нравится.Я нашел способ:

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

И это работает, но мне интересно, если это самый эффективный способ сделать это?(Я должен был ввести сетку и окно просмотра, чтобы сделать это)

Ответы [ 4 ]

21 голосов
/ 24 февраля 2011

Другой способ масштабирования пути - использование RenderTransform или LayoutTransform

<Path Data="Bla Bla"
      RenderTransformOrigin="0.5, 0.5">
    <Path.RenderTransform>
        <ScaleTransform ScaleX="1.5" ScaleY="1.5"/>
    </Path.RenderTransform>
</Path>
13 голосов
/ 25 февраля 2011

только к вашему сведению, так как ViewBox использует ScaleTransform внутри, это в основном так же с точки зрения производительности.

7 голосов
/ 24 февраля 2011

У вас есть 3 способа масштабирования пути:

  1. Оберните это в ViewBox
  2. Применение ScaleTransform
  3. Явно задайте ширину и высоту

Методы 1. и 2. приведут к тому же результату, в то время как 3. немного отличается, потому что форма изменит размер, но обводка сохранит исходную толщину (так что на самом деле это не увеличение).

Метод 1. будет уместным, когда у вас есть область заданного размера, которую вы хотите заполнить. С другой стороны, метод 2. будет полезен для увеличения (или уменьшения) пути на заданную величину, например. в два раза больше оригинального размера.

1 голос
/ 07 октября 2013

Вы можете сделать это программно, как 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; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...