2017-07-25 110 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