protected override void ArrangeCore(SKRect finalRect) { base.ArrangeCore(finalRect); //on construit le rectangle des fils _childrenBounds = new SKRect(0, 0, boundsMinusMargin.Width - Padding.Right, boundsMinusMargin.Height - Padding.Bottom); //on construit la transfromation _childrenVisualTransform = VisualTransform.Translate(Padding.Left, Padding.Top); ArrangeChildren(_childrenBounds); }
public Matrix TransformToAncestor(Visual ancestor) { Matrix transformMatrix = !VisualTransform.IsNullOrIdentity() ? VisualTransform : Matrix.Identity; Matrix offsetMatrix = VisualOffset != Point.Zero ? Matrix.TranslationMatrix(VisualOffset.X, VisualOffset.Y) : Matrix.Identity; Matrix parentMatrix = VisualParent != null && VisualParent != ancestor?VisualParent.TransformToAncestor(ancestor) : Matrix.Identity; Matrix value = transformMatrix * offsetMatrix * parentMatrix; return(value); }
public Visual HitTest(Point position) { if (!GetHitTestBounds().Contains(position)) { return(null); } Point relativePosition = VisualTransform.IsNullOrIdentity() ? position - VisualOffset : (position - VisualOffset) * VisualTransform.Inverse; for (int i = VisualChildren.Count - 1; i >= 0; i--) { Visual childHit = ((UIElement)VisualChildren[i]).HitTest(relativePosition); if (childHit != null) { return(childHit); } } return(HitTestOverride(relativePosition) ? this : null); }