1

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

任何帮助都会非常感激。

在此处输入图像描述

4

1 回答 1

3

像这样创建两个主选项卡(主选项卡是这两个选项卡)

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

将它们的可见设置为隐藏。现在添加您想要的所有选项卡(使用 c# 代码或 xaml),但不要忘记为您添加的所有选项卡设置标签,如下所示

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

现在,当标签数量超出正常水平并且您无法在一页中显示全部内容时:

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.如果用户单击主选项卡(左侧或右侧选项卡)隐藏一个选项卡并显示另一个选项卡(例如:当用户单击右侧隐藏的 NO 1 和可见的 No 5 时,您有lefttab-1-2-3-4-righttab和专注于 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。

您还可以为选项卡创建动画,当那些改变不透明度和移动动画会很好检查这篇文章

于 2012-05-06T07:22:56.670 回答