public TreePageView() { InitializeComponent(); _tree = this.GetControl <TreeView>("tree"); _tree.ItemContainerGenerator.Index !.Materialized += TreeViewItemMaterialized; _adorner = new Panel { ClipToBounds = false, Children = { //Padding frame new Border { BorderBrush = new SolidColorBrush(Colors.Green, 0.5) }, //Content frame new Border { Background = new SolidColorBrush(Color.FromRgb(160, 197, 232), 0.5) }, //Margin frame new Border { BorderBrush = new SolidColorBrush(Colors.Yellow, 0.5) } }, }; AdornerLayer.SetIsClipEnabled(_adorner, false); }
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); }