Ejemplo n.º 1
0
        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);
    }