Beispiel #1
0
        /// <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);
                        }
                    }
                }
            }
        }
Beispiel #2
0
        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");
            //};
            //}
        }