Como inverter um UIElement horizontal ou verticalmente

Este exemplo mostra como usar um ScaleTransform para inverter um UIElement horizontal ou verticalmente. Neste exemplo, um controle Button (um tipo de UIElement) é invertido aplicando um ScaleTransform à propriedade RenderTransform dele.

Ilustração para virar um botão

A ilustração a seguir mostra o botão para girar.

Um botão sem transformação
O UIElement a ser invertido

O exemplo a seguir mostra o código que cria o botão.

<Button Content="Flip me!" Padding="5">
</Button>

Ilustração para inverter um botão horizontalmente

Para inverter o botão horizontalmente, crie um ScaleTransform e defina sua propriedade ScaleX como -1. Aplique o ScaleTransform à propriedade RenderTransform do botão.

<Button Content="Flip me!" Padding="5">
  <Button.RenderTransform>
    <ScaleTransform ScaleX="-1" />
  </Button.RenderTransform>
</Button>

Um botão virado horizontalmente sobre o ponto (0,0)
O botão depois de aplicar o ScaleTransform

Ilustração para girar um botão em seu lugar

Como você pode ver na ilustração anterior, o botão foi invertido, mas também foi movido. Isso ocorre porque o botão foi invertido no seu canto superior esquerdo. Para girar o botão no lugar, é necessário aplicar o ScaleTransform ao centro dele, não ao seu canto. Uma maneira fácil de aplicar o ScaleTransform ao centro de botões é definir a propriedade RenderTransformOrigin do botão como 0,5, 0,5.

<Button Content="Flip me!" Padding="5"
  RenderTransformOrigin="0.5,0.5">
  <Button.RenderTransform>
    <ScaleTransform ScaleX="-1" />
  </Button.RenderTransform>
</Button>

Um botão virado horizontalmente em relação ao centro dele
O botão com um RenderTransformOrigin de 0,5, 0,5

Ilustração para virar um botão verticalmente

Para inverter o botão verticalmente, defina a propriedade ScaleTransform do objeto ScaleY em vez de sua propriedade ScaleX.

<Button Content="Flip me!" Padding="5"
  RenderTransformOrigin="0.5,0.5">
  <Button.RenderTransform>
    <ScaleTransform ScaleY="-1" />
  </Button.RenderTransform>
</Button>

Um botão invertido verticalmente sobre o centro dele
O botão invertido verticalmente

Consulte também