2011-04-19 21 views

Respuesta

7

Primera pregunta: ¿Por qué quiere hacer girar toda la ventana?

Si realmente lo necesitan:
No se puede girar la ventana normal de WPF. Ver: Rotate Window

Deberá crear una ventana sin bordes y proporcionarle una IU. Ver: WPF Non-Client Area Design Techniques For Custom Window Frames

Para ver la ventana girada:
Set:

  • propiedad allowtransparency a cierto.
  • WindowStyle a Ninguno para remove ventana cromo
  • Antecedentes a transparente

Incluir un borde (o nada significativo como rectángulo, círculo, elipse, etc.) como el contenido de la ventana y siguientes propiedades de frontera:

  • fondo blanco (o cualquier color no transparente) transformación
  • rotación, y
  • tamaño más pequeño (para que quepa cuando se gira dentro de la ventana).

Borde proporcionará la interfaz de usuario a su ventana.


Tenga en cuenta los cavaets de crear su propia ventana sin bordes, ya que requiere que proporcione la interfaz de la ventana como minimizar, maximizar, cerrar botones; y puede requerir algún código no administrado.
Además, en el código de ejemplo siguiente, el borde cuando se gira tiene que mantenerse dentro de los límites de la ventana, de lo contrario se recortará (y su ventana personalizada).

Código de ejemplo

<Window x:Class="CustomWindowStyle.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     AllowsTransparency="True" WindowStyle="None" Background="Transparent" 
     Title="MainWindow" Height="600" Width="600"> 

     <Border BorderBrush="Green" BorderThickness="2" Background="White" Width="360" Height="360"> 
      <Border.RenderTransform> 
       <RotateTransform Angle="-45" CenterX="180" CenterY="180"/> 
      </Border.RenderTransform> 
      <Grid> 
       <Grid.RowDefinitions> 
        <RowDefinition Height="23" /> 
        <RowDefinition Height="*" /> 
       </Grid.RowDefinitions> 
       <Button Grid.Row="0" Content="X" Height="23" Width="23" Name="button1" HorizontalAlignment="Right" VerticalAlignment="Top" Click="button1_Click"/> 
       <Grid Grid.Row="1"> 
        <!--Main window content goes here--> 
        <TextBlock Text="Main window content goes here" HorizontalAlignment="Center" /> 
       </Grid> 
      </Grid> 
     </Border> 
</Window> 
+1

Gracias, quería dar el control de usuario para girar la ventana interactiva para que la aplicación sea más interesante. Esta es una aplicación similar a un juego, así que quería controlar la gravedad en función de la orientación de la ventana, sé que esto es tonto, pero esa es la idea. –

+2

Tenía la corazonada de que debe ser para un juego como una aplicación. :) De todos modos, quiero agregar eso (aunque implícito): 1.el borde se puede reemplazar por algo significativo, p. elipse, círculo, etc. y, 2. para el fondo del borde no necesariamente tiene que ser blanco, puede ser cualquier color no transparente. – publicgk