Here's an example of using the VisualTreeWalker from the last post:

	public class TreeStatistics
	{
		private int visualCount;
		private int greatestVisualDepth;
		private int depthTotal;
		private FrameworkElement root;

		public TreeStatistics(FrameworkElement root)
		{
			this.root = root;
		}

		public void GetStatistics()
		{
			this.visualCount = 0;
			this.greatestVisualDepth = 0;
			this.depthTotal = 0;

			VisualTreeWalker walker = new VisualTreeWalker(this.root);
			walker.VisualVisited += this.StatisticsVisitor;
			walker.Walk();
			walker.VisualVisited -= this.StatisticsVisitor;
		}

		private void StatisticsVisitor(Visual v, int currentDepth)
		{
			this.depthTotal += currentDepth;
			this.visualCount++;
			if (currentDepth > this.greatestVisualDepth)
			{
				this.greatestVisualDepth = currentDepth;
			}
		}

		public int VisualCount
		{
			get { return this.visualCount; }
		}

		public int GreatestVisualDepth
		{
			get { return this.greatestVisualDepth; }
		}

		public double AverageVisualDepth
		{
			get { return (double)this.depthTotal / (double)this.visualCount; }
		}
	}