Pergunta

Eu tenho um estilo Button que tenho vindo a desenvolver em WPF, como indicado na esta pergunta . Outra coisa que eu gostaria de fazer com este estilo é ter a Button encolher um pouco, para fazer parecer como se estivesse sendo clicado, pois está ficando clicado. Agora, a aparência de código transformar como:

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

Então, isso é emocionante. O problema é que o ScaleTransform dimensiona o Image associado ao Button à parte superior esquerda da área onde o botão é (ou seja, é rescaling à coordenada 0,0 do botão, ou pelo menos, é o que eu presumo).

O meu entendimento do TranslateTransform é que é em coordenadas de pixel, não em coordenadas relativas ao tamanho do objeto. Se I em TranslateTransform de 0,01, 0,01, então moverá o Button por 0,01 pixels em ambos X e Y, em vez de 0.01 * sizeof (imagedimension) pixels em cada direcção. Como posso obter transformar essa relação, e como eu posso ter isso aconteça como um estilo, ou seja, para que eu não tenho que fazer matemática diferente para cada tamanho Button diferente eu tenho?

Foi útil?

Solução

Para escala através do centro você pode adicionar em seu gatilho:

<Setter Property="RenderTransformOrigin" Value=".5,.5"/>

Outras dicas

Você precisa definir o RenderTransformOrigin no botão para 0,5 por 0,5:

RenderTransformOrigin="0.5,0.5"
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top