Як зробити обертання навколо центру управління в 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.