我想在TabControl中的第一个和最后一个TabItem上设置一个样式,并在TabItems的可见性发生变化时更新它们。我无法通过触发器看到这样做的方法。
我们所追求的是这样的:
| > > > |
TabItems的可见性由绑定决定。
我确实在代码中工作。在TabItem可见性更改时,通过TabItem枚举,直到找到第一个可见的。在那个上设置样式。对于所有其他可见的TabItems,将它们设置为尖头样式(以便先前第一个可见的TabItem现在是尖的)。然后从结尾开始,直到找到一个可见的TabItem并在那个上设置最后一个样式。 (这也让我们解决TabControl的问题,如果没有选择任何可见的TabItem,它将显示不可见的TabItem的内容。)
我可以对我的方法做出无可置疑的改进,但我不相信这是正确的方法。
你会怎么做?
答案 0 :(得分:1)
对不起你能解释一下到目前为止我已经解释了你的问题:
当标签控件的开头和结尾处的标签项上的可见性发生变化时应用特定样式 - 即如果它滚出视图然后更改样式?
如果是这样的话,当你添加TabItems(以编程方式或在wpf中)时,你需要在你想要处理的TabItems上实现IsVisibleChanged事件处理程序(即第一个,最后一个或全部?)
public Window1()
{
InitializeComponent();
this.myTabItem.IsVisibleChanged += new DependencyPropertyChangedEventHandler(myTabItem_IsVisibleChanged);
}
private void myTabItem_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
{
myTabControl.Items[0].Style = FindResource("MyTabItemStyle") as Style;
}
如果以编程方式将选项卡项添加到控件中,这很简单......:)
答案 1 :(得分:1)
请注意,当TabControl在视图中时,TabItems的可见性不会受到影响,因此我们只能在TabControl可见性更改时应用样式。
private void Breadcrumb_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e) { if ((bool)e.NewValue) { if (sender is TabControl) { TabControl tabControl = (TabControl)sender; int firstVisible = -1; for (int i = 0; i -1) //if is -1, they're all invisible { for (int i = tabControl.Items.Count - 1; i > firstVisible; i--) { TabItem tabItem = (TabItem)tabControl.Items[i]; if (tabItem.Visibility == Visibility.Visible) { tabItem.Style = (Style)FindResource("LastBreadcrumbTabItem"); break; } } } } } }
答案 2 :(得分:0)
我已经使用了silverlight tabcontrol并使这些tabitems可滚动。这是帖子的链接。我认为这就是你要找的东西。
http://www.dansoltesz.com/post/2010/07/20/Silverlight-tabcontrol-with-scrollable-tabItems.aspx