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); } }
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; }
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(); }