首页 文章

tabcontrol宽度wpf

提问于
浏览
0

我有一个带有n个标签的TabControl . 我试图限制TabControl的宽度,这样如果我只剩下一个Tab,那么当我调整包含Tabcontrol的主窗口的大小时,它的 Headers 将始终可见 . 有什么建议?

1 回答

  • 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时显示 .

    Edit: 我可能应该提到你的问题确实没有太多意义,你应该试着更清楚地表达自己 . 关于你可能意味着什么的一个猜测是你希望最后剩下的标签拉伸整个可用宽度 . 这不是那么简单,因为 Headers 位于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;
        }
    }
    

相关问题