예제 #1
0
 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);
 }
예제 #2
0
        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);
        }
예제 #3
0
        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);
        }