Beispiel #1
0
        /// <summary>
        /// 在最外层的 Layer 中来进行移动。
        /// </summary>
        private void MoveToScope()
        {
            if (!_removed)
            {
                _removed = true;
                _scope.GotKeyboardFocus -= scope_GotKeyboardFocus;

                var tracker = new FocusTrackerAdorner(_scope, _scopeLayer);
                _scopeLayer.Add(tracker);

                //如果本次焦点切换后,本 Adorner 还在 _scope 中,则找到它的位置并设置为 ScopeAdorner 的初始位置。
                //如果本 Adorner 在一个面签中,并且焦点切换是因为切换这个页签造成,则这个判断为 false.
                if (this.IsDescendantOf(_scope))
                {
                    var startFrom = this.TransformToAncestor(_scope).Transform(_tracker.Dest.TopLeft);
                    tracker._tracker.MoveTo(new Rect(startFrom, _focusedElement.RenderSize), false);
                }

                _layer.Remove(this);
            }
        }
Beispiel #2
0
        /// <summary>
        /// 把当前层加入到内部层中。
        /// </summary>
        private void MoveToInnerLayer(AdornerLayer targetLayer)
        {
            var layerParent = VisualTreeHelper.GetParent(targetLayer) as Visual;
            var root        = VisualTreeHelper.GetChild(layerParent, 0) as UIElement;

            if (root != null)
            {
                if (!_removed)
                {
                    _removed = true;
                    _scope.GotKeyboardFocus -= scope_GotKeyboardFocus;

                    //必须重新构造一个,否则由于 AdornedElement 不在 root 内,造成无法添加到 targetLayer 中。
                    var tracker = new FocusTrackerAdorner(root, targetLayer, _scope, _scopeLayer);
                    targetLayer.Add(tracker);

                    //设置初始的位置。
                    var startFrom = _focusedElement.TransformToAncestor(root).Transform(new Point());
                    tracker._tracker.MoveTo(new Rect(startFrom, _focusedElement.RenderSize), false);

                    _layer.Remove(this);
                }
            }
        }
Beispiel #3
0
        /// <summary>
        /// 在最外层的 Layer 中来进行移动。
        /// </summary>
        private void MoveToScope()
        {
            if (!_removed)
            {
                _removed = true;
                _scope.GotKeyboardFocus -= scope_GotKeyboardFocus;

                var tracker = new FocusTrackerAdorner(_scope, _scopeLayer);
                _scopeLayer.Add(tracker);

                //如果本次焦点切换后,本 Adorner 还在 _scope 中,则找到它的位置并设置为 ScopeAdorner 的初始位置。
                //如果本 Adorner 在一个面签中,并且焦点切换是因为切换这个页签造成,则这个判断为 false.
                if (this.IsDescendantOf(_scope))
                {
                    var startFrom = this.TransformToAncestor(_scope).Transform(_tracker.Dest.TopLeft);
                    tracker._tracker.MoveTo(new Rect(startFrom, _focusedElement.RenderSize), false);
                }

                _layer.Remove(this);
            }
        }
Beispiel #4
0
        /// <summary>
        /// 把当前层加入到内部层中。
        /// </summary>
        private void MoveToInnerLayer(AdornerLayer targetLayer)
        {
            var layerParent = VisualTreeHelper.GetParent(targetLayer) as Visual;
            var root = VisualTreeHelper.GetChild(layerParent, 0) as UIElement;
            if (root != null)
            {
                if (!_removed)
                {
                    _removed = true;
                    _scope.GotKeyboardFocus -= scope_GotKeyboardFocus;

                    //必须重新构造一个,否则由于 AdornedElement 不在 root 内,造成无法添加到 targetLayer 中。
                    var tracker = new FocusTrackerAdorner(root, targetLayer, _scope, _scopeLayer);
                    targetLayer.Add(tracker);

                    //设置初始的位置。
                    var startFrom = _focusedElement.TransformToAncestor(root).Transform(new Point());
                    tracker._tracker.MoveTo(new Rect(startFrom, _focusedElement.RenderSize), false);

                    _layer.Remove(this);
                }
            }
        }