如何有条件地完全隐藏 TabControl 的 TabPanel 部分?

How can I conditionally hide the TabPanel portion of a TabControl in its entirety?

我发现这个问题有很多变体,但谈话似乎总是围绕个人 TabItems,而不是 TabPanel 本身。

我的主 window 上面有一个 TabControl。选项卡是视图。其中一个视图很特别...导航显示,而所有其他视图都是导航视图可以打开的"sections"。

我想要完成的是,当用户查看导航视图时,所有选项卡都消失了。 IE。隐藏整个 TabPanel 而不是一个接一个地隐藏每个 TabItem。查看任何其他页面时,将显示选项卡,以便在视图之间轻松移动。

我提出这个问题是为了回应在 my other question 上提出的建议。

我遇到的问题是 TabPanel 似乎没有 Template 我可以覆盖它以执行类似 DataTrigger 绑定到 [=18] 的操作=] 属性。我得到的最接近的是一个普通的旧 Style.Setter.

关于如何获得我想要的东西有什么建议吗?

基本上您自己提供了答案 - 正确的组合是使用 StyleDataTrigger。诀窍是定义一个 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>

在这个例子中,当第一个项目被选中时面板将被折叠。