/// <summary> /// Called before the <see cref="InputElement.GotFocus"/> event occurs. /// </summary> /// <param name="e">The event args.</param> protected override void OnGotFocus(GotFocusEventArgs e) { base.OnGotFocus(e); if (IsFocused && (e.NavigationMethod == NavigationMethod.Tab || e.NavigationMethod == NavigationMethod.Directional)) { var adornerLayer = AdornerLayer.GetAdornerLayer(this); if (adornerLayer != null) { if (_focusAdorner == null) { var template = GetValue(FocusAdornerProperty); if (template != null) { _focusAdorner = template.Build(); } } if (_focusAdorner != null) { var target = (Visual)GetTemplateFocusTarget(); if (target != null) { AdornerLayer.SetAdornedElement((Visual)_focusAdorner, target); adornerLayer.Children.Add(_focusAdorner); } } } } }
protected void AddAdorner(object sender, PointerEventArgs e) { var node = (TreeNode)((Control)sender).DataContext; var visual = (Visual)node.Visual; _currentLayer = AdornerLayer.GetAdornerLayer(visual); if (_currentLayer == null || _currentLayer.Children.Contains(_adorner)) { return; } _currentLayer.Children.Add(_adorner); AdornerLayer.SetAdornedElement(_adorner, visual); var vm = (TreePageViewModel)DataContext; if (vm.MainView.ShouldVisualizeMarginPadding) { var paddingBorder = (Border)_adorner.Children[0]; paddingBorder.BorderThickness = visual.GetValue(PaddingProperty); var contentBorder = (Border)_adorner.Children[1]; contentBorder.Margin = visual.GetValue(PaddingProperty); var marginBorder = (Border)_adorner.Children[2]; marginBorder.BorderThickness = visual.GetValue(MarginProperty); marginBorder.Margin = InvertThickness(visual.GetValue(MarginProperty)); } }
protected bool AttachAsAdorner(Visual parent, Rect position, T element) { Debug.Assert(element != null); this.parent = parent; adornerLayer = AdornerLayer.GetAdornerLayer(parent); if (adornerLayer == null) { Despawn(false); return(false); } adornerLayer.Children.Add(element); AdornerLayer.SetAdornedElement(element, parent); AdornerLayer.SetIsClipEnabled(element, false); this.element = element; element.Width = position.Width; element.Height = position.Height; element.HorizontalAlignment = HorizontalAlignment.Left; element.VerticalAlignment = VerticalAlignment.Top; element.Margin = new Thickness(position.X, position.Y, 0, 0); if (parent.GetVisualRoot() is TopLevel toplevel) { clickDisposable = toplevel.AddDisposableHandler(InputElement.PointerPressedEvent, (s, ev) => { bool hitTextbox = false; ILogical?logical = ev.Source as ILogical; while (logical != null) { if (ReferenceEquals(logical, element)) { hitTextbox = true; break; } logical = logical.LogicalParent; } if (!hitTextbox) { Despawn(true); } }, RoutingStrategies.Tunnel); } IsOpened = true; return(true); }
private void Attach(Control control) { var bx = ShadowDecorator.GetShadow(control); var cr = ShadowDecorator.GetShadowCornerRadius(control); var br = new Border { BoxShadow = bx, CornerRadius = cr }; // Width = control.Width - 20, Height = control.DesiredSize.Height - 20 var adornerLayer = AdornerLayer.GetAdornerLayer(control); //if(adornerLayer != null) //{ ShadowDecorator.SetCurrent(control, br); AdornerLayer.SetAdornedElement(br, control); adornerLayer.Children.Add(br); br.PropertyChanged += (s, e) => { br.Clip = null; }; Debug.WriteLine("attached"); //}; //} }