Я пытаюсь создать пользовательский TabControl, где, когда общая ширина элементов превышает ширину панели, в которой они находятся, они изменяют размер унифицировано, как вкладки Chrome.Я также хочу, чтобы панель была прокручиваемой, когда элементы не могут содержаться с их MinWidth.Все это уже отлично работает.
Моя проблема, я хочу, как Chrome tabcontrol, иметь кнопку «Новая вкладка» помимо панели вкладок.Для этого мне нужно как-то обернуть панель вкладок и кнопку в окне прокрутки.Но при использовании StackPanel или Grid моя панель вкладок теперь имеет ширину с PositiveInfinity, а MeassureOverride теперь не может вычислить ширину по причине.
Вот мой код:
<ScrollViewer CanContentScroll="True"
VerticalScrollBarVisibility="Disabled"
HorizontalScrollBarVisibility="Hidden">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<local:TabPanel Grid.Column="0"
IsItemsHost="True"
SnapsToDevicePixels="True"
Margin="6,5,6,0"/>
<Button Grid.Column="1"
Margin="0,5,0,0"
KeyboardNavigation.TabIndex="2"
Style="{StaticResource NewTabButtonStyle}"
Visibility="{Binding Path=AllowAddNew, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource BooleanToVisibilityConverter}}"
ToolTip="Add a New tab">
<Viewbox RenderOptions.EdgeMode="Aliased"
SnapsToDevicePixels="True" >
<Grid>
<Line X1="0" Y1="20" X2="40" Y2="20" Stroke="{Binding Path=TabForeground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:ExtendedTabControl}}}" StrokeThickness="7"/>
<Line X1="20" Y1="0" X2="20" Y2="40" Stroke="{Binding Path=TabForeground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:ExtendedTabControl}}}" StrokeThickness="7"/>
</Grid>
</Viewbox>
</Button>
</Grid>
</ScrollViewer>
Если я удаляю сетку и кнопку внутри ScrollViewer, TabPanel теперь имеет ширину, и она работает.
Итак, как мне добиться, чтобы моя кнопка находилась справа от TabPanel безTabPanel, имеющий Width = PositiveInfinity?