2009-04-16 6 views
2

J'ai un style Button que j'ai développé dans WPF, comme indiqué dans this question. Une autre chose que je voudrais faire avec ce style est d'avoir le Button rétrécir un peu, pour le faire apparaître comme il est cliqué quand il est cliqué. À l'heure actuelle, le code de transformation ressemble à:WPF style pour effectuer la traduction après mise à l'échelle

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

Alors, c'est excitant. Le problème est, le ScaleTransform échelles le Image associé à la Button en haut à gauche de la zone où le bouton est (c'est-à-dire, il est en train de rééchelonner à la coordonnée 0,0 du bouton, ou du moins, c'est ce que je suppose).

Ma compréhension de la TranslateTransform est que c'est en coordonnées de pixels, pas en coordonnées relatives à la taille de l'objet. Si je mets un TranslateTransform de 0.01, 0.01, alors il déplacera le Button par 0.01 pixels dans les deux x et y, plutôt que 0.01 * sizeof (imagedimension) pixels dans chaque direction. Comment puis-je obtenir cette transformation relative, et comment puis-je l'obtenir en tant que style, c'est-à-dire, donc je n'ai pas besoin de faire des calculs différents pour chaque taille différente de Button que j'ai?

Répondre

2

à l'échelle par le centre, vous pouvez ajouter dans votre déclencheur:

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

qui l'a eu, génial! – mmr

1

Vous devez régler le RenderTransformOrigin sur le bouton à 0,5 par 0,5:

RenderTransformOrigin="0.5,0.5" 
+0

Vous pouvez également définir la CenterX et Valeurs CenterY sur ScaleTransform si vous le souhaitez, mais cela ne fonctionne pas pour les boutons de toutes tailles. –

+0

merci! J'ai dû donner la réponse aux gcores, parce qu'il m'a donné le code complet pour tirer les torpilles de fruiton et le faire aller de cette façon. – mmr

+0

C'est bon ... J'ai pensé à mettre l'origine dans le setter, mais j'ai pensé que vous ne le voudriez pas là. Si vous voulez que l'origine de la transformation affecte TOUTES les transformations, pas seulement celles qui sont déclenchées, vous devrez définir l'origine sur le bouton lui-même. –

Questions connexes