/// <summary>
        /// The get visual tree.
        /// </summary>
        /// <param name="root">
        /// The root.
        /// </param>
        /// <returns>
        /// The <see cref="VisualItem"/>.
        /// </returns>
        private VisualItem GetVisualTree(DependencyObject root)
        {
            if (root == null)
            {
                return null;
            }

            var rootItem = new VisualItem(root);
            for (int i = 0; i < VisualTreeHelper.GetChildrenCount(root); i++)
            {
                var child = VisualTreeHelper.GetChild(root, i);
                var subItem = this.GetVisualTree(child);
                rootItem.Children.Add(subItem);
            }

            return rootItem;
        }
        /// <summary>
        /// The window loaded.
        /// </summary>
        /// <param name="sender">
        /// The sender.
        /// </param>
        /// <param name="e">
        /// The e.
        /// </param>
        private void WindowLoaded(object sender, RoutedEventArgs e)
        {
            this.LogicalRootItem = this.GetLogicalTree(this);

            this.VisualRootItem = this.GetVisualTree(this);
        }
        /// <summary>
        /// The get logical tree.
        /// </summary>
        /// <param name="root">
        /// The root.
        /// </param>
        /// <returns>
        /// The <see cref="VisualItem"/>.
        /// </returns>
        private VisualItem GetLogicalTree(DependencyObject root)
        {
            if (root == null)
            {
                return null;
            }

            var rootItem = new VisualItem(root);
            foreach (var child in LogicalTreeHelper.GetChildren(root))
            {
                var logicalChild = this.GetLogicalTree(child as DependencyObject);
                if (logicalChild != null)
                {
                    rootItem.Children.Add(logicalChild);
                }
            }

            return rootItem;
        }