public static bool AreAnyPOIsVisible(PointOfInterestLocator point_of_interest_locator, params string[] pois)
        {
            foreach (string poi in pois)
            {
                List <DependencyObject> poi_list = point_of_interest_locator.GetPOI(poi);
                if (null != poi_list)
                {
                    foreach (DependencyObject dep_obj in poi_list)
                    {
                        FrameworkElement fe = dep_obj as FrameworkElement;
                        if (null != fe)
                        {
                            if (fe.Visibility == Visibility.Visible)
                            {
                                return(true);
                            }
                        }
                    }
                }
            }

            return(false);
        }
        private void RefreshVisualsForCurrentStep()
        {
            int current_highlighter = 0;

            if (null != route.CurrentStep)
            {
                poi_locator.Refresh();
                bool conditions_satisfied = route.CurrentStep.PostCondition(poi_locator);

                // Add a highlighter to each point of interest
                {
                    string[] relevant_pois = conditions_satisfied ? route.CurrentStep.PostCondition_PointOfInterests : route.CurrentStep.PointOfInterests;
                    if (null != relevant_pois)
                    {
                        foreach (string poi in relevant_pois)
                        {
                            List <DependencyObject> poi_list = poi_locator.GetPOI(poi);
                            if (null != poi_list)
                            {
                                foreach (DependencyObject poi_do in poi_list)
                                {
                                    FrameworkElement fe = poi_do as FrameworkElement;
                                    if (null != fe && null != PresentationSource.FromVisual(fe))
                                    {
                                        try
                                        {
                                            Point fe_point = fe.PointToScreen(ZERO_POINT);

                                            if (highlighters.Count <= current_highlighter)
                                            {
                                                highlighters.Add(new PointOfInterestHighlighterWindow());
                                            }

                                            int MARGIN = 5;
                                            PointOfInterestHighlighterWindow highlighter = highlighters[current_highlighter];
                                            highlighter.Left   = fe_point.X - MARGIN;
                                            highlighter.Top    = fe_point.Y - MARGIN;
                                            highlighter.Width  = fe.ActualWidth + 2 * MARGIN;
                                            highlighter.Height = fe.ActualHeight + 2 * MARGIN;
                                            highlighter.Show();
                                            ++current_highlighter;
                                        }
                                        catch (Exception ex)
                                        {
                                            Logging.Warn(ex, "Problem highlighting a control for a wizard.");
                                        }
                                    }
                                }
                            }
                        }
                    }
                }

                if (conditions_satisfied)
                {
                    this.TxtInstructions.Foreground = (route.CurrentStep.PostCondition_GreyInstructions) ? Brushes.LightGray : Brushes.Black;
                    if (true != CmdNext.IsEnabled)
                    {
                        CmdNext.IsEnabled = true;
                        CmdNext.BeginAnimation(OpacityProperty, opacity_animation);
                    }
                }
                else
                {
                    this.TxtInstructions.Foreground = Brushes.Black;
                    if (false != CmdNext.IsEnabled)
                    {
                        CmdNext.IsEnabled = false;
                        CmdNext.BeginAnimation(OpacityProperty, null);
                    }
                }
            }
            else
            {
                this.TxtInstructions.Foreground = Brushes.Black;
                if (true != CmdNext.IsEnabled)
                {
                    CmdNext.IsEnabled = true;
                    CmdNext.BeginAnimation(OpacityProperty, opacity_animation);
                }
            }

            // Kill any unused highlighters
            while (highlighters.Count > current_highlighter)
            {
                highlighters[current_highlighter].Close();
                highlighters.RemoveAt(current_highlighter);
            }
        }