private static void WrapMovingElementsInCanvases(List <FrameworkElement> movingElements,
                                                  Dictionary <FrameworkElement, Rect> oldRects, Dictionary <FrameworkElement, Rect> newRects)
 {
     foreach (var element in movingElements)
     {
         var parent = VisualTreeHelper.GetParent(element) as FrameworkElement;
         var canvas = new WrapperCanvas
         {
             OldRect = oldRects[element],
             NewRect = newRects[element]
         };
         var obj2 = CacheLocalValueHelper(element, FrameworkElement.DataContextProperty);
         element.DataContext = element.DataContext;
         var flag = true;
         if (parent is Panel panel && !panel.IsItemsHost)
         {
             var index = panel.Children.IndexOf(element);
             panel.Children.RemoveAt(index);
             panel.Children.Insert(index, canvas);
         }
 /// <summary>
 /// Take all the elements that will be moving as a result of the layout animation, and wrap them in Canvases so that
 /// they do not affect their sibling elements.
 /// </summary>
 /// <param name="movingElements">The set of elements that will be moving</param>
 private static void WrapMovingElementsInCanvases(List<FrameworkElement> movingElements, Dictionary<FrameworkElement, Rect> oldRects, Dictionary<FrameworkElement, Rect> newRects)
 {
     foreach (FrameworkElement element in movingElements)
     {
         FrameworkElement parent = VisualTreeHelper.GetParent(element) as FrameworkElement;
         WrapperCanvas canvas = new WrapperCanvas
         {
             OldRect = oldRects[element],
             NewRect = newRects[element]
         };
         foreach (DependencyProperty property in LayoutProperties)
         {
             if (!ChildAffectingLayoutProperties.Contains(property) && (CacheLocalValueHelper(element, property) != CacheActualValueHelper(element, property)))
             {
                 break;
             }
         }
         bool flag = true;
         Panel panel = parent as Panel;
         if ((panel != null) && !panel.IsItemsHost)
         {
             int index = panel.Children.IndexOf(element);
             panel.Children.RemoveAt(index);
             panel.Children.Insert(index, canvas);
         }
         else
         {
             Border border = parent as Border;
             if (border != null)
             {
                 border.Child = canvas;
             }
             else
             {
                 flag = false;
             }
         }
         if (flag)
         {
             canvas.Children.Add(element);
             CopyLayoutProperties(element, canvas, false);
         }
     }
 }