HandyOrg / HandyControl

Contains some simple and commonly used WPF controls
https://handyorg.github.io/
MIT License
6.13k stars 1.03k forks source link

TabControl 在标签页数量溢出的时候, 点击右侧菜单, 跳转标签的逻辑不太合理 #642

Open duanbaodi opened 3 years ago

duanbaodi commented 3 years ago

image image

我尝试修改了一下, 这样可以达到效果. 没有添加动画. 仅供参考. `
menuItem.Click += delegate { _buttonOverflow.IsChecked = false;

                    var list = GetActualList();
                    if (list == null) return;

                    var actualItem = ItemContainerGenerator.ItemFromContainer(item);
                    if (actualItem == null) return;

                    // 获取tabitem 对象在scrollviewer中的位置
                    var targetX = item.TransformToVisual(_scrollViewerOverflow)
                            .Transform(new Point(_scrollViewerOverflow.HorizontalOffset, 0)).X;

                    // 判断tabitem是否已经显示  如果超出scrollviewer当前显示范围的左右两端
                    if (targetX < _scrollViewerOverflow.HorizontalOffset
                    || targetX > _scrollViewerOverflow.HorizontalOffset + ActualWidth - TabItemWidth)
                    {
                        // 直接跳转到目标位置
                        _scrollViewerOverflow.ScrollToHorizontalOffset(targetX);
                    }

                    item.IsSelected = true;
                };`
NaBian commented 3 years ago

按照这个设计,当顶部标签页处于无法滚动的模式时,点击溢出按钮(该按钮对应的标签不在可见范围内)该如何显示为好呢?