2010-05-24 4 views
6

Ho il seguente codiceScaleTransform e centerX

<Canvas Width="800" Height="600"> 
    ... 
    <local:UpgradeLandDialog x:Name="upgradeDialog" Canvas.Left="250" Canvas.Top="200" HorizontalAlignment="Center" VerticalAlignment="Center" Opacity="0"> 
     <local:UpgradeLandDialog.LayoutTransform> 
      <ScaleTransform ScaleX="0" ScaleY="0" CenterX="400" CenterY="300"/> 
     </local:UpgradeLandDialog.LayoutTransform> 
    </local:UpgradeLandDialog> 
</Canvas> 

Nel UserControl ho animare la ScaleTranform a 1. Voglio UserControl a "crescere" dal suo centro, ma "cresce" da un angolo in alto a sinistra di esso. I valori in CenterX e CenterY non fanno nulla. Come posso renderlo Scala come voglio?

+0

Hai trovato qualche soluzione? Ho lo stesso problema. –

+0

Ho trovato la soluzione, uso 'RenderTransform' invece di' LayoutTransform' –

+1

L'uso di 'RenderTransform' invece di' LayoutTransform' non è "la soluzione", è solo una soluzione. Sono responsabili di 2 cose diverse, quindi se sono limitato a usare 'LayoutTransform', non sono aiutato. – KAI

risposta

1

Per farlo crescere dal suo centro, dovrai anche animarne i margini (a metà della velocità con cui animerai la larghezza e l'altezza).

0

Mi sono imbattuto in questo problema non troppo tempo fa. Alla fine ho riposizionato il controllo utente ad ogni aggiornamento del layout per simulare una crescita basata su punti personalizzati.

+3

Penso che ci siano modi migliori per farlo. – svick

+0

Come si calcola l'importo necessario per spostare il controllo utente? – FINDarkside

0

Questo funziona per me. Ho dimenticato qualcosa?

<Rectangle StrokeThickness="1" Stroke="Black" Width="200" Height="200">  
    <Rectangle.RenderTransform> 
    <ScaleTransform 
     ScaleX="{Binding ElementName=slider, Path=Value}" 
     ScaleY="{Binding ElementName=slider, Path=Value}" 
     CenterX ="100" CenterY="100"/> 
    </Rectangle.RenderTransform> 
</Rectangle> 
15

È possibile utilizzare RenderTransformOrigin="0.5,0.5" sul controllo che si desidera animare.

+2

LayoutTransform e RenderTransform fanno due cose diverse. Se hai bisogno di LayoutTransform, questa non è una soluzione. – denver

3

È possibile modificare il codice come questo:

<Canvas Width="800" Height="600" RenderTransformOrigin="0.5,0.5"> 
    <local:UpgradeLandDialog x:Name="upgradeDialog" Canvas.Left="250" Canvas.Top="200" HorizontalAlignment="Center" VerticalAlignment="Center" Opacity="0"> 
     <local:UpgradeLandDialog.LayoutTransform> 
      <ScaleTransform ScaleX="0" ScaleY="0"/> 
     </local:UpgradeLandDialog.LayoutTransform> 
    </local:UpgradeLandDialog> 
</Canvas> 

Rimuovere (CenterX="400" CenterY="300") e aggiungere (RenderTransformOrigin="0.5,0.5") alla tela. In questo modo se hai un contenitore con larghezza e altezza dinamiche, può scalare dal centro senza problemi.

Problemi correlati