Пример #1
0
        private static void ScrollTabItemToVisible(TabControl tabControl)
        {
            TabIndexRange range = new TabIndexRange(tabControl);

            if (range.PartialMin == -1 || range.PartialMax == -1)
            {
                return;
            }
            int index = tabControl.SelectedIndex;

            if (range.FullMin <= index && index <= range.FullMax)
            {
                return;
            }
            if (index <= range.PartialMin)
            {
                ScrollTabItemAsLeft(tabControl, range.Viewer, range.Panel, index);
                return;
            }
            if (range.PartialMax <= index)
            {
                ScrollTabItemAsRight(tabControl, range.Viewer, range.Panel, index);
            }
            return;
        }
Пример #2
0
        private void buttonScrollRight_Click(object sender, RoutedEventArgs e)
        {
            Button        btn   = (sender as Button);
            TabControl    tab   = btn.TemplatedParent as TabControl;
            TabIndexRange range = new TabIndexRange(tab);

            ScrollTabItemAsLeft(tab, range.Viewer, range.Panel, range.FullMax);
            TabIndexRange range2 = new TabIndexRange(tab);

            if (range.FullMax < tab.Items.Count - 1 && range.FullMax == range2.FullMax)
            {
                ScrollTabItemAsLeft(tab, range.Viewer, range.Panel, range.FullMax + 1);
            }
        }
Пример #3
0
        private void buttonScrollLeft_Click(object sender, RoutedEventArgs e)
        {
            Button        btn   = (sender as Button);
            TabControl    tab   = btn.TemplatedParent as TabControl;
            TabIndexRange range = new TabIndexRange(tab);

            ScrollTabItemAsRight(tab, range.Viewer, range.Panel, range.FullMin);
            TabIndexRange range2 = new TabIndexRange(tab);

            if (0 < range.FullMin && range.FullMin == range2.FullMin)
            {
                ScrollTabItemAsRight(tab, range.Viewer, range.Panel, range.FullMin - 1);
            }
        }
Пример #4
0
        private void tabPanelScrollViewer_MouseMove(object sender, MouseEventArgs e)
        {
            if (MovingTabItem == null)
            {
                return;
            }

            ScrollViewer viewer = sender as ScrollViewer;

            if (viewer == null)
            {
                return;
            }
            if (e.MouseDevice.LeftButton == MouseButtonState.Pressed && !viewer.IsMouseCaptured)
            {
                viewer.CaptureMouse();
            }
            FrameworkElement parent = VisualTreeHelper.GetParent(viewer) as FrameworkElement;
            Point            p      = e.MouseDevice.GetPosition(parent);
            double           dx     = 0;

            if (p.X < 0)
            {
                dx = p.X;
            }
            else if (viewer.ActualWidth < p.X)
            {
                dx = p.X - viewer.ActualWidth;
            }
            TabControl     tab = MovingTabItem.Parent as TabControl;
            MovableTabItem goal;

            if (dx == 0)
            {
                HitTestResult ret = VisualTreeHelper.HitTest(viewer, e.MouseDevice.GetPosition(viewer));
                if (ret == null)
                {
                    return;
                }
                goal = App.FindVisualParent <MovableTabItem>(ret.VisualHit);
                double x = e.MouseDevice.GetPosition(goal).X;
                if (x < 0 || MovingTabItem.ActualWidth < x)
                {
                    // 移動した結果マウスの位置が選択しているタブの範囲外になって振動を起こさないように
                    goal = null;
                }
            }
            else if (dx < 0)
            {
                TabIndexRange range = new TabIndexRange(tab);
                goal = tab.Items[Math.Max(0, range.PartialMin - 1)] as MovableTabItem;
            }
            else
            {
                TabIndexRange range = new TabIndexRange(tab);
                goal = tab.Items[Math.Min(range.PartialMax + 1, tab.Items.Count - 1)] as MovableTabItem;
            }
            if (goal == null || goal.Parent != MovingTabItem.Parent)
            {
                return;
            }
            MoveTabItem(goal);
        }