private void OnAfterCheck(object sender, SmartTreeEventHandlerArgs args)
        {
            UiElementInfo elementInfo = args.Node.Tag as UiElementInfo;

            if (args.Action != TreeViewAction.Unknown)
            {
                if (args.Node.Checked)
                {
                    _checkedTestSelector.Add(elementInfo);
                }
                else
                {
                    _checkedTestSelector.Remove(elementInfo);
                }
            }

            if (!_propagating)
            {
                try{
                    _propagating = true;
                    PropagateUp(args.Node.Parent);
                    PropagateDown(args.Node);
                }
                finally {
                    _propagating = false;
                }
            }
            FireSelectionChanged();
        }
 /// <summary>
 /// Called, when the selection state of a node in the test hierarchy tree
 /// has changed.
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="args"></param>
 private void OnAfterSelect(object sender, SmartTreeEventHandlerArgs args)
 {
     foreach (SmartTreeNode node in _treeTestHierarchy.SelectedNodes)
     {
         node.SelectedImageIndex = node.ImageIndex;
         if (AfterSelect != null)
         {
             // Need to map the behavior.
             TreeViewEventArgs newArgs = new TreeViewEventArgs(null, TreeViewAction.Unknown);
             AfterSelect(sender, newArgs);
         }
     }
 }