private TutorialTooltipPositionTracker MakeTooltipPositioner(Window rootWindow, Control tooltip, FrameworkElement element)
        {
            TutorialTooltipPositionTracker positioner = new TutorialTooltipPositionTracker(rootWindow, element);

            tooltip.RenderTransformOrigin = new Point(0.0, 0.0);
            tooltip.IsVisibleChanged     += (o, e) => positioner.EnableChangeHooks(element.IsVisible);
            tooltip.RenderTransform       = new TranslateTransform();
            return(positioner);
        }
        public void SetTooltipControls(Window rootWindow, FrameworkElement searchMenuButton, FrameworkElement compassButton, FrameworkElement floorSliderButton, FrameworkElement exitButton)
        {
            Dictionary <string, FrameworkElement> elementForDialog = new Dictionary <string, FrameworkElement>
            {
                { SearchMenuDialogName, searchMenuButton },
                { LocateMeDialogName, compassButton },
                { ElevatorDialogName, floorSliderButton },
                { ExitDialogName, exitButton }
            };

            foreach (var dialog in m_dialogs)
            {
                TutorialTooltipPositionTracker positioner = MakeTooltipPositioner(rootWindow, dialog.Value.Dialog, elementForDialog[dialog.Key]);
                positioner.OnUpdateTransform += dialog.Value.DialogPosition;
                m_positioners.Add(dialog.Key, positioner);
            }
        }
        public override void OnApplyTemplate()
        {
            base.OnApplyTemplate();

            TutorialTooltipView mapModeDialog = (TutorialTooltipView)GetTemplateChild(MapModeDialogName);

            m_positionedMapModeDialog = new PositionedDialog(mapModeDialog, (x, y, w, h) =>
            {
                ((TranslateTransform)mapModeDialog.RenderTransform).X = x - mapModeDialog.GetTooltipWidth() - DialogGap;
                ((TranslateTransform)mapModeDialog.RenderTransform).Y = y + 2;
            });

            FlattenButtonView flattenButtonView = ViewHelpers.FindChildrenOfType <FlattenButtonView>(m_mainWindow.MainGrid.Children).Single();

            m_mapModePositionTracker = new TutorialTooltipPositionTracker(m_mainWindow, flattenButtonView);
            m_mapModePositionTracker.OnUpdateTransform += m_positionedMapModeDialog.DialogPosition;
            mapModeDialog.RenderTransformOrigin         = new Point(0.0, 0.0);
            mapModeDialog.RenderTransform = new TranslateTransform();

            TutorialTooltipView dropPinDialog = (TutorialTooltipView)GetTemplateChild(DropPinDialogName);

            m_positionedDropPinDialog = new PositionedDialog(dropPinDialog, (x, y, w, h) =>
            {
                ((TranslateTransform)dropPinDialog.RenderTransform).X = x + w + dropPinDialog.ArrowPointHeight + DialogGap;
                ((TranslateTransform)dropPinDialog.RenderTransform).Y = y - (dropPinDialog.GetTooltipHeight() - h) - 2;
            });

            MyPinCreationButtonView myPinCreationButtonView = ViewHelpers.FindChildrenOfType <MyPinCreationButtonView>(m_mainWindow.MainGrid.Children).Single();

            m_dropPinPositionTracker = new TutorialTooltipPositionTracker(m_mainWindow, myPinCreationButtonView);
            m_dropPinPositionTracker.OnUpdateTransform += m_positionedDropPinDialog.DialogPosition;
            dropPinDialog.RenderTransformOrigin         = new Point(0.0, 0.0);
            dropPinDialog.RenderTransform = new TranslateTransform();

            m_showAnimation            = (Storyboard)FindResource("ShowAnimation");
            m_hideAnimation            = ((Storyboard)FindResource("HideAnimation")).Clone();
            m_hideAnimation.Completed += (o, e) =>
            {
                m_hideAnimationRunning = false;
                Visibility             = Visibility.Hidden;
            };
        }