Заставить ScaleTransform начать с центра вместо левого верхнего угла - PullRequest
35 голосов
/ 21 февраля 2011

У меня есть следующий стиль для кнопки, который должен увеличиваться в 1,5 раза по размеру при наведении курсора мыши.Проблема в том, что кнопка растет из верхнего левого угла вместо центра.Кто-нибудь знает, как это исправить?

<Style x:Key="sizeButton" TargetType="Button">
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter Property="RenderTransform">
                <Setter.Value>
                    <ScaleTransform ScaleX="1.5" ScaleY="1.5"/>
                </Setter.Value>
            </Setter>
        </Trigger>
    </Style.Triggers>
</Style>

Пробовал решение, предложенное Хенком Холтерманом, но я не смог заставить работать следующий код.Кажется, ничего не дает или я делаю это неправильно?

<Window.Resources>
    <Style x:Key="sizeButton" TargetType="Button">
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="RenderTransform">
                    <Setter.Value>
                        <ScaleTransform CenterX="0.5" CenterY="0.5" ScaleX="1.5" ScaleY="1.5"/>
                    </Setter.Value>
                </Setter>
            </Trigger>
        </Style.Triggers>
    </Style>
</Window.Resources>
<StackPanel>
    <Button Content="Increase Size" Width="100" Height="50" Style="{StaticResource sizeButton}"/>
</StackPanel>

Ответы [ 2 ]

62 голосов
/ 21 февраля 2011

Вы можете установить RenderTransformOrigin на "0.5, 0.5"

<Style x:Key="sizeButton" TargetType="Button">
    <Setter Property="RenderTransformOrigin" Value="0.5, 0.5"/>
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter Property="RenderTransform">
                <Setter.Value>
                    <ScaleTransform ScaleX="1.5" ScaleY="1.5"/>
                </Setter.Value>
            </Setter>
        </Trigger>
    </Style.Triggers>
</Style>
6 голосов
/ 25 октября 2013

ScaleTransform.CenterX и ScaleTransform.CenterY не являются значениями между [0, 1], а должны быть абсолютными значениями в пикселях.

<ScaleTransform CenterX="50" CenterY="25" ScaleX="1.5" ScaleY="1.5"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...