2017-07-25 51 views
0

我发现这个问题有很多变化,但交谈似乎总是围绕个人TabItems,而不是TabPanel作为一个单独的东西。如何有条件地隐藏TabControl的TabPanel部分的整体?

我的主窗口上有一个TabControl。选项卡是视图。其中一个视图是特殊的...导航显示,而其他所有视图都是导航视图可以打开的“部分”。

我想完成的是,当用户正在查看导航视图时,标签全部消失。即隐藏整个TabPanel,而不是一个一个地隐藏每个TabItem。在查看任何其他页面时,选项卡显示,以便在视图之间轻松移动。

我创建此问题是为了响应my other question上提出的建议。

我的问题是,TabPanel似乎并不有一个Template,我可以为了做类似的东西结合到Visibility属性DataTrigger覆盖。我得到的最接近的是一个普通的旧Style.Setter

有关如何获得我所追求的任何建议?

+0

你会考虑使用'TreeView',然后'Control'和特定的'ControlTemplate's吗?这将允许你使用特定的'UserControl'或者你正在使用的任何东西来显示基于'ViewModel'类型的信息。但这取决于你的应用程序的结构。你能提供一些代码,所以我们知道我们正在处理什么?谢谢 – XAMlMAX

回答

2

你基本上自己提供了答案 - 正确的组合是使用Style连同DataTrigger。诀窍是定义一个Style,其中TargetType设置为{x:Type TabPanel},并将其作为TabControl的资源 - 这样该样式将应用于TabPanel(因为它是隐式样式)。以下是一个示例:

<TabControl (...)> 
    <TabControl.Resources> 
     <Style TargetType="{x:Type TabPanel}"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding SelectedIndex, RelativeSource={RelativeSource AncestorType=TabControl}}" 
          Value="0"> 
        <Setter Property="Visibility" Value="Collapsed" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </TabControl.Resources> 
    (...) 
</TabControl> 

在此示例中,面板将在选择第一项时折叠。

+0

这工作很好。我以为我曾尝试将'DataTrigger'放到任何地方,但显然不是在这个特定的插槽中。有时候,WPF猫的皮肤太多了。非常感谢。 – DonBoitnott