Як зробити обертання навколо центру управління в XAML


75

Я хочу зробити поворот кнопки на 90 градусів, але вона відсікається, оскільки обертається навколо (0,0). Як змусити його обертатись навколо центру, якщо я не знаю, що це не ширина в пікселях (це шаблон для багатьох кнопок)


1
Ви використовуєте RenderTransform або LayoutTransform? Здається, 90-градусний LayoutTransform працює нормально для мене навіть без зазначення походження.
grantnz

Я використовую LayoutTransform, а кнопка входить Gridіз шириною стовпця, встановленою на auto. Правильне обертання все одно не працює, оскільки здається, що сітка встановлює ширину стовпця, рівну ширині кнопки, не залежно від висоти.
Пома

занадто великий для розміщення в коментарі. завантажено на text-upload.com/read.php?id=22752&c=9980825
Пома,

Багато що відбувається у вашому XAML! Ви впевнені, що проблема полягає в LayoutTransform? Що повинна робити / показувати кнопка на гридспліттері?
grantnz

Ця кнопка повинна згортатися з одного боку GridSplitter. Просто спробуйте встановити ширину стовпця від autoдо 28і гратиLayoutTransform
Poma

Відповіді:


55
<Button ...>
  <Button.LayoutTransform>
    <RotateTransform CenterX="0.5" CenterY="0.5" Angle="90"/>
  </Button.LayoutTransform>
</Button>

12
цей не працював у мене у додатку Windows Phone 8 .NET 4.5 C # XAML. Однак той, що працював @FrancescoDeVittori, працював.
mishan

це лише зміщує кнопку вправо та внизу на 0,5 на кожну, здається, це не правильна відповідь (VS17 .Net 6.4.1)
Kaspatoo

131

Ви повинні встановити RenderTransformOrigin елемента керування на 0,5, 0,5.

напр .:

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

7
Це працює для мене, хоча прийнята відповідь ні. Можливо, тут є різниця між RenderTransform та LayoutTransform?
TheSHEEEP

1
Так, це працює і для мене, не прийнята відповідь.
Paw Baltzersen

1
LayoutTransform з прийнятої відповіді змінює все навколо елемента, який я намагаюся обертати. налаштування RenderTransformOrigin та використання RenderTransform чудово працюють, дякую!
Кріс Ліс,

2
У мене була проблема з цим рішенням, оскільки воно оберталося, але зберігав вихідний інтервал макета. Рішення LayoutTransform (прийняте рішення) правильно розрахувало простір для елемента.
Michael Repucci

3
Це працює для програм UWP, тоді як прийнята відповідь ні.
Гонг

3

Я розумію, що походження не має відношення до LayoutTransform.

MSDN каже:

Встановлення перетворення забезпечує потужні можливості масштабування та обертання. Однак LayoutTransform ігнорує операції TranslateTransform. Це пояснюється тим, що поведінка системи макетування для дочірніх елементів FrameworkElement автоматично виправляє будь-які зсуви до положення масштабованого або поверненого елемента в системі макета та координат батьківського елемента.

і наступне "правильно" обертає кнопку.

<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>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.