Стиль WPF для выполнения перевода после масштабирования - PullRequest
2 голосов
/ 16 апреля 2009

У меня есть стиль Button, который я разрабатывал в WPF, как указано в в этом вопросе . Еще одна вещь, которую я хотел бы сделать с этим стилем, это немного уменьшить Button, чтобы он выглядел так, как будто по нему щелкают, когда по нему нажимают. Прямо сейчас код преобразования выглядит так:

<Trigger Property="IsPressed" Value="True">
    <Setter Property="RenderTransform">
        <Setter.Value>
            <TransformGroup>
                <ScaleTransform ScaleX="0.98" ScaleY="0.98"/>
                <SkewTransform AngleX="0" AngleY="0"/>
                <RotateTransform Angle="0"/>
                <TranslateTransform X="0" Y="0"/>
            </TransformGroup>
        </Setter.Value>
    </Setter>
    <Setter Property="Button.BitmapEffect">
        <Setter.Value>
            <OuterGlowBitmapEffect GlowColor="Green" GlowSize="10"></OuterGlowBitmapEffect>
        </Setter.Value>                                
    </Setter>
</Trigger>

Итак, это захватывающе. Проблема в том, что ScaleTransform масштабирует Image, связанный с Button в левом верхнем углу области, в которой находится кнопка (т. Е. Он масштабируется до 0,0 координаты кнопки, или, по крайней мере, вот что Я предполагаю).

Насколько я понимаю, TranslateTransform заключается в том, что он в пиксельных координатах, а не в координатах относительно размера объекта. Если я добавлю TranslateTransform 0,01, 0,01, то он сместит Button на 0,01 пикселя в обоих направлениях x и y, а не в 0,01 * размера (изображения) в каждом направлении. Как я могу получить это относительное преобразование, и как я могу сделать так, чтобы это происходило как стиль, т. Е. Чтобы мне не приходилось делать разную математику для каждого другого размера Button, который у меня есть?

Ответы [ 2 ]

2 голосов
/ 16 апреля 2009

Чтобы масштабировать через центр, вы можете добавить в свой триггер:

<Setter Property="RenderTransformOrigin" Value=".5,.5"/>
1 голос
/ 16 апреля 2009

Необходимо установить RenderTransformOrigin для кнопки на 0,5 на 0,5:

RenderTransformOrigin="0.5,0.5"
...