So drehen Sie sich in XAML um das Kontrollzentrum

75

Ich möchte die Taste um 90 Grad drehen, aber sie wird abgeschnitten, weil sie sich um (0,0) dreht. Wie man es um die Mitte dreht, wenn ich nicht weiß, dass es nicht in Pixel breit ist (es ist eine Vorlage für viele Schaltflächen)

Poma
quelle
1
Verwenden Sie die RenderTransform oder die LayoutTransform? Eine 90-Grad-LayoutTransform scheint für mich auch ohne Angabe des Ursprungs in Ordnung zu sein.
Grantnz
Ich verwende LayoutTransform und die Schaltfläche befindet sich in der GridSpaltenbreite auf Auto. Die korrekte Drehung funktioniert ohnehin nicht, da das Raster die Spaltenbreite anscheinend gleich der Breite der Schaltfläche in der Höhe einstellt.
Poma
zu groß, um einen Kommentar abzugeben. hochgeladen auf text-upload.com/read.php?id=22752&c=9980825
Poma
In Ihrer XAML ist viel los! Sind Sie sicher, dass LayoutTransform das Problem ist? Was soll der Button auf dem Gridsplitter tun / zeigen?
Grantnz
Dieser Knopf soll eine Seite von kollabieren GridSplitter. Versuchen Sie einfach, Satz Spaltenbreite von autobis 28zu spielen und mitLayoutTransform
Poma

Antworten:

55
<Button ...>
  <Button.LayoutTransform>
    <RotateTransform CenterX="0.5" CenterY="0.5" Angle="90"/>
  </Button.LayoutTransform>
</Button>
Andy
quelle
12
Dieser hat in Windows Phone 8 .NET 4.5 C # XAML-Anwendung nicht funktioniert. Die von @FrancescoDeVittori hat allerdings funktioniert.
Mischan
Dies bewegt den Knopf nur um jeweils 0,5 nach rechts und nach unten. Dies scheint nicht die richtige Antwort zu sein (VS17 .Net 6.4.1)
Kaspatoo
130

Sie müssen das RenderTransformOrigin des Steuerelements auf 0,5, 0,5 einstellen.

Ex.:

<Button RenderTransformOrigin="0.5, 0.5">
    <RepeatButton.RenderTransform>
        <RotateTransform Angle="90"/>
    </RepeatButton.RenderTransform>
</RepeatButton>
Francesco De Vittori
quelle
7
Dieser funktioniert für mich, obwohl die akzeptierte Antwort nicht funktioniert. Vielleicht gibt es hier einen Unterschied zwischen RenderTransform und LayoutTransform?
TheSHEEEP
1
Ja, das funktioniert auch bei mir, nicht akzeptierte Antwort.
Paw Baltzersen
1
LayoutTransform aus der akzeptierten Antwort ändert alles um das Element herum, das ich drehen möchte. Das Einstellen von RenderTransformOrigin und die Verwendung von RenderTransform funktionieren hervorragend, danke!
Chris Lees
2
Ich hatte ein Problem mit dieser Lösung, da sie sich drehte, aber den ursprünglichen Layoutabstand beibehielt. Die LayoutTransform-Lösung (akzeptierte Lösung) hat den Platz für das Element ordnungsgemäß berechnet.
Michael Repucci
3
Dies funktioniert für UWP-Apps, die akzeptierte Antwort jedoch nicht.
Hong
3

Nach meinem Verständnis ist der Ursprung bei einer LayoutTransform nicht relevant.

MSDN sagt:

Das Festlegen einer Transformation bietet leistungsstarke Funktionen zum Skalieren und Drehen. LayoutTransform ignoriert jedoch TranslateTransform-Vorgänge. Dies liegt daran, dass das Verhalten des Layoutsystems für untergeordnete Elemente eines FrameworkElement alle Offsets an der Position eines skalierten oder gedrehten Elements im Layout- und Koordinatensystem des übergeordneten Elements automatisch korrigiert.

und das folgende "richtig" dreht die Taste.

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