Exemplo n.º 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);
            }
        }
        /// <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();
        }