我有UserControl
上的TabControl
由ViewModel支持,其中一個選項卡項的Visibility
綁定到ViewModel上的屬性。WPF TabControl - 當TabItem可見性發生變化時選擇不同的選項卡
<TabControl x:Name="myTabControl">
<TabItem Header="Tab 1" />
<TabItem Header="Tab 2" Visibility="{Binding HasData, Converter={StaticResource boolToVisibilityConverter}}"/>
</TabControl>
當的TabItem
變化Visibility
,它縮短(隱藏)的TabItem
頭,但它仍然顯示其內容。
我希望TabControl
到切換到可見標籤,當其他標籤隱藏,有點驚訝發現它不會自動發生。
附加的事件處理程序SelectionChanged
事件TabControl
的顯示TabItem.IsSelected
(和TabControl.SelectedItem
)甚至沒有受到影響時TabItem.Visibility
變化(這是一個錯誤?!)。
我都試過一個屬性觸發:
<!-- This doesn't compile because of TargetName on the Setter, think you can only use it in Control Templates.
I don't know how to refer to the parent TabControl from within the TabItem style. -->
<TabControl.ItemContainerStyle>
<Style TargetType="{x:Type TabItem}" BasedOn="{StaticResource {x:Type TabItem}}">
<Style.Triggers>
<Trigger Property="Visibility" Value="Collapsed">
<Setter TargetName="myTabControl" Property="SelectedIndex" Value="0" />
</Trigger>
</Style.Triggers>
</Style>
</TabControl.ItemContainerStyle>
和數據觸發:
<!-- This doesn't quite work, it affects the Visibility of the TabItem's content too -->
<TabControl.Style>
<Style TargetType="{x:Type TabControl}" BasedOn="{StaticResource {x:Type TabControl}}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=SelectedItem.Visibility, ElementName=tabControl}"
Value="Collapsed">
<Setter Property="SelectedIndex" Value="0" />
</DataTrigger>
</Style.Triggers>
</Style>
</TabControl.Style>
我不能讓觸發器的工作,而且也沒有VisibilityChanged
事件我可以處理,所以我有點卡住,並希望得到一些幫助。
啊,那樣做! (+1)不知道爲什麼我沒有更早發現它 - 我想MSDN當時必須過濾出繼承的屬性。 我打算推遲標記這是答案,只是爲了看看有人有沒有代碼隱藏的建議,但非常感謝。 – Riko 2010-08-26 14:14:33