void ShowWindowsInDesktop(List <WindowItem> windows, Grid grid, Desktop desktop) { List <WindowItem> .Enumerator e = windows.GetEnumerator(); UIElement desktopElement = desktop.desktopElement; double parentWidth = desktopElement.RenderSize.Width; double parentHeight = desktopElement.RenderSize.Height; Point origin = desktopElement.TransformToAncestor(this).Transform(new Point(0, 0)); double x = origin.X; double y = origin.Y; // figure out width and height per item double widthPerItem = parentWidth / grid.Width; double heightPerItem = parentHeight / grid.Height; for (int hi = 0; hi < grid.Height; hi++) { for (int wi = 0; wi < grid.Width; wi++) { if (!e.MoveNext()) { e.Dispose(); break; } WindowItem entry = e.Current; if (entry == null) { continue; } Console.WriteLine("Window: {0}, in Desktop: {1}", entry.Title, desktop.Id); int startXPos = (int)(wi * widthPerItem + x); int startYPos = (int)(hi * heightPerItem + y); int endXPos = (int)((wi + 1) * widthPerItem + x); int endYPos = (int)((hi + 1) * heightPerItem + y); Console.WriteLine("Left: {0}, Top: {1}, Right: {2}, Bottom: {3}", startXPos, startYPos, endXPos, endYPos); entry.SetContainerRect(startXPos, startYPos, endXPos, endYPos); WindowContainer.Children.Add(entry); entry.DrawRectForWindow(); } } }