WPF Особое поведение ширины вкладки - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть этот код с TabItems, добавленный динамически в CodeBehind (C #):

<TabControl x:Name="tabList" Grid.Column="2" HorizontalContentAlignment="Stretch"  Background="Transparent" SelectionChanged="tabList_SelectionChanged" IsSynchronizedWithCurrentItem="True">
            <TabControl.Resources>
                <DataTemplate x:Key="TabHeader" DataType="TabItem">
                    <DockPanel>
                        <Button x:Name="btnDelete" BorderThickness="0" Background="Transparent" DockPanel.Dock="Right" Margin="5,0,0,0" Padding="0" Click="btnDelete_Click" CommandParameter="{Binding RelativeSource={RelativeSource AncestorType={x:Type TabItem}}, Path=Name}">
                            <Image Source="myImage></Image>
                        </Button>
                        <ToggleButton x:Name="btnPin" Checked="btnDisablex" Unchecked="btnDisablex" BorderThickness="0" Background="Transparent" DockPanel.Dock="Right" Margin="5,0,0,0" Padding="0" CommandParameter="{Binding RelativeSource={RelativeSource AncestorType={x:Type TabItem}}, Path=Name}">
                            <ToggleButton.Style>
                                //Many Useless Things
                            </ToggleButton.Style>
                        </ToggleButton>
                        <TextBlock Text="{Binding RelativeSource={RelativeSource AncestorType={x:Type TabItem}}, Path=Header}" />
                    </DockPanel>
                </DataTemplate>
                <Style TargetType="TextBox">
                     //Other Many Useless Things
                </Style>
            </TabControl.Resources>
        </TabControl>

И со следующим стилем в пользовательских ресурсах:

<Style TargetType="{x:Type TabItem}">
        <Setter Property="AllowDrop" Value="True"/>
        <EventSetter Event="PreviewMouseMove" Handler="TabItem_PreviewMouseMove"/>
        <EventSetter Event="Drop" Handler="TabItem_Drop"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type TabItem}">
                    <Grid>
                        <Border 
                            Name="Border"
                            Margin="0,0,-4,0" 
                            Background="White"
                            BorderBrush="#888" 
                            BorderThickness="1,1,1,1" 
                            CornerRadius="2,12,0,0">
                            <ContentPresenter x:Name="ContentSite"
                                VerticalAlignment="Center"
                                HorizontalAlignment="Center"
                                ContentSource="Header"
                                Margin="12,2,12,2"
                                RecognizesAccessKey="True"/>
                        </Border>
                    </Grid>
                    <ControlTemplate.Triggers>
                        //Many Useless MultiTrigger and Datatrigger
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style> 

Код работает нормально, пока я не добавлю больше вкладок, и ширины окна больше не будет достаточно, но поведение TabControl странное: ширина TabItem становится больше, а первые TabItems исчезают.

Я просто хочу, чтобы ширина TabItem уменьшалась, или чтобы олдеры "исчезали", но всегда оставались одинаковыми. Почему это не работает?

Это скриншот, сделанный в нормальных условиях

Обычный вид работает нормально

Здесь ясна проблема: когда я добавляю больше вкладок (или я уменьшаю ширину окна / сетки), ширина вкладок становится больше

Проблема с отображением вкладок

...