/// <summary> /// Changes the HideOnFocus property of the text box in the visual tree of the sender. /// </summary> /// <param name="sender">The object where the event handler is attached.</param> /// <param name="e">Provides data about the event.</param> private static void ChangeHideOnFocus(object sender, RoutedEventArgs e) { var adornedElement = sender as Control; if (adornedElement == null) { return; } var templateTextBox = FindTextBox(adornedElement); if (templateTextBox != null) { PlaceholderAdorner.SetHideOnFocus(templateTextBox, PlaceholderAdorner.GetHideOnFocus(adornedElement)); } }
/// <summary> /// Invoked whenever <see cref="T:T:ReactNative.Views.TextInput.PlaceholderAdorner" />.HideOnFocus attached property is changed. /// </summary> /// <param name="sender"> /// The object where the event handler is attached. /// </param> /// <param name="e"> /// Provides data about the event. /// </param> private static void OnHideOnFocusChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e) { bool hideOnFocus = (bool)e.NewValue; if ((bool)e.OldValue == hideOnFocus) { return; } var adornedElement = sender as Control; if (!(adornedElement is TextBox || adornedElement is PasswordBox || adornedElement is RichTextBox)) { if (!adornedElement.IsLoaded) { adornedElement.Loaded += ChangeHideOnFocus; } else { var templateTextBox = FindTextBox(adornedElement); if (templateTextBox != null) { PlaceholderAdorner.SetHideOnFocus(templateTextBox, (bool)e.NewValue); } } return; } PlaceholderAdorner placeholder = null; var adornerLayer = AdornerLayer.GetAdornerLayer(adornedElement); if (adornerLayer == null) { return; } var adorners = adornerLayer.GetAdorners(adornedElement); if (adorners != null) { foreach (Adorner adorner in adorners) { placeholder = adorner as PlaceholderAdorner; if (placeholder != null) { break; } } } if (placeholder == null) { return; } if (adornedElement.IsLoaded) { if (hideOnFocus) { adornedElement.GotFocus += placeholder.AdornedElement_GotFocus; adornedElement.LostFocus += placeholder.AdornedElement_LostFocus; if (adornedElement.IsFocused && placeholder._isPlaceholderVisible) { placeholder.InvalidateVisual(); } } else { adornedElement.GotFocus -= placeholder.AdornedElement_GotFocus; adornedElement.LostFocus -= placeholder.AdornedElement_LostFocus; placeholder.AdornedElement_LostFocus(adornedElement, new RoutedEventArgs(UIElement.LostFocusEvent, placeholder)); } } else { adornedElement.Loaded += AdornedElement_Loaded; } }