【问题标题】:Setting style on first and last visible TabItem of TabControl在 TabControl 的第一个和最后一个可见 TabItem 上设置样式
【发布时间】:2010-09-17 05:32:14
【问题描述】:

我想在 TabControl 中的第一个和最后一个 TabItems 上设置样式,并在 TabItems 的可见性更改时更新它们。我看不到使用触发器的方法。

我们追求的是这样的:

| > > > |

并且 TabItems 的可见性是由绑定决定的。

我确实让它在代码中工作。在 TabItem 可见性更改时,通过 TabItems 枚举,直到找到第一个可见的。在那个上设置样式。对于所有其他可见的 TabItem,将它们设置为尖头样式(这样以前第一个可见的现在是尖头的)。然后从头开始,直到找到一个可见的 TabItem 并在该选项上设置最后一个样式。 (这也让我们解决了 TabControl 的问题,如果没有选择任何可见的 TabItem,它将显示不可见的 TabItem 的内容。)

毫无疑问,我可以对我的方法进行改进,但我不相信这是正确的方法。

你会如何处理这个问题?

【问题讨论】:

  • 没有看到直接的解决方案,我可能会考虑构建一个自定义的 TabControl。但同样,可见性取决于什么样的面板布置了 tabitems,如果你有,请给我们更多细节。
  • 我们使用的是 WrapPanel。为了给你一个更好的主意,标题是重叠的箭头,开始和结束需要是方形的。我确实通过在 TabItem 可见性更改上应用样式来使其在代码中工作,但我很想看看其他人的想法。

标签: .net wpf xaml tabcontrol tabitem


【解决方案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;
    }

如果您以编程方式将选项卡项添加到您的控件,这很简单... :)

【讨论】:

  • 作为心理形象,每个TabItem都是一个箭头形状 | > > > |但第一个和最后一个有方形末端。如果 TabItem 0 变得不可见,则 TabItem 1 必须具有方形样式。 TabItems 的可见性是通过绑定来控制的。 TabItems 不会滚动到视图之外。
【解决方案2】:

请注意,当 TabControl 在视图中时,我们的 TabItems 的可见性不会受到影响,因此我们只能在 TabControl 可见性更改时应用样式。

私人无效面包屑_IsVisibleChanged(对象发送者,DependencyPropertyChangedEventArgs e) { if ((bool)e.NewValue) { 如果(发件人是 TabControl) { TabControl tabControl = (TabControl)sender; int firstVisible = -1; for (int i = 0; i -1) //如果是-1,它们都是不可见的 { 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"); 休息; } } } } } }

【讨论】:

    【解决方案3】:

    我采用了silverlight tabcontrol 并使tabitems 可滚动。这是帖子的链接。我想这就是你要找的。​​p>

    http://www.dansoltesz.com/post/2010/07/20/Silverlight-tabcontrol-with-scrollable-tabItems.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-28
      • 2015-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-31
      • 1970-01-01
      • 2012-07-27
      相关资源
      最近更新 更多