2011-04-21 73 views
0

我有一個帶有n個選項卡的TabControl。 我想限制TabControl的寬度,這樣如果我只剩下一個Tab,那麼當我調整包含Tabcontrol的主窗口的大小時,它的標題總是可見的。 有什麼建議嗎?tabcontrol width wpf

+0

我不明白的問題/問題。調整窗口大小時,tabcontrol的tabitem標題消失了嗎? – Jose 2011-04-21 12:59:49

+0

建議將顯示導致此行爲的一些代碼。 – 2011-04-21 13:04:17

回答

1

我通常會隱藏標籤時,只有一個項目是左:

<TabControl ItemsSource="{Binding Data}"> 
    <TabControl.ItemContainerStyle> 
     <Style TargetType="{x:Type TabItem}"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=TabControl}, Path=Items.Count}" 
          Value="1"> 
        <Setter Property="Visibility" Value="Collapsed"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </TabControl.ItemContainerStyle> 
</TabControl> 

如果你想顯示的東西,而不是你可以疊加它上面並顯示它只有當計數下降到1

編輯:我可能應該提到你的問題確實沒有太大意義,你應該試着更清楚地表達自己。一種猜測,你可能意味着你想要最後剩下的選項卡拉伸整個可用寬度。這並不那麼簡單,因爲標題在TabPanel中,不能簡單地拉伸。

一個近似是綁定到TabControl的寬度:

<TabControl.ItemContainerStyle> 
    <Style TargetType="{x:Type TabItem}"> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=TabControl}, Path=Items.Count}" 
        Value="1"> 
       <Setter Property="Width" Value="{Binding RelativeSource={RelativeSource AncestorType=TabControl}, Path=ActualWidth}"/> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 
</TabControl.ItemContainerStyle> 

但是,這是一個有點過大,則可能需要使用ValueConverter減去一個很小的值。

EDIT2:像這樣:

<Style TargetType="{x:Type TabItem}"> 
    <Style.Resources> 
     <local:AddConverter x:Key="AddConverter"/> 
    </Style.Resources> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=TabControl}, Path=Items.Count}" 
       Value="1"> 
      <Setter Property="Width" Value="{Binding RelativeSource={RelativeSource AncestorType=TabControl}, 
                Path=ActualWidth, 
                Converter={StaticResource AddConverter}, 
                ConverterParameter=-5}"/> 
     </DataTrigger> 
    </Style.Triggers> 
</Style> 
public class AddConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     double input = (double)value; 
     double input2 = double.Parse(parameter as string); 
     return input + input2; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     double input = (double)value; 
     double input2 = double.Parse(parameter as string); 
     return input - input2; 
    } 
}