estilo WPF para executar a tradução após a escala
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?
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"