我正在尝试在WPF标签中实现,其行为类似于IE9中的标签。 当您在最后几个选项卡中打开时,它们会变小,并且左侧和右侧也会显示按钮,以便在选项卡之间滚动。
任何帮助都会非常受欢迎。
答案 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