web-dev-qa-db-fra.com

Comment faire la rotation autour du centre de contrôle en XAML

Je veux faire pivoter le bouton à 90 degrés, mais il est coupé car il tourne autour de (0,0). Comment le faire tourner autour du centre si je ne sais pas sa largeur en pixels (c'est un modèle pour de nombreux boutons)

70
Poma
<Button ...>
  <Button.LayoutTransform>
    <RotateTransform CenterX="0.5" CenterY="0.5" Angle="90"/>
  </Button.LayoutTransform>
</Button>
51
Andy

Vous devez définir RenderTransformOrigin du contrôle sur 0,5, 0,5.

ex.:

<Button RenderTransformOrigin="0.5, 0.5">
    <RepeatButton.RenderTransform>
        <RotateTransform Angle="90"/>
    </RepeatButton.RenderTransform>
</RepeatButton>
113

Ma compréhension est que l'origine n'est pas pertinente avec un LayoutTransform.

MSDN dit:

La définition d'une transformation offre de puissantes capacités de mise à l'échelle et de rotation. Cependant, LayoutTransform ignore les opérations TranslateTransform. Cela est dû au fait que le comportement du système de disposition pour les éléments enfants d'un FrameworkElement corrige automatiquement les décalages par rapport à la position d'un élément mis à l'échelle ou pivoté dans la disposition et le système de coordonnées de l'élément parent.

et ce qui suit "correctement" fait tourner le bouton.

<Grid ShowGridLines="True">
    <Grid.RowDefinitions>
        <RowDefinition></RowDefinition>
        <RowDefinition Height="Auto"></RowDefinition>
        <RowDefinition></RowDefinition>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition></ColumnDefinition>
        <ColumnDefinition Width="Auto"></ColumnDefinition>
        <ColumnDefinition></ColumnDefinition>
    </Grid.ColumnDefinitions>
    <Button Grid.Row="1" Grid.Column="1">Excessively Long Button Still Ok
        <Button.LayoutTransform>
            <RotateTransform Angle="90" />
        </Button.LayoutTransform>
    </Button>
</Grid>
2
grantnz