2013-02-14 3 views
7

Ich muss mehrere Transformationseffekt über C# in WPF anwenden.Mehrere Transformationseffekte in WPF

Ich habe Code unten versucht, aber ich sehe nur den letzten Effekt und nicht beide zusammen.

Irgendwelche Hinweise, wenn es möglich ist zu tun?

XAML

<Grid> 
    <Rectangle Fill="#FFF4F4F5" Name="rect" HorizontalAlignment="Left" Height="225" Margin="84,39,0,0" Stroke="Black" VerticalAlignment="Top" Width="299"/> 
</Grid> 

C#

SkewTransform skewTransform1 = new SkewTransform(45, 0, -50, 50); 
rect.RenderTransform = skewTransform1; 

RotateTransform rotateTransform = new RotateTransform(30); 
rect.RenderTransform = rotateTransform; 
+2

Ich wollte nur hinzufügen, dass Sie mithilfe einer TransformGroup mehrere identische Transformationstypen anwenden können. Ich wollte das nur hinzufügen, weil es zu diesem Thema kaum Klarheit gab. –

Antwort

23

Sie haben in einem TransformGroup beide Effekte zu kombinieren, anstatt sie jedes Mal überschreiben!

var transformGroup = new TransformGroup(); 
var skewTransform = new SkewTransform(45, 0, -50, 50); 
var roateTransform = new RotateTransform(30); 

transformGroup.Children.Add(skewTransform); 
transformGroup.Children.Add(rotateTransform); 

rect.RenderTransform = transformGroup; 
8

Wenn Sie die Transformationen nicht auf einen Knopf oder einen anderen Mechanismus verwenden, anwenden, können Sie dies nur in XAML definieren

<Rectangle Fill="#FFF4F4F5" 
       Name="rect" 
       HorizontalAlignment="Left" 
       Height="225" 
       Margin="84,39,0,0" 
       Stroke="Black" 
       VerticalAlignment="Top" 
       Width="299"> 
     <Rectangle.RenderTransform> 
      <TransformGroup> 
       <SkewTransform AngleX="45" 
           AngleY="0" 
           CenterX="-50" 
           CenterY="50" /> 
       <RotateTransform Angle="30" /> 
      </TransformGroup> 
     </Rectangle.RenderTransform> 
    </Rectangle> 

Wenn Sie einen Trigger-Abschnitt hinzufügen Sie es interaktiv machen.

<Rectangle Fill="#FFF4F4F5" 
       Name="rect" 
       HorizontalAlignment="Left" 
       Height="225" 
       Margin="84,39,0,0" 
       Stroke="Black" 
       VerticalAlignment="Top" 
       Width="299"> 
     <Rectangle.RenderTransform> 
      <TransformGroup> 
       <SkewTransform AngleX="45" 
           AngleY="0" 
           CenterX="-50" 
           CenterY="50" /> 
       <RotateTransform x:Name="RotateTransform" 
           Angle="0" /> 
      </TransformGroup> 
     </Rectangle.RenderTransform> 
     <Rectangle.Triggers> 
      <EventTrigger RoutedEvent="Rectangle.MouseDown"> 
       <BeginStoryboard> 
        <Storyboard> 
         <DoubleAnimation Storyboard.TargetName="RotateTransform" 
             Storyboard.TargetProperty="Angle" 
             To="360" 
             Duration="0:0:5" 
             FillBehavior="Stop" /> 
        </Storyboard> 
       </BeginStoryboard> 
      </EventTrigger> 
     </Rectangle.Triggers> 
    </Rectangle> 
+0

Danke für die XAML-Version! –

+2

Ein Beispiel hinzugefügt, das XAML auf Benutzerinteraktion reagieren lässt. – ywm

Verwandte Themen