我有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