// -------------------------------------------------        DefineRectangles
 private void DefineRectangles ()
 {
     int nW = ClientSize .Width;
     int nH = ClientSize .Height;
     rrNone = new ResizableRectangle (new Rectangle (nW / 5, nH / 5, nW / 5, nH / 8), Draw_Nonresizable); 
     Rectangle rc = new Rectangle (nW / 7, nH * 2 / 5, nW / 5, nH / 5);
     rrNS = new ResizableRectangle (rc, new Size (rc .Width, rc .Height / 3), new Size (rc .Width, rc .Height * 3),
                                    radius, halfstrip, Draw_NS); 
     rc = new Rectangle (nW / 6, nH * 11 / 15, nW / 4, nH / 5);
     rrWE = new ResizableRectangle (rc, new Size (rc .Width / 4, rc .Height), new Size (rc .Width * 4, rc .Height),
                                    radius, halfstrip, Draw_WE); 
     rrAny = new ResizableRectangle (new Rectangle (nW * 8 / 15, nH * 3 / 5, nW / 4, nH / 4),
                                     new Size (0, -12), new Size (500, 400), radius, halfstrip, Draw_Any);
 }
        protected override void OnPointerPressed(PointerRoutedEventArgs e)
        {
            var  point = e.GetCurrentPoint(RootCanvas).Position;
            Rect rectangle;
            var  transform = new CompositeTransform();

            foreach (var child in RootCanvas.Children)
            {
                if (child.GetType() != typeof(Rectangle))
                {
                    continue;
                }

                transform = child.RenderTransform as CompositeTransform;
                var rect = new Rect(transform.TranslateX, transform.TranslateY, (child as Rectangle).Width * transform.ScaleX, (child as Rectangle).Height * transform.ScaleY);
                if (rect.Contains(point))
                {
                    rectangle = rect;
                    break;
                }

                rectangle = new Rect();
            }

            RootCanvas.Children.Remove(RootCanvas.Children.Where(x => x.GetType() == typeof(ResizableRectangle)).FirstOrDefault());
            RootCanvas.Children.Remove(RootCanvas.Children.Where(x => x.GetType() == typeof(ResizableRectangle)).FirstOrDefault());

            if (rectangle == new Rect())
            {
                return;
            }

            //var resizableRect = new ResizableRectangle
            //{
            //    Height = rectangle.Height + 2,
            //    Width = rectangle.Width + 2,
            //    //Top = rectangle.Top,
            //    //Right = rectangle.Right,
            //    //Bottom = rectangle.Bottom,
            //    //Left = rectangle.Left
            //};

            //resizableRect.BorderBrush = new SolidColorBrush(Colors.Black);
            //resizableRect.BorderThickness = new Thickness(4);
            //resizableRect.BorderDashArray = new DoubleCollection() { 3, 2 };

            //resizableRect.PointerReleased += ResizableRect_PointerReleased;

            //Canvas.SetLeft(resizableRect, rectangle.X - 1);
            //Canvas.SetTop(resizableRect, rectangle.Y - 1);

            var resizableRectV2 = new ResizableRectangle
            {
                Top              = rectangle.Top,
                Right            = rectangle.Right,
                Bottom           = rectangle.Bottom,
                Left             = rectangle.Left,
                Width            = rectangle.Width,
                Height           = rectangle.Height,
                Stroke           = new SolidColorBrush(Colors.DarkBlue),
                StrokeThickness  = 2,
                BorderBrush      = new SolidColorBrush(Colors.White),
                ManipulationMode = ManipulationModes.TranslateX | ManipulationModes.TranslateY,
                CompositeMode    = ElementCompositeMode.SourceOver
            };

            resizableRectV2.ManipulationCompleted += delegate(object sender, ManipulationCompletedRoutedEventArgs args)
            {
                var matrix = resizableRectV2.CustomTransformMatrix;
            };

            //resizableRectV2.PointerReleased += delegate (object sender, PointerRoutedEventArgs args)
            //{
            //    var handler = sender as ResizableRectangle;
            //    var matrix = handler.CustomTransformMatrix;

            //    var annotation = RootCanvas.Children.Where(x => (x as Rectangle).Name == "annotation").FirstOrDefault();
            //    annotation.RenderTransform = new CompositeTransform
            //    {
            //        ScaleX = matrix.M11,
            //        ScaleY = matrix.M22,
            //        TranslateX = matrix.OffsetX,
            //        TranslateY = matrix.OffsetY
            //    };
            //};

            //Canvas.SetLeft(resizableRectV2, rectangle.X - 1);
            //Canvas.SetTop(resizableRectV2, rectangle.Y - 1); ;

            // RootCanvas.Children.Add(resizableRect);
            RootCanvas.Children.Add(resizableRectV2);

            base.OnPointerPressed(e);
        }