Silverlight 3 nos trae como una de sus novedades, la propiedad PlaneProjection, esta propiedad se puede aplicar a cualquier control o objeto de Silverlight, esta propiedad es muy interesante ya que con unos simples parámetros nos permite crear libertad de movimiento en nuestras aplicaciones dando un toque dinámico y futurista, bueno comencemos a probar esta propiedad.
Mostrare un ejemplo del uso de PlaneProjection en conjunto con animaciones, aplicado a una interface de Login.
En el codigo XAML agregamos la propiedad Projection al elemento que deseamos, para el ejemplo aplicaremos esta propiedad a los Borders, dentro del tag Projection podemos ver las propiedad Rotation tanto para el eje X,Y,Z es similar a la propiedad Rotation dentro de un Render Transform, la diferencia radica en la forma como se aplica, en el caso de Planeprojection como lo indica su nombre es una proyección del objeto sobre un plano, al aplicar la proyección el objeto se acomodara dando una rotación con perspectiva 3D, además el control nos permite manipula propiedades de los ejes respecto al cual se realizara la rotación.
En el ejemplo creo agregue dos bordes los cuales serán las caras de nuestro formulario, la primera donde los logeamos y la segunda que nos da el saludo después de pasar el logeo, el saludo se vera cuando el formulario de la vuelta , imaginen ese efecto en vez de un simple gif de loading.
<Canvas> <Border x:Name="border2" Background="Blue" Height="150" Width="250" CornerRadius="10" Canvas.Top="100" Canvas.Left="120" Canvas.ZIndex="1"> <Border.Projection> <PlaneProjection RotationX="0" RotationY="0" RotationZ="0" x:Name="plan_rotacion2"/> </Border.Projection> <StackPanel VerticalAlignment="Center"> <StackPanel.Projection> <PlaneProjection RotationY="180"/> </StackPanel.Projection> <TextBlock VerticalAlignment="Center" Margin="2" HorizontalAlignment="Center">Gracias por Ingresar!!!</TextBlock> <TextBlock VerticalAlignment="Center" Margin="2" HorizontalAlignment="Center" x:Name="blockNombre"></TextBlock> </StackPanel> </Border> <Border x:Name="border1" Background="Blue" Height="150" Width="250" CornerRadius="10" Canvas.Top="100" Canvas.Left="120" Canvas.ZIndex="2"> <Border.Projection> <PlaneProjection RotationX="0" RotationY="0" RotationZ="0" x:Name="plan_rotacion"/> </Border.Projection> <StackPanel Orientation="Vertical" Margin="0,20,0,0" VerticalAlignment="Top" HorizontalAlignment="Center" > <StackPanel Orientation="Horizontal" VerticalAlignment="Top"> <TextBlock VerticalAlignment="Center" Margin="2" Width="60">Usuario:</TextBlock> <TextBox Width="120" Margin="2" x:Name="txtUsuario"></TextBox> </StackPanel> <StackPanel Orientation="Horizontal" VerticalAlignment="Top"> <TextBlock VerticalAlignment="Center" Margin="2" Width="60">Password:</TextBlock> <TextBox Width="120" Margin="2"></TextBox> </StackPanel> <Button Click="Button_Click" Content="Aceptar" Width="100" Margin="40,10,0,0"></Button> </StackPanel> </Border> </Canvas>
Definimos las animaciones, para el ejemplo estoy empalmando animaciones, es decir al terminar una se inicia la otra para poder dar continuidad al efecto ya que en si son dos borders los que darán la impresión de un formulario de doble cara.
<Grid.Resources> <Storyboard x:Name="animacion" Completed="animacion_Completed" > <DoubleAnimation Storyboard.TargetName="plan_rotacion" Storyboard.TargetProperty="RotationY" From="0" To="90" Duration="0:0:1" /> </Storyboard> <Storyboard x:Name="animacion2"> <DoubleAnimation Storyboard.TargetName="plan_rotacion2" Storyboard.TargetProperty="RotationY" From="0" To="90" Duration="0:0:1" /> </Storyboard> <Storyboard x:Name="animacion11" > <DoubleAnimation Storyboard.TargetName="plan_rotacion" Storyboard.TargetProperty="RotationY" From="90" To="180" Duration="0:0:1" /> </Storyboard> <Storyboard x:Name="animacion22"> <DoubleAnimation Storyboard.TargetName="plan_rotacion2" Storyboard.TargetProperty="RotationY" From="90" To="180" Duration="0:0:1" /> </Storyboard> </Grid.Resources>
Bueno ahora probemos el proyecto,
Ingresa cualquier nombre y en password pon “”mokona”