【问题标题】:WPF TabControl collapsed tab headers are not completely hiddenWPF TabControl 折叠的选项卡标题未完全隐藏
【发布时间】:2010-08-04 12:29:48
【问题描述】:

我正在使用 TabControl 以编程方式显示或隐藏表单控件组。我已经实现了here 中描述的技术,它大致可以按预期工作,除了在标签页眉通常显示的位置有一个大约 1 或 2 像素高的带。

我已经通过使用Snoop 来导航可视化树并观察选择每个元素时突出显示矩形的移动来验证这一点。选项卡内容元素的矩形大小略小于包含 TabControl 的大小,这是我看到的额外像素的原因。可能影响这一点的元素都没有边距、边框或填充。

为了实现与其他控件的正确对齐,我需要消除这个额外的空间,但我不确定如何。但是,也许我应该问的问题是“有没有更好的方法来选择性地显示/隐藏控件组?”。

感谢您的想法, 蒂姆

【问题讨论】:

  • 在需要隐藏的时候把后面代码中的tabcontrol完全去掉可以接受吗?
  • TabControl 永远不会完全隐藏。它的一个选项卡始终可见,具体取决于应用程序需要显示的控件组,因此我不认为删除选项卡控件是一种选择。另一方面,用某种通用面板控件替换每个选项卡是可以接受的,但我不确定哪个控件适合这个。
  • 抱歉,我点击了您发布的链接,我以为您想完全删除标签页眉。实际上,如果你想显示/隐藏控件组,你可以使用网格并切换它们的可见性(至少当我需要不同的布局时我在项目中所做的取决于所选的记录类型)

标签: wpf tabcontrol styling


【解决方案1】:

我想细线是由TabPanel 引起的,即使所有TabItems 都已折叠,它仍然存在。

但是,您可以更改TabControlControlTemplate 并将TabPanelVisibility 绑定到选项卡的数量,如下所示:

<TabPanel ... Visibility="{Binding Items.Count, RelativeSource={RelativeSource FindAncestor, Type={x:Type TabControl}}, Converter={StaticResource ZeroToCollapsedConverter}}" ... />

当然,您必须实现一个转换器,将 0 转换为 Visibility.Collapsed 并将所有其他值转换为 Visibility.Visible

顺便说一句:您可以为TabControl here 获取默认的ControlTemplate

【讨论】:

  • 谢谢 - 很好的解决方案。事实上,永远不会出现没有标签的情况,因此我不需要绑定到项目计数并创建值转换器。只需用折叠的 TabPanel 简单替换控件模板即可解决问题。顺便说一句,对于默认 WPF 控件模板来说,这是一个非常有用的资源。
  • 哦,你是对的“没有标签”的事情。当然,我的意思是 1 个选项卡,而不是 0。那么,你现在是怎么解决的呢?没有转换器?但是你永远不会有TabPanel,对吗?也许我稍微误解了你的问题?只是对您的解决方案感到好奇......关于默认模板:我也曾经寻找过这个很长时间并且很高兴我找到了它,这就是我与尽可能多的人分享它的原因能够。 :)
  • 哦,我刚刚看到,如果只显示一个选项卡,它希望 TabPanel 不可见是链接问题。我意识到你根本不想显示它,所以这种情况更容易,正如你已经发现的那样。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-22
相关资源
最近更新 更多