2013-02-14 29 views
7

Tôi cần áp dụng nhiều hiệu ứng chuyển đổi qua C# trong WPF.Nhiều hiệu ứng chuyển đổi trong WPF

Tôi đã thử mã bên dưới nhưng tôi chỉ thấy hiệu ứng cuối cùng chứ không phải cả hai cùng nhau.

Bất kỳ đầu mối nào nếu có thể thực hiện?

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

Chỉ muốn thêm điều đó bằng cách sử dụng TransformGroup là cách bạn có thể áp dụng nhiều loại chuyển đổi giống hệt nhau. Tôi chỉ muốn thêm điều này bởi vì việc tìm hiểu rõ về chủ đề đó đã khan hiếm. –

Trả lời

23

Bạn phải kết hợp cả hai hiệu ứng trong một TransformGroup thay vì ghi đè lên chúng mỗi lần!

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

Nếu bạn không sử dụng một nút hoặc một cơ chế để áp dụng các biến đổi, bạn có thể định nghĩa này chỉ trong XAML

<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> 

Nếu bạn thêm một phần kích hoạt bạn có thể làm cho nó tương tác.

<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

Cảm ơn phiên bản XAML! –

+2

Đã thêm ví dụ về cách XAML phản ứng với tương tác của người dùng. – ywm

Các vấn đề liên quan