private static void UpdateRegionNames(DependencyObject d, DependencyObject regionHolder)
 {
     foreach (DependencyObject child in LogicalTreeHelper.GetChildren(d).OfType <DependencyObject>())
     {
         string region = DynamicRegionManager.GetScreenRegion(child);
         if (region != null)
         {
             UpdateRegionName(child, region, GetRegionNamesRecursive(regionHolder));
         }
         else
         {
             UpdateRegionNames(child, regionHolder);
         }
     }
 }
        private static DynamicRegionNames GetRegionNamesRecursive(DependencyObject child)
        {
            DependencyObject parentObject = LogicalTreeHelper.GetParent(child);

            if (parentObject == null)
            {
                return(null);
            }
            var regionNames = DynamicRegionManager.GetDynamicRegionNames(parentObject);

            if (regionNames != null)
            {
                return(regionNames);
            }
            else
            {
                return(GetRegionNamesRecursive(parentObject));
            }
        }