2011-03-05 24 views

回答

13

有一個在WPF沒有CompositeTransform但有一個TransformGroup。因此,一個等同替換爲含有以該順序ScaleTransformSkewTransformRotateTransformTranslateTransform一個TransformGroup

+0

VAR反式=(CompositeTransform)Btn_showDetail.RenderTransform; 如果(Trans.Rotation> 0){ VisualStateManager.GoToState(此, 「隱藏」,TRUE); } – 2014-01-22 08:58:52

+0

你覺得如果有人實現了自己的WPF它的工作? (或反編譯並使用Silverlight中的那個?) – 2015-07-16 14:21:43

0

這裏是一個好得多的解決方案,如果你是肛門有關代碼清潔度:

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

它很容易對眼睛和,因爲它只是返回的TransformGroup,你仍然可以使用混合設計師一起工作通過變換進行動畫處理!

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

實現:

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