2011-03-05 2 views

Répondre

13

Il n'y a pas CompositeTransform dans WPF mais il y a un TransformGroup. Par conséquent, un remplacement équivalent est un TransformGroup contenant ScaleTransform, SkewTransform, RotateTransform et TranslateTransform dans cet ordre.

+0

var Trans = (CompositeTransform) Btn_showDetail.RenderTransform; if (Trans.Rotation> 0) { VisualStateManager.GoToState (ceci, "Masquer", true); } –

+0

pensez-vous que cela fonctionnerait si quelqu'un implémente le sien pour WPF? (ou décompiler et utiliser celui de Silverlight?) –

0

est ici une solution beaucoup plus agréable si vous êtes anal sur la propreté de code:

http://www.singulink.com/CodeIndex/post/getting-rid-of-ugly-transformgroup-blocks-in-wpf

Il est facile sur les yeux et parce qu'il retourne juste un TransformGroup, vous pouvez toujours utiliser le concepteur Blend pour travailler avec animer sur la transformation!

<Rectangle Width="100" Height="100" Fill="LightGreen" 
     RenderTransform="{data:CompositeTransform ScaleX=2.5, ScaleY=1, SkewX=-60, Rotation=145}" 
     RenderTransformOrigin="0.5,0.5" /> 

mise en œuvre:

public class CompositeTransformExtension : MarkupExtension 
{ 
    public double CenterX 
    { 
     get { return _scale.CenterX; } 
     set 
     { 
      _scale.CenterX = value; 
      _skew.CenterX = value; 
      _rotate.CenterX = value; 

     } 
    } 

    public double CenterY 
    { 
     get { return _scale.CenterY; } 
     set 
     { 
      _scale.CenterY = value; 
      _skew.CenterY = value; 
      _rotate.CenterY = value; 
     } 
    } 

    public double ScaleX 
    { 
     get { return _scale.ScaleX; } 
     set { _scale.ScaleX = value; } 
    } 

    public double ScaleY 
    { 
     get { return _scale.ScaleY; } 
     set { _scale.ScaleY = value; } 
    } 

    public double SkewX 
    { 
     get { return _skew.AngleX; } 
     set { _skew.AngleX = value; } 
    } 

    public double SkewY 
    { 
     get { return _skew.AngleY; } 
     set { _skew.AngleY = value; } 
    } 

    public double Rotation 
    { 
     get { return _rotate.Angle; } 
     set { _rotate.Angle = value; } 
    } 

    public double TranslateX 
    { 
     get { return _translate.X; } 
     set { _translate.X = value; } 
    } 

    public double TranslateY 
    { 
     get { return _translate.Y; } 
     set { _translate.Y = value; } 
    } 

    private ScaleTransform _scale = new ScaleTransform(); 
    private SkewTransform _skew = new SkewTransform(); 
    private RotateTransform _rotate = new RotateTransform(); 
    private TranslateTransform _translate = new TranslateTransform(); 

    public CompositeTransformExtension() 
    { 
    } 

    public override object ProvideValue(IServiceProvider serviceProvider) 
    { 
     var group = new TransformGroup(); 

     group.Children.Add(_scale); 
     group.Children.Add(_skew); 
     group.Children.Add(_rotate); 
     group.Children.Add(_translate); 

     return group; 
    } 
} 
Questions connexes