TabControl - 在选项卡之间滚动

时间:2012-05-06 06:25:32

标签: wpf tabcontrol

我正在尝试在WPF标签中实现,其行为类似于IE9中的标签。 当您在最后几个选项卡中打开时,它们会变小,并且左侧和右侧也会显示按钮,以便在选项卡之间滚动。

任何帮助都会非常受欢迎。

enter image description here

1 个答案:

答案 0 :(得分:2)

创建两个主要标签(主要标签是这两个标签在答案中),就像这样

  <TabItem   Header="«" Name="LeftTab"/>
  <TabItem Header="»" Name="RightTab"/>

将它们的可见性设置为hiden。现在添加你想要的所有标签(使用c#代码或xaml),但不要忘记为你添加的所有标签设置标签

    <TabItem   Header="new" Name="tiNew" Tag="1"/>
    <TabItem Header="edit" Name="tiEdit" Tag="2"/>
    ...

现在当标签计数超过正常值而你不能在1页中显示所有内容请执行以下操作:

1.改变两个主要标签的可见性..

 bool is_Left_Right_tabVisible = false;
 if (tabControl1.Items.Count > 8)
 {
     LeftTab.Visibility = System.Windows.Visibility.Visible;
     RightTab.Visibility = System.Windows.Visibility.Visible;
     is_Left_Right_tabVisible = true;

  }
  else
  {
     LeftTab.Visibility = System.Windows.Visibility.Hidden;
     RightTab.Visibility = System.Windows.Visibility.Hidden;
     is_Left_Right_tabVisible = false;
   }

2.隐藏所有额外标签并仅显示其中一些(例如:显示两个主标签和显示标签标签1-8

3.如果用户点击主要标签(左侧或右侧标签)隐藏一个标签并显示另一个标签(例如:用户点击时您有 lefttab-1-2-3-4-righttab 在右边隐藏NO 1和vsible No 5并且关注No 5)

    private void RightTab_MouseUp(object sender, MouseButtonEventArgs e)
    {
    if (is_Left_Right_tabVisible)
    {
        TabItem ti = sender as TabItem;
        if (ti.Name == "RightTab")
        {
            //find right tab must set to visible
            int Showtabindex = 0;
            var t1 = tabControl1.Items.OfType<TabItem>().Where(x => x.Visibility == System.Windows.Visibility.Hidden);
            foreach (var item in t)
            {
                if (((int)item.Tag) > Showtabindex)
                    Showtabindex = (int)item.Tag;
            }
            //find left tab must go invisible
            int Hiddentabindex = Showtabindex;
            var t2 = tabControl1.Items.OfType<TabItem>().Where(x => x.Visibility == System.Windows.Visibility.Visible);
            foreach (var item in t2)
            {
                if (((int)item.Tag) < Hiddentabindex)
                    Hiddentabindex = (int)item.Tag;
            }

            (tabControl1.Items[Hiddentabindex] as TabItem).Visibility = System.Windows.Visibility.Hidden;
            (tabControl1.Items[Showtabindex] as TabItem).Visibility = System.Windows.Visibility.Visible;

            //you can create drag and drop for tabs then user can change tab TAG
        }
        else if (ti.Name == "LeftTab")
        {
            //.....
        }
    }
}

我知道这很难,但是当我创建一个良好的用户控制时,我感觉很好。 但是不要忘记在这个用户控件中我们使用tabcontrol,我们可以从一开始创建一个自定义选项卡控件,不要使用这个tabcontrol。

当这些更改不透明度并移动动画时,您还可以为标签创建动画check this post