对于自定义TabControl,如果没有剩下的项目,如何删除边框?

时间:2014-11-13 16:41:37

标签: wpf

我有一个TabControl,如果需要,它支持删除项目。为了使其看起来自然,我制作了TabItem底部厚度为0Content顶部厚度为0。我也有

<Border Background="{StaticResource someLinearBrush with a 0.99 offset}" 
                    <!-- This is the area in which TabItems (the strips) will be drawn. -->
                    <TabPanel IsItemsHost="True"/>
                 </Border>

enter image description here

模仿右侧的一条线。[黄线]
我还设置了一个Icommand来执行List A.Remove(tab)之类的操作来删除viewModel中的选项卡。我的问题当我删除里面的每个项目时,丑陋的边框背景仍然存在。[黄线]。我想我需要做一些像

这样的事情
private void OnCloseTab(object obj)
{
    TabData tab = obj as TabData;
    if (TabItems.Count() == 1)
    {
        //do sth to change the border background to transparent
    }
    Console.WriteLine("has been here ?");
    if (tab != null && TabItems.Contains(tab))
    {
        TabItems.Remove(tab);

    }
} 

我不确定如何在styles.xaml中定义Border所有内容。

1 个答案:

答案 0 :(得分:1)

TabControl模板中,您可以添加触发器:

<Trigger Property="HasItems" Value="False">
  <Setter TargetName="YourBorder" Property="Background" Value="{x:Null}" />
</Trigger>

YourBorder是您x:Name提供的Border。请注意,由于您引用了特定的模板元素,因此必须将此触发器放在ControlTemplate.Triggers中,而不是Style.Triggers