static void StartAnimation(DependencyObject target, CSSEquivalent cssEquivalent, double?from, object to, Duration Duration, EasingFunctionBase easingFunction, string visualStateGroupName, Action callbackForWhenfinished = null) { if (cssEquivalent.Name != null && cssEquivalent.Name.Count != 0) { UIElement uiElement = cssEquivalent.UIElement ?? (target as UIElement); // If no UIElement is specified, we assume that the property is intended to be applied to the instance on which the PropertyChanged has occurred. bool hasTemplate = (uiElement is Control) && ((Control)uiElement).HasTemplate; if (!hasTemplate || cssEquivalent.ApplyAlsoWhenThereIsAControlTemplate) { if (cssEquivalent.DomElement == null && uiElement != null) { cssEquivalent.DomElement = uiElement.INTERNAL_OuterDomElement; // Default value } if (cssEquivalent.DomElement != null) { if (cssEquivalent.Value == null) { cssEquivalent.Value = (finalInstance, value) => { return(value ?? ""); }; // Default value } object cssValue = cssEquivalent.Value(target, to); object newObj = CSHTML5.Interop.ExecuteJavaScriptAsync(@"new Object()"); if (from == null) { foreach (string csspropertyName in cssEquivalent.Name) { CSHTML5.Interop.ExecuteJavaScriptAsync(@" $0[$1] = $2;", newObj, csspropertyName, cssValue); } } else { foreach (string csspropertyName in cssEquivalent.Name) { CSHTML5.Interop.ExecuteJavaScriptAsync(@" $0[$1] = [$2, $3];", newObj, csspropertyName, cssValue, from); } } AnimationHelpers.CallVelocity(cssEquivalent.DomElement, Duration, easingFunction, visualStateGroupName, callbackForWhenfinished, newObj); } } } else { throw new InvalidOperationException("Please set the Name property of the CSSEquivalent class."); } }
private void ApplyCSSChanges(Matrix matrix) { CSSEquivalent cssEquivalent = MatrixProperty.GetTypeMetaData(typeof(MatrixTransform)).GetCSSEquivalent(this); if (cssEquivalent != null) { object domElement = cssEquivalent.DomElement; INTERNAL_HtmlDomManager.SetDomElementStyleProperty( cssEquivalent.DomElement, cssEquivalent.Name, cssEquivalent.Value(this, matrix)); } }
private void ApplyCSSChanges(double angle) { CSSEquivalent anglecssEquivalent = AngleProperty.GetTypeMetaData(typeof(RotateTransform)).GetCSSEquivalent(this); if (anglecssEquivalent != null) { object domElement = anglecssEquivalent.DomElement; if (angle != _appliedCssAngle || (_domElementToWhichTheCssWasApplied != null && domElement != _domElementToWhichTheCssWasApplied)) // Optimization to avoid setting the transform if the value is 0 or if it is the same as the last time. { INTERNAL_HtmlDomManager.SetDomElementStylePropertyUsingVelocity( anglecssEquivalent.DomElement, anglecssEquivalent.Name, anglecssEquivalent.Value(this, angle)); _appliedCssAngle = angle; _domElementToWhichTheCssWasApplied = domElement; } } }
private void ApplyCSSChanges(double angleX, double angleY) { CSSEquivalent angleXcssEquivalent = AngleXProperty.GetTypeMetaData(typeof(SkewTransform)).GetCSSEquivalent(this); if (angleXcssEquivalent != null) { object domElementX = angleXcssEquivalent.DomElement; if ((angleX != _appliedCssAngleX) || (_domElementToWhichTheCssAngleXWasApplied != null && domElementX != _domElementToWhichTheCssAngleXWasApplied)) // Optimization to avoid setting the transform if the value is (0,0) or if it is the same as the last time. { INTERNAL_HtmlDomManager.SetDomElementStylePropertyUsingVelocity( angleXcssEquivalent.DomElement, angleXcssEquivalent.Name, angleXcssEquivalent.Value(this, angleX)); _appliedCssAngleX = angleX; _domElementToWhichTheCssAngleXWasApplied = domElementX; } } CSSEquivalent angleYcssEquivalent = AngleYProperty.GetTypeMetaData(typeof(SkewTransform)).GetCSSEquivalent(this); if (angleYcssEquivalent != null) { object domElementY = angleYcssEquivalent.DomElement; if ((angleY != _appliedCssAngleY) || (_domElementToWhichTheCssAngleYWasApplied != null && domElementY != _domElementToWhichTheCssAngleYWasApplied)) // Optimization to avoid setting the transform if the value is (0,0) or if it is the same as the last time. { INTERNAL_HtmlDomManager.SetDomElementStylePropertyUsingVelocity( angleYcssEquivalent.DomElement, angleYcssEquivalent.Name, angleYcssEquivalent.Value(this, angleY)); _appliedCssAngleY = angleY; _domElementToWhichTheCssAngleYWasApplied = domElementY; } } }
private void ApplyCSSChanges(double x, double y) { CSSEquivalent translateXcssEquivalent = XProperty.GetTypeMetaData(typeof(TranslateTransform)).GetCSSEquivalent(this); if (translateXcssEquivalent != null) { object domElementX = translateXcssEquivalent.DomElement; if ((x != _appliedCssX) || (_domElementToWhichTheCssXWasApplied != null && domElementX != _domElementToWhichTheCssXWasApplied)) // Optimization to avoid setting the transform if the value is (0,0) or if it is the same as the last time. { INTERNAL_HtmlDomManager.SetDomElementStylePropertyUsingVelocity( domElementX, translateXcssEquivalent.Name, translateXcssEquivalent.Value(this, x)); _appliedCssX = x; _domElementToWhichTheCssXWasApplied = domElementX; } } CSSEquivalent translateYcssEquivalent = YProperty.GetTypeMetaData(typeof(TranslateTransform)).GetCSSEquivalent(this); if (translateYcssEquivalent != null) { object domElementY = translateYcssEquivalent.DomElement; if ((y != _appliedCssY) || (_domElementToWhichTheCssYWasApplied != null && domElementY != _domElementToWhichTheCssYWasApplied)) // Optimization to avoid setting the transform if the value is (0,0) or if it is the same as the last time. { INTERNAL_HtmlDomManager.SetDomElementStylePropertyUsingVelocity( translateYcssEquivalent.DomElement, translateYcssEquivalent.Name, translateYcssEquivalent.Value(this, y)); _appliedCssY = x; _domElementToWhichTheCssYWasApplied = domElementY; } } }
private void ApplyCSSChanges(CompositeTransform compositeTransform, double scaleX, double scaleY, double skewX, double skewY, double rotation, double translateX, double translateY) { //------------- // In XAML, order is always: // 1. Scale // 2. Skew // 3. Rotate // 4. Translate // // Below we do in reverse order because in CSS the right-most operation is done first. //------------- //TranslateX: CSSEquivalent translateXcssEquivalent = TranslateXProperty.GetTypeMetaData(typeof(CompositeTransform)).GetCSSEquivalent(compositeTransform); INTERNAL_HtmlDomManager.SetDomElementStylePropertyUsingVelocity(translateXcssEquivalent.DomElement, translateXcssEquivalent.Name, translateXcssEquivalent.Value(compositeTransform, translateX)); //TranslateY: CSSEquivalent translateYcssEquivalent = TranslateYProperty.GetTypeMetaData(typeof(CompositeTransform)).GetCSSEquivalent(compositeTransform); INTERNAL_HtmlDomManager.SetDomElementStylePropertyUsingVelocity(translateYcssEquivalent.DomElement, translateYcssEquivalent.Name, translateYcssEquivalent.Value(compositeTransform, translateY)); //Rotation: CSSEquivalent rotationcssEquivalent = RotationProperty.GetTypeMetaData(typeof(CompositeTransform)).GetCSSEquivalent(compositeTransform); INTERNAL_HtmlDomManager.SetDomElementStylePropertyUsingVelocity(rotationcssEquivalent.DomElement, rotationcssEquivalent.Name, rotationcssEquivalent.Value(compositeTransform, rotation)); //SkewX: CSSEquivalent skewXcssEquivalent = SkewXProperty.GetTypeMetaData(typeof(CompositeTransform)).GetCSSEquivalent(compositeTransform); INTERNAL_HtmlDomManager.SetDomElementStylePropertyUsingVelocity(skewXcssEquivalent.DomElement, skewXcssEquivalent.Name, skewXcssEquivalent.Value(compositeTransform, skewX)); //SkewY: CSSEquivalent skewYcssEquivalent = SkewYProperty.GetTypeMetaData(typeof(CompositeTransform)).GetCSSEquivalent(compositeTransform); INTERNAL_HtmlDomManager.SetDomElementStylePropertyUsingVelocity(skewYcssEquivalent.DomElement, skewYcssEquivalent.Name, skewYcssEquivalent.Value(compositeTransform, skewY)); //ScaleX: CSSEquivalent scaleXcssEquivalent = ScaleXProperty.GetTypeMetaData(typeof(CompositeTransform)).GetCSSEquivalent(compositeTransform); INTERNAL_HtmlDomManager.SetDomElementStylePropertyUsingVelocity(scaleXcssEquivalent.DomElement, scaleXcssEquivalent.Name, scaleXcssEquivalent.Value(compositeTransform, scaleX)); //ScaleY: CSSEquivalent scaleYcssEquivalent = ScaleYProperty.GetTypeMetaData(typeof(CompositeTransform)).GetCSSEquivalent(compositeTransform); INTERNAL_HtmlDomManager.SetDomElementStylePropertyUsingVelocity(scaleYcssEquivalent.DomElement, scaleYcssEquivalent.Name, scaleYcssEquivalent.Value(compositeTransform, scaleY)); }
private static void ApplyPropertyChanged(DependencyObject sender, CSSEquivalent cssEquivalent, object oldValue, object newValue) { //if (cssEquivalent.ApplyWhenControlHasTemplate) //Note: this is to handle the case of a Control with a ControlTemplate (some properties must not be applied on the control itself) if (cssEquivalent.Name != null && cssEquivalent.Name.Count > 0 || cssEquivalent.CallbackMethod != null) { UIElement uiElement = cssEquivalent.UIElement ?? (sender as UIElement); // If no UIElement is specified, we assume that the property is intended to be applied to the instance on which the PropertyChanged has occurred. bool hasTemplate = (uiElement is Control) && ((Control)uiElement).HasTemplate; if (!hasTemplate || cssEquivalent.ApplyAlsoWhenThereIsAControlTemplate) { if (cssEquivalent.CallbackMethod != null)// && cssEquivalent.UIElement != null) //Note: I don't see when the commented part of this test could be false so I'm commenting it and we'll put it back if needed. { //PropertyInfo propertyInfo = uiElement.GetType().GetProperty(cssEquivalent.DependencyProperty.Name); //Type propertyType = propertyInfo.PropertyType; //var castedValue = DynamicCast(newValue, propertyType); //Note: we put this line here because the Xaml could use a Color gotten from a StaticResource (which was therefore not converted to a SolidColorbrush by the compiler in the .g.cs file) and led to a wrong type set in a property (Color value in a property of type Brush). //uiElement.SetVisualStateValue(cssEquivalent.DependencyProperty, castedValue); cssEquivalent.CallbackMethod(cssEquivalent.UIElement, new DependencyPropertyChangedEventArgs(oldValue, newValue, cssEquivalent.DependencyProperty)); } else { if (cssEquivalent.DomElement == null && uiElement != null) { cssEquivalent.DomElement = uiElement.INTERNAL_OuterDomElement; // Default value } if (cssEquivalent.DomElement != null) { if (newValue is ICanConvertToCSSValue) { cssEquivalent.Value = (finalInstance, value) => { return(((ICanConvertToCSSValue)value).ConvertToCSSValue()); }; } if (newValue is ICanConvertToCSSValues) { cssEquivalent.Values = (finalInstance, value) => { return(((ICanConvertToCSSValues)value).ConvertToCSSValues(sender)); }; } if (cssEquivalent.Value == null) { cssEquivalent.Value = (finalInstance, value) => { return(value ?? ""); }; // Default value } if (cssEquivalent.Values != null) { List <object> cssValues = cssEquivalent.Values(sender, newValue); if (cssEquivalent.OnlyUseVelocity) { foreach (object cssValue in cssValues) { INTERNAL_HtmlDomManager.SetDomElementStylePropertyUsingVelocity(cssEquivalent.DomElement, cssEquivalent.Name, cssValue); } } else { foreach (object cssValue in cssValues) { INTERNAL_HtmlDomManager.SetDomElementStyleProperty(cssEquivalent.DomElement, cssEquivalent.Name, cssValue); } } } else if (cssEquivalent.Value != null) //I guess we cannot have both defined { object cssValue = cssEquivalent.Value(sender, newValue); if (!(cssValue is Dictionary <string, object>)) { if (cssEquivalent.OnlyUseVelocity) { INTERNAL_HtmlDomManager.SetDomElementStylePropertyUsingVelocity(cssEquivalent.DomElement, cssEquivalent.Name, cssValue); } else { INTERNAL_HtmlDomManager.SetDomElementStyleProperty(cssEquivalent.DomElement, cssEquivalent.Name, cssValue); } } else { //Note: currently, only Color needs to set multiple values when using Velocity (which is why cssValue is a Dictionary), which is why it has a special treatment. //todo: if more types arrive here, find a way to have a more generic way of handling it ? if (newValue is Color) { Color newColor = (Color)newValue; if (cssEquivalent.OnlyUseVelocity) { INTERNAL_HtmlDomManager.SetDomElementStylePropertyUsingVelocity(cssEquivalent.DomElement, cssEquivalent.Name, newColor.INTERNAL_ToHtmlStringForVelocity()); } else { INTERNAL_HtmlDomManager.SetDomElementStyleProperty(cssEquivalent.DomElement, cssEquivalent.Name, newColor.INTERNAL_ToHtmlString(1d)); } } } } } } } } else { throw new InvalidOperationException("Please set the Name property of the CSSEquivalent class."); } }
static bool TryStartAnimation(DependencyObject target, CSSEquivalent cssEquivalent, Color?from, object to, Duration Duration, EasingFunctionBase easingFunction, string visualStateGroupName, Action callbackForWhenfinished = null) { if (cssEquivalent.Name != null && cssEquivalent.Name.Count != 0) { UIElement uiElement = cssEquivalent.UIElement ?? (target as UIElement); // If no UIElement is specified, we assume that the property is intended to be applied to the instance on which the PropertyChanged has occurred. bool hasTemplate = (uiElement is Control) && ((Control)uiElement).HasTemplate; if (!hasTemplate || cssEquivalent.ApplyAlsoWhenThereIsAControlTemplate) { if (cssEquivalent.DomElement == null && uiElement != null) { cssEquivalent.DomElement = uiElement.INTERNAL_OuterDomElement; // Default value } if (cssEquivalent.DomElement != null) { if (cssEquivalent.Value == null) { cssEquivalent.Value = (finalInstance, value) => { if (value == null) { return(""); } else { Dictionary <string, object> valuesDict = new Dictionary <string, object>(); foreach (string name in cssEquivalent.Name) { if (!name.EndsWith("Alpha")) { valuesDict.Add(name, ((Color)value).INTERNAL_ToHtmlStringForVelocity()); } else { valuesDict.Add(name, ((double)((Color)value).A) / 255); } } return(valuesDict); } //return value ?? ""; }; // Default value } object cssValue = cssEquivalent.Value(target, to); //INTERNAL_HtmlDomManager.SetDomElementStyleProperty(cssEquivalent.DomElement, cssEquivalent.Name, cssValue); object newObj = CSHTML5.Interop.ExecuteJavaScriptAsync(@"new Object()"); if (AnimationHelpers.IsValueNull(from)) //todo: when using Bridge, I guess we would want to directly use "from == null" since it worked in the first place (I think). { if (!(cssValue is Dictionary <string, object>)) { foreach (string csspropertyName in cssEquivalent.Name) { //todo: check the note below once the clone will work properly (a value set through velocity is not set in c#, which makes the clone take the former value). //Note: the test below is to avoid setting Background because Velocity cannot handle it, // which makes the element go transparent (no color) before then changing color with backgroundColor. // Therefore, we no longer go in the animation from the previous color to the new one but from no color to the new one if (csspropertyName != "background") //todo: when we will be able to use velocity for linearGradientBrush, we will need another solution here. { CSHTML5.Interop.ExecuteJavaScriptAsync(@"$0[$1] = $2;", newObj, csspropertyName, cssValue); } } } else { Dictionary <string, object> cssValueAsDictionary = (Dictionary <string, object>)cssValue; foreach (string csspropertyName in cssEquivalent.Name) { //todo: check the note below once the clone will work properly (a value set through velocity is not set in c#, which makes the clone take the former value). //Note: the test below is to avoid setting Background because Velocity cannot handle it, // which makes the element go transparent (no color) before then changing color with backgroundColor. // Therefore, we no longer go in the animation from the previous color to the new one but from no color to the new one if (csspropertyName != "background") //todo: when we will be able to use velocity for linearGradientBrush, we will need another solution here. { CSHTML5.Interop.ExecuteJavaScriptAsync(@"$0[$1] = $2;", newObj, csspropertyName, cssValueAsDictionary[csspropertyName]); } } } } else { object fromCssValue = cssEquivalent.Value(target, from); foreach (string csspropertyName in cssEquivalent.Name) { //todo: check the note below once the clone will work properly (a value set through velocity is not set in c#, which makes the clone take the former value). //Note: the test below is to avoid setting Background because Velocity cannot handle it, // which makes the element go transparent (no color) before then changing color with backgroundColor. // Therefore, we no longer go in the animation from the previous color to the new one but from no color to the new one if (csspropertyName != "background") //todo: when we will be able to use velocity for linearGradientBrush, we will need another solution here. { object currentCssValue = cssValue; if (cssValue is Dictionary <string, object> ) { currentCssValue = ((Dictionary <string, object>)cssValue)[csspropertyName]; } object currentFromCssValue = fromCssValue; if (fromCssValue is Dictionary <string, object> ) { currentFromCssValue = ((Dictionary <string, object>)fromCssValue)[csspropertyName]; } CSHTML5.Interop.ExecuteJavaScriptAsync(@"$0[$1] = [$2, $3];", newObj, csspropertyName, currentCssValue, currentFromCssValue); } } } AnimationHelpers.CallVelocity(cssEquivalent.DomElement, Duration, easingFunction, visualStateGroupName, callbackForWhenfinished, newObj); return(true); } } return(false); } else { throw new InvalidOperationException("Please set the Name property of the CSSEquivalent class."); } }
private void ApplyCSSChanges(ScaleTransform scaleTransform, double scaleX, double scaleY) { CSSEquivalent scaleXcssEquivalent = ScaleXProperty.GetTypeMetaData(typeof(ScaleTransform)).GetCSSEquivalent(scaleTransform); object domElementX = scaleXcssEquivalent.DomElement; if (scaleX != _appliedCssScaleX || (_domElementToWhichTheCssScaleXWasApplied != null && domElementX != _domElementToWhichTheCssScaleXWasApplied)) // Optimization to avoid setting the transform if the value is (0,0) or if it is the same as the last time. { INTERNAL_HtmlDomManager.SetDomElementStylePropertyUsingVelocity(scaleXcssEquivalent.DomElement, scaleXcssEquivalent.Name, scaleXcssEquivalent.Value(scaleTransform, scaleX)); _appliedCssScaleX = scaleX; _domElementToWhichTheCssScaleXWasApplied = domElementX; } CSSEquivalent scaleYcssEquivalent = ScaleYProperty.GetTypeMetaData(typeof(ScaleTransform)).GetCSSEquivalent(scaleTransform); object domElementY = scaleYcssEquivalent.DomElement; if (scaleY != _appliedCssScaleY || (_domElementToWhichTheCssScaleYWasApplied != null && domElementY != _domElementToWhichTheCssScaleYWasApplied)) // Optimization to avoid setting the transform if the value is (0,0) or if it is the same as the last time. { INTERNAL_HtmlDomManager.SetDomElementStylePropertyUsingVelocity(scaleYcssEquivalent.DomElement, scaleYcssEquivalent.Name, scaleYcssEquivalent.Value(scaleTransform, scaleY)); _appliedCssScaleY = scaleY; _domElementToWhichTheCssScaleYWasApplied = domElementY; } }
internal override void INTERNAL_UnapplyTransform() { if (this.INTERNAL_parent != null && INTERNAL_VisualTreeManager.IsElementInVisualTree(this.INTERNAL_parent)) { object parentDom = this.INTERNAL_parent.INTERNAL_OuterDomElement; CSSEquivalent angleXcssEquivalent = AngleXProperty.GetTypeMetaData(typeof(SkewTransform)).GetCSSEquivalent(this); INTERNAL_HtmlDomManager.SetDomElementStylePropertyUsingVelocity(angleXcssEquivalent.DomElement, angleXcssEquivalent.Name, angleXcssEquivalent.Value(this, 0)); CSSEquivalent angleYcssEquivalent = AngleYProperty.GetTypeMetaData(typeof(SkewTransform)).GetCSSEquivalent(this); INTERNAL_HtmlDomManager.SetDomElementStylePropertyUsingVelocity(angleYcssEquivalent.DomElement, angleYcssEquivalent.Name, angleYcssEquivalent.Value(this, 0)); } }
internal void ApplySkewTransform(double angleX, double angleY) { if (this.INTERNAL_parent != null && INTERNAL_VisualTreeManager.IsElementInVisualTree(this.INTERNAL_parent)) { object parentDom = this.INTERNAL_parent.INTERNAL_OuterDomElement; CSSEquivalent angleXcssEquivalent = AngleXProperty.GetTypeMetaData(typeof(SkewTransform)).GetCSSEquivalent(this); INTERNAL_HtmlDomManager.SetDomElementStylePropertyUsingVelocity(angleXcssEquivalent.DomElement, angleXcssEquivalent.Name, angleXcssEquivalent.Value(this, angleX)); CSSEquivalent angleYcssEquivalent = AngleYProperty.GetTypeMetaData(typeof(SkewTransform)).GetCSSEquivalent(this); INTERNAL_HtmlDomManager.SetDomElementStylePropertyUsingVelocity(angleYcssEquivalent.DomElement, angleYcssEquivalent.Name, angleYcssEquivalent.Value(this, angleY)); //dynamic domStyle = INTERNAL_HtmlDomManager.GetFrameworkElementOuterStyleForModification(this.INTERNAL_parent); //string value = "skew(" + angleX + "deg, " + angleY + "deg)"; //todo: make sure that the conversion from double to string is culture-invariant so that it uses dots instead of commas for the decimal separator. //try //{ // domStyle.transform = value; //} //catch //{ //} //try //{ // domStyle.msTransform = value; //} //catch //{ //} //try // Prevents crash in the simulator that uses IE. //{ // domStyle.WebkitTransform = value; //} //catch //{ //} } }
internal override void INTERNAL_UnapplyTransform() { if (this.INTERNAL_parent != null && INTERNAL_VisualTreeManager.IsElementInVisualTree(this.INTERNAL_parent)) { object parentDom = this.INTERNAL_parent.INTERNAL_OuterDomElement; //------------- // In XAML, order is always: // 1. Scale // 2. Skew // 3. Rotate // 4. Translate // // Below we do in reverse order because in CSS the right-most operation is done first. //------------- //TranslateX: CSSEquivalent translateXcssEquivalent = TranslateXProperty.GetTypeMetaData(typeof(CompositeTransform)).GetCSSEquivalent(this); INTERNAL_HtmlDomManager.SetDomElementStylePropertyUsingVelocity(translateXcssEquivalent.DomElement, translateXcssEquivalent.Name, translateXcssEquivalent.Value(this, 0)); //TranslateY: CSSEquivalent translateYcssEquivalent = TranslateYProperty.GetTypeMetaData(typeof(CompositeTransform)).GetCSSEquivalent(this); INTERNAL_HtmlDomManager.SetDomElementStylePropertyUsingVelocity(translateYcssEquivalent.DomElement, translateYcssEquivalent.Name, translateYcssEquivalent.Value(this, 0)); //Rotation: CSSEquivalent rotationcssEquivalent = RotationProperty.GetTypeMetaData(typeof(CompositeTransform)).GetCSSEquivalent(this); INTERNAL_HtmlDomManager.SetDomElementStylePropertyUsingVelocity(rotationcssEquivalent.DomElement, rotationcssEquivalent.Name, rotationcssEquivalent.Value(this, 0)); //SkewX: CSSEquivalent skewXcssEquivalent = SkewXProperty.GetTypeMetaData(typeof(CompositeTransform)).GetCSSEquivalent(this); INTERNAL_HtmlDomManager.SetDomElementStylePropertyUsingVelocity(skewXcssEquivalent.DomElement, skewXcssEquivalent.Name, skewXcssEquivalent.Value(this, 0)); //SkewY: CSSEquivalent skewYcssEquivalent = SkewYProperty.GetTypeMetaData(typeof(CompositeTransform)).GetCSSEquivalent(this); INTERNAL_HtmlDomManager.SetDomElementStylePropertyUsingVelocity(skewYcssEquivalent.DomElement, skewYcssEquivalent.Name, skewYcssEquivalent.Value(this, 0)); //ScaleX: CSSEquivalent scaleXcssEquivalent = ScaleXProperty.GetTypeMetaData(typeof(CompositeTransform)).GetCSSEquivalent(this); INTERNAL_HtmlDomManager.SetDomElementStylePropertyUsingVelocity(scaleXcssEquivalent.DomElement, scaleXcssEquivalent.Name, scaleXcssEquivalent.Value(this, 1)); //ScaleY: CSSEquivalent scaleYcssEquivalent = ScaleYProperty.GetTypeMetaData(typeof(CompositeTransform)).GetCSSEquivalent(this); INTERNAL_HtmlDomManager.SetDomElementStylePropertyUsingVelocity(scaleYcssEquivalent.DomElement, scaleYcssEquivalent.Name, scaleYcssEquivalent.Value(this, 1)); } }
//private static void Y_Changed(DependencyObject d, DependencyPropertyChangedEventArgs e) //{ // var translateTransform = (TranslateTransform)d; // double newY = (double)e.NewValue; // translateTransform.ApplyTranslateTransform(translateTransform.X, newY); //} private void ApplyCSSChanges(TranslateTransform translateTransform, double x, double y) { CSSEquivalent translateXcssEquivalent = XProperty.GetTypeMetaData(typeof(TranslateTransform)).GetCSSEquivalent(translateTransform); INTERNAL_HtmlDomManager.SetDomElementStylePropertyUsingVelocity(translateXcssEquivalent.DomElement, translateXcssEquivalent.Name, translateXcssEquivalent.Value(translateTransform, x)); CSSEquivalent translateYcssEquivalent = YProperty.GetTypeMetaData(typeof(TranslateTransform)).GetCSSEquivalent(translateTransform); INTERNAL_HtmlDomManager.SetDomElementStylePropertyUsingVelocity(translateYcssEquivalent.DomElement, translateYcssEquivalent.Name, translateYcssEquivalent.Value(translateTransform, y)); }
private void ApplyCSSChanges(ScaleTransform scaleTransform, double scaleX, double scaleY) { CSSEquivalent scaleXcssEquivalent = ScaleXProperty.GetTypeMetaData(typeof(ScaleTransform)).GetCSSEquivalent(scaleTransform); INTERNAL_HtmlDomManager.SetDomElementStylePropertyUsingVelocity(scaleXcssEquivalent.DomElement, scaleXcssEquivalent.Name, scaleXcssEquivalent.Value(scaleTransform, scaleX)); CSSEquivalent scaleYcssEquivalent = ScaleYProperty.GetTypeMetaData(typeof(ScaleTransform)).GetCSSEquivalent(scaleTransform); INTERNAL_HtmlDomManager.SetDomElementStylePropertyUsingVelocity(scaleYcssEquivalent.DomElement, scaleYcssEquivalent.Name, scaleYcssEquivalent.Value(scaleTransform, scaleY)); }
private void ApplyCSSChanges(RotateTransform rotateTransform, double angle) { CSSEquivalent anglecssEquivalent = AngleProperty.GetTypeMetaData(typeof(TranslateTransform)).GetCSSEquivalent(rotateTransform); INTERNAL_HtmlDomManager.SetDomElementStylePropertyUsingVelocity(anglecssEquivalent.DomElement, anglecssEquivalent.Name, anglecssEquivalent.Value(rotateTransform, angle)); }