Example #1
0
        private static void FindScopeChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
        {
            RapidFindReplaceControlViewModel kf = sender as RapidFindReplaceControlViewModel;

            if (kf.focusMonitor == null)
            {
                kf.focusMonitor = FocusMonitor.GetCreateInstanceFor(e.NewValue as DependencyObject);
            }
            else
            {
                kf.focusMonitor.BeginMonitoring(e.NewValue as DependencyObject);
            }
        }
Example #2
0
 public static FocusMonitor GetCreateInstanceFor(DependencyObject focusScopeToMonitor){
     foreach(WeakReference reference in instances){
         if(reference.IsAlive){
             FocusMonitor refMonitor = reference.Target as FocusMonitor;
             if (refMonitor.focusScopeToMonitorRef!=null && refMonitor.focusScopeToMonitorRef.IsAlive)
             {
                 if((refMonitor.focusScopeToMonitorRef.Target as DependencyObject)==focusScopeToMonitor)
                     return reference.Target as FocusMonitor;
             }
         }
     }
     FocusMonitor monitor = new FocusMonitor(focusScopeToMonitor);
     instances.Add(new WeakReference(monitor));
     return monitor;
 }
Example #3
0
        public static FocusMonitor GetCreateInstanceFor(DependencyObject focusScopeToMonitor)
        {
            foreach (WeakReference reference in instances)
            {
                if (reference.IsAlive)
                {
                    FocusMonitor refMonitor = reference.Target as FocusMonitor;
                    if (refMonitor.focusScopeToMonitorRef != null && refMonitor.focusScopeToMonitorRef.IsAlive)
                    {
                        if ((refMonitor.focusScopeToMonitorRef.Target as DependencyObject) == focusScopeToMonitor)
                        {
                            return(reference.Target as FocusMonitor);
                        }
                    }
                }
            }
            FocusMonitor monitor = new FocusMonitor(focusScopeToMonitor);

            instances.Add(new WeakReference(monitor));
            return(monitor);
        }
        /// <summary>
        /// Called when the control template has been applied.
        /// </summary>
        public override void OnApplyTemplate()
        {
            PART_Popup = GetTemplateChild("PART_Popup") as PinnedPopup;
            PART_RapidFindReplaceControl = GetTemplateChild("PART_RapidFindReplaceControl") as RapidFindReplaceControl;
            PART_CloseButton             = GetTemplateChild("PART_CloseButton") as Button;
            PART_Thumb     = GetTemplateChild("PART_Thumb") as Thumb;
            PART_MoveThumb = GetTemplateChild("PART_MoveThumb") as Thumb;

            if (!System.ComponentModel.DesignerProperties.GetIsInDesignMode(this))//Blend uses a StandinPopup class so PART_OptionsPopup will be null
            {
                Window parentWindow = Utility.FindWindow(this);

                if (PART_Popup.DockingPosition != PinnedPopup.DockPosition.None)
                {
                    PART_Popup.DockingPosition = DockingPosition;//we want our instance to take precedence
                }
                focusMonitor = FocusMonitor.GetCreateInstanceFor(parentWindow);


                //if the PlacementTarget isn't set, get the window containing us
                if (ReadLocalValue(PlacementTargetProperty) == DependencyProperty.UnsetValue && !DesignerProperties.GetIsInDesignMode(this))
                {
                    PART_Popup.PlacementTarget = parentWindow;
                }
                else
                {
                    PART_Popup.PlacementTarget = PlacementTarget;
                }

                BindingOperations.SetBinding(this, RapidFindReplacePopupControl.DockingPositionProperty, new Binding {
                    Source = PART_Popup, Path = new PropertyPath("DockingPosition"), Mode = BindingMode.TwoWay
                });
                BindingOperations.SetBinding(this, RapidFindReplacePopupControl.PlacementTargetProperty, new Binding {
                    Source = PART_Popup, Path = new PropertyPath("PlacementTarget"), Mode = BindingMode.TwoWay
                });
                BindingOperations.SetBinding(this, RapidFindReplacePopupControl.IsOpenProperty, new Binding {
                    Source = PART_Popup, Path = new PropertyPath("IsOpen"), Mode = BindingMode.TwoWay
                });


                CommandBinding findCommandBinding = new CommandBinding(ApplicationCommands.Find, (object target, ExecutedRoutedEventArgs e) =>
                {
                    IsOpen = true;
                }, (object target, CanExecuteRoutedEventArgs e) => { e.CanExecute = true; e.Handled = true; });

                Window rootWindow = Utility.FindWindow(this);
                rootWindow.CommandBindings.Add(findCommandBinding);
            }

            #region Mirror properties from find box

            /*
             * //BodyHighlightAdornerBrush
             * if (BodyHighlightAdornerBrush!=null && BodyHighlightAdornerBrush != DependencyProperty.UnsetValue)
             *  PART_RapidFindReplaceControl.BodyHighlightAdornerBrush = BodyHighlightAdornerBrush;
             * else
             *  BodyHighlightAdornerBrush = PART_RapidFindReplaceControl.BodyHighlightAdornerBrush;
             *
             * BindingOperations.SetBinding(this, RapidFindReplacePopupControl.BodyHighlightAdornerBrushProperty, new Binding { Source = PART_RapidFindReplaceControl, Path = new PropertyPath("BodyHighlightAdornerBrush"), Mode = BindingMode.TwoWay, UpdateSourceTrigger=UpdateSourceTrigger.PropertyChanged });
             *
             *
             * //BodyIterativeHighlightAdornerBrush
             * if (BodyIterativeHighlightAdornerBrush != null && BodyIterativeHighlightAdornerBrush != DependencyProperty.UnsetValue)
             *  PART_RapidFindReplaceControl.BodyIterativeHighlightAdornerBrush = BodyIterativeHighlightAdornerBrush;
             * else
             *  BodyIterativeHighlightAdornerBrush = PART_RapidFindReplaceControl.BodyIterativeHighlightAdornerBrush;
             *
             * BindingOperations.SetBinding(this, RapidFindReplacePopupControl.BodyIterativeHighlightAdornerBrushProperty, new Binding { Source = PART_RapidFindReplaceControl, Path = new PropertyPath("BodyIterativeHighlightAdornerBrush"), Mode = BindingMode.TwoWay, UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged });
             *
             * //BodyHighlightAdornerPen
             * if (BodyHighlightAdornerPen != null && BodyHighlightAdornerPen != DependencyProperty.UnsetValue)
             *  PART_RapidFindReplaceControl.BodyHighlightAdornerPen = BodyHighlightAdornerPen;
             * else
             *  BodyHighlightAdornerPen = PART_RapidFindReplaceControl.BodyHighlightAdornerPen;
             *
             * BindingOperations.SetBinding(this, RapidFindReplacePopupControl.BodyHighlightAdornerPenProperty, new Binding { Source = PART_RapidFindReplaceControl, Path = new PropertyPath("BodyHighlightAdornerPen"), Mode = BindingMode.TwoWay, UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged });
             */
            if (PART_RapidFindReplaceControl != null)
            {
                BindTwoWayToFindBox(RapidFindReplacePopupControl.BodyHighlightAdornerBrushProperty, PART_RapidFindReplaceControl, RapidFindReplaceControl.BodyHighlightAdornerBrushProperty);
                BindTwoWayToFindBox(RapidFindReplacePopupControl.BodyIterativeHighlightAdornerBrushProperty, PART_RapidFindReplaceControl, RapidFindReplaceControl.BodyIterativeHighlightAdornerBrushProperty);
                BindTwoWayToFindBox(RapidFindReplacePopupControl.BodyHighlightAdornerPenProperty, PART_RapidFindReplaceControl, RapidFindReplaceControl.BodyHighlightAdornerPenProperty);


                BindingOperations.SetBinding(this, RapidFindReplacePopupControl.CurrentMatchProperty, new Binding {
                    Source = PART_RapidFindReplaceControl, Path = new PropertyPath("CurrentMatch"), Mode = BindingMode.OneWay
                });
                BindingOperations.SetBinding(this, RapidFindReplacePopupControl.NumberOfHitsProperty, new Binding {
                    Source = PART_RapidFindReplaceControl, Path = new PropertyPath("NumberOfHits"), Mode = BindingMode.OneWay
                });
                BindingOperations.SetBinding(this, RapidFindReplacePopupControl.IsQueryValidProperty, new Binding {
                    Source = PART_RapidFindReplaceControl, Path = new PropertyPath("IsQueryValid"), Mode = BindingMode.OneWay
                });
                BindingOperations.SetBinding(this, RapidFindReplacePopupControl.QueryHistoryProperty, new Binding {
                    Source = PART_RapidFindReplaceControl, Path = new PropertyPath("QueryHistory"), Mode = BindingMode.OneWay
                });


                BindTwoWayToFindBox(RapidFindReplacePopupControl.FindScopeProperty, PART_RapidFindReplaceControl, RapidFindReplaceControl.FindScopeProperty);
                BindTwoWayToFindBox(RapidFindReplacePopupControl.QueryProperty, PART_RapidFindReplaceControl, RapidFindReplaceControl.QueryProperty);
                BindTwoWayToFindBox(RapidFindReplacePopupControl.QueryHistoryCapacityProperty, PART_RapidFindReplaceControl, RapidFindReplaceControl.QueryHistoryCapacityProperty);
                BindTwoWayToFindBox(RapidFindReplacePopupControl.AsYouTypeFindMinimumCharactersProperty, PART_RapidFindReplaceControl, RapidFindReplaceControl.AsYouTypeFindMinimumCharactersProperty);
                BindTwoWayToFindBox(RapidFindReplacePopupControl.WatermarkTextProperty, PART_RapidFindReplaceControl, RapidFindReplaceControl.WatermarkTextProperty);
                BindTwoWayToFindBox(RapidFindReplacePopupControl.FindButtonIconProperty, PART_RapidFindReplaceControl, RapidFindReplaceControl.FindButtonIconProperty);
                BindTwoWayToFindBox(RapidFindReplacePopupControl.OptionsButtonIconProperty, PART_RapidFindReplaceControl, RapidFindReplaceControl.OptionsButtonIconProperty);
                BindTwoWayToFindBox(RapidFindReplacePopupControl.OptionsButtonCheckedIconProperty, PART_RapidFindReplaceControl, RapidFindReplaceControl.OptionsButtonCheckedIconProperty);
                BindTwoWayToFindBox(RapidFindReplacePopupControl.IsReplaceOpenProperty, PART_RapidFindReplaceControl, RapidFindReplaceControl.IsReplaceOpenProperty);
                BindTwoWayToFindBox(RapidFindReplacePopupControl.IsOptionsDropDownOpenProperty, PART_RapidFindReplaceControl, RapidFindReplaceControl.IsOptionsDropDownOpenProperty);
            }


            #endregion


            base.OnApplyTemplate();
        }
        /// <summary>
        /// Called when the control template has been applied.
        /// </summary>
        public override void OnApplyTemplate()
        {
            
            PART_Popup = GetTemplateChild("PART_Popup") as PinnedPopup;
            PART_RapidFindReplaceControl = GetTemplateChild("PART_RapidFindReplaceControl") as RapidFindReplaceControl;
            PART_CloseButton = GetTemplateChild("PART_CloseButton") as Button;
            PART_Thumb = GetTemplateChild("PART_Thumb") as Thumb;
            PART_MoveThumb = GetTemplateChild("PART_MoveThumb") as Thumb;

            if (!System.ComponentModel.DesignerProperties.GetIsInDesignMode(this))//Blend uses a StandinPopup class so PART_OptionsPopup will be null
            {
                Window parentWindow = Utility.FindWindow(this);

                if (PART_Popup.DockingPosition != PinnedPopup.DockPosition.None)
                    PART_Popup.DockingPosition = DockingPosition;//we want our instance to take precedence

                focusMonitor = FocusMonitor.GetCreateInstanceFor(parentWindow);


                //if the PlacementTarget isn't set, get the window containing us
                if (ReadLocalValue(PlacementTargetProperty) == DependencyProperty.UnsetValue && !DesignerProperties.GetIsInDesignMode(this))
                    PART_Popup.PlacementTarget = parentWindow;
                else
                    PART_Popup.PlacementTarget = PlacementTarget;

                BindingOperations.SetBinding(this, RapidFindReplacePopupControl.DockingPositionProperty, new Binding { Source = PART_Popup, Path = new PropertyPath("DockingPosition"), Mode = BindingMode.TwoWay });
                BindingOperations.SetBinding(this, RapidFindReplacePopupControl.PlacementTargetProperty, new Binding { Source = PART_Popup, Path = new PropertyPath("PlacementTarget"), Mode = BindingMode.TwoWay });
                BindingOperations.SetBinding(this, RapidFindReplacePopupControl.IsOpenProperty, new Binding { Source = PART_Popup, Path = new PropertyPath("IsOpen"), Mode = BindingMode.TwoWay });


                CommandBinding findCommandBinding = new CommandBinding(ApplicationCommands.Find, (object target, ExecutedRoutedEventArgs e) =>
                {
                    IsOpen = true;
                }, (object target, CanExecuteRoutedEventArgs e) => { e.CanExecute = true; e.Handled = true; });

                Window rootWindow = Utility.FindWindow(this);
                rootWindow.CommandBindings.Add(findCommandBinding);
            }

            #region Mirror properties from find box
            /*
//BodyHighlightAdornerBrush
            if (BodyHighlightAdornerBrush!=null && BodyHighlightAdornerBrush != DependencyProperty.UnsetValue)
                PART_RapidFindReplaceControl.BodyHighlightAdornerBrush = BodyHighlightAdornerBrush;
            else
                BodyHighlightAdornerBrush = PART_RapidFindReplaceControl.BodyHighlightAdornerBrush;

            BindingOperations.SetBinding(this, RapidFindReplacePopupControl.BodyHighlightAdornerBrushProperty, new Binding { Source = PART_RapidFindReplaceControl, Path = new PropertyPath("BodyHighlightAdornerBrush"), Mode = BindingMode.TwoWay, UpdateSourceTrigger=UpdateSourceTrigger.PropertyChanged });


//BodyIterativeHighlightAdornerBrush
            if (BodyIterativeHighlightAdornerBrush != null && BodyIterativeHighlightAdornerBrush != DependencyProperty.UnsetValue)
                PART_RapidFindReplaceControl.BodyIterativeHighlightAdornerBrush = BodyIterativeHighlightAdornerBrush;
            else
                BodyIterativeHighlightAdornerBrush = PART_RapidFindReplaceControl.BodyIterativeHighlightAdornerBrush;

            BindingOperations.SetBinding(this, RapidFindReplacePopupControl.BodyIterativeHighlightAdornerBrushProperty, new Binding { Source = PART_RapidFindReplaceControl, Path = new PropertyPath("BodyIterativeHighlightAdornerBrush"), Mode = BindingMode.TwoWay, UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged });

//BodyHighlightAdornerPen
            if (BodyHighlightAdornerPen != null && BodyHighlightAdornerPen != DependencyProperty.UnsetValue)
                PART_RapidFindReplaceControl.BodyHighlightAdornerPen = BodyHighlightAdornerPen;
            else
                BodyHighlightAdornerPen = PART_RapidFindReplaceControl.BodyHighlightAdornerPen;

            BindingOperations.SetBinding(this, RapidFindReplacePopupControl.BodyHighlightAdornerPenProperty, new Binding { Source = PART_RapidFindReplaceControl, Path = new PropertyPath("BodyHighlightAdornerPen"), Mode = BindingMode.TwoWay, UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged });
            */
            if (PART_RapidFindReplaceControl != null)
            {
                BindTwoWayToFindBox(RapidFindReplacePopupControl.BodyHighlightAdornerBrushProperty, PART_RapidFindReplaceControl, RapidFindReplaceControl.BodyHighlightAdornerBrushProperty);
                BindTwoWayToFindBox(RapidFindReplacePopupControl.BodyIterativeHighlightAdornerBrushProperty, PART_RapidFindReplaceControl, RapidFindReplaceControl.BodyIterativeHighlightAdornerBrushProperty);
                BindTwoWayToFindBox(RapidFindReplacePopupControl.BodyHighlightAdornerPenProperty, PART_RapidFindReplaceControl, RapidFindReplaceControl.BodyHighlightAdornerPenProperty);


                BindingOperations.SetBinding(this, RapidFindReplacePopupControl.CurrentMatchProperty, new Binding { Source = PART_RapidFindReplaceControl, Path = new PropertyPath("CurrentMatch"), Mode = BindingMode.OneWay });
                BindingOperations.SetBinding(this, RapidFindReplacePopupControl.NumberOfHitsProperty, new Binding { Source = PART_RapidFindReplaceControl, Path = new PropertyPath("NumberOfHits"), Mode = BindingMode.OneWay });
                BindingOperations.SetBinding(this, RapidFindReplacePopupControl.IsQueryValidProperty, new Binding { Source = PART_RapidFindReplaceControl, Path = new PropertyPath("IsQueryValid"), Mode = BindingMode.OneWay });
                BindingOperations.SetBinding(this, RapidFindReplacePopupControl.QueryHistoryProperty, new Binding { Source = PART_RapidFindReplaceControl, Path = new PropertyPath("QueryHistory"), Mode = BindingMode.OneWay });


                BindTwoWayToFindBox(RapidFindReplacePopupControl.FindScopeProperty, PART_RapidFindReplaceControl, RapidFindReplaceControl.FindScopeProperty);
                BindTwoWayToFindBox(RapidFindReplacePopupControl.QueryProperty, PART_RapidFindReplaceControl, RapidFindReplaceControl.QueryProperty);
                BindTwoWayToFindBox(RapidFindReplacePopupControl.QueryHistoryCapacityProperty, PART_RapidFindReplaceControl, RapidFindReplaceControl.QueryHistoryCapacityProperty);
                BindTwoWayToFindBox(RapidFindReplacePopupControl.AsYouTypeFindMinimumCharactersProperty, PART_RapidFindReplaceControl, RapidFindReplaceControl.AsYouTypeFindMinimumCharactersProperty);
                BindTwoWayToFindBox(RapidFindReplacePopupControl.WatermarkTextProperty, PART_RapidFindReplaceControl, RapidFindReplaceControl.WatermarkTextProperty);
                BindTwoWayToFindBox(RapidFindReplacePopupControl.FindButtonIconProperty, PART_RapidFindReplaceControl, RapidFindReplaceControl.FindButtonIconProperty);
                BindTwoWayToFindBox(RapidFindReplacePopupControl.OptionsButtonIconProperty, PART_RapidFindReplaceControl, RapidFindReplaceControl.OptionsButtonIconProperty);
                BindTwoWayToFindBox(RapidFindReplacePopupControl.OptionsButtonCheckedIconProperty, PART_RapidFindReplaceControl, RapidFindReplaceControl.OptionsButtonCheckedIconProperty);
                BindTwoWayToFindBox(RapidFindReplacePopupControl.IsReplaceOpenProperty, PART_RapidFindReplaceControl, RapidFindReplaceControl.IsReplaceOpenProperty);
                BindTwoWayToFindBox(RapidFindReplacePopupControl.IsOptionsDropDownOpenProperty, PART_RapidFindReplaceControl, RapidFindReplaceControl.IsOptionsDropDownOpenProperty);
            }          


            #endregion


            base.OnApplyTemplate();
        }