Dragablz
Dragablz copied to clipboard
The HeaderSuffixContent is hidden sometimes.


I check the Generic.xaml, ans saw below code of TabablzControl style.
<Grid Grid.Column="0" Grid.Row="0" Margin="0,0,0,0" x:Name="HeaderContainerGrid" Visibility="{TemplateBinding IsHeaderPanelVisible, Converter={StaticResource BooleanToVisibilityConverter}}">
<Grid.Resources>
<Style TargetType="{x:Type Button}" BasedOn="{StaticResource StandardEmbeddedButtonStyle}"></Style>
</Grid.Resources>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<ContentControl Grid.Column="0" x:Name="PrefixContentControl"
Content="{TemplateBinding HeaderPrefixContent}"
ContentStringFormat="{TemplateBinding HeaderPrefixContentStringFormat}"
ContentTemplate="{TemplateBinding HeaderPrefixContentStringFormat}"
ContentTemplateSelector="{TemplateBinding HeaderPrefixContentTemplateSelector}"/>
<local:DragablzItemsControl x:Name="PART_HeaderItemsControl"
Grid.Column="1"
ItemsSource="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Items}"
ItemContainerStyle="{TemplateBinding ItemContainerStyle}"
ItemsOrganiser="{TemplateBinding HeaderItemsOrganiser}"
KeyboardNavigation.TabIndex="1" Panel.ZIndex="1"
ItemTemplate="{TemplateBinding HeaderItemTemplate}"
FixedItemCount="{TemplateBinding FixedHeaderCount}"
Style="{StaticResource TabablzDragablzItemsControlStyle}">
<local:DragablzItemsControl.MaxWidth>
<MultiBinding>
<MultiBinding.Converter>
<local:TabablzHeaderSizeConverter Orientation="Horizontal"/>
</MultiBinding.Converter>
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="ActualWidth" />
<Binding RelativeSource="{RelativeSource Self}" Path="ItemsPresenterWidth" />
<Binding ElementName="PrefixContentControl" Path="ActualWidth" />
<Binding ElementName="DefaultAddButton" Path="DesiredSize.Width" />
<Binding ElementName="SuffixContentControl" Path="DesiredSize.Width" />
</MultiBinding>
</local:DragablzItemsControl.MaxWidth>
</local:DragablzItemsControl>
<Button Style="{StaticResource AddItemCommandButtonStyle}"
x:Name="DefaultAddButton"
Grid.Column="2"
Command="{x:Static local:TabablzControl.AddItemCommand}"
Visibility="{TemplateBinding ShowDefaultAddButton, Converter={StaticResource BooleanToVisibilityConverter}}"
/>
<ContentControl Grid.Column="3" x:Name="SuffixContentControl"
Content="{TemplateBinding HeaderSuffixContent}"
ContentStringFormat="{TemplateBinding HeaderSuffixContentStringFormat}"
ContentTemplate="{TemplateBinding HeaderSuffixContentTemplate}"
ContentTemplateSelector="{TemplateBinding HeaderSuffixContentTemplateSelector}"
HorizontalAlignment="Stretch"
/>
</Grid>
I realized that the SuffixContentControl's DesizredSize.WIdth is 0 when PART_HeaderItemsControl's width is large enough. so SuffixContentControl is hidden.
After I add MinWidth for the column show SuffixContentControl like below, the SuffixContentControl is visiable again.
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" MinWidth="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=HeaderSuffixContentMinimumSize.Width}"/>
</Grid.ColumnDefinitions>
As you can see, I alter the TabablzControl class, add a DependencyProperty HeaderSuffixContentMinimumSize in it. And you can use TabablzControl in your code like below:
<dragablz:TabablzControl
ItemsSource="{Binding WorkspaceItems}"
SelectedItem="{Binding ActiveWorkspaceItem, Mode=TwoWay}"
FixedHeaderCount="{Binding FixedItemCount}"
ShowDefaultCloseButton="True"
ShowDefaultAddButton="False"
AdjacentHeaderItemOffset="-15"
BorderBrush="{DynamicResource BorderBrushDefault}"
ClosingItemCallback="{Binding ElementName=UserControlRoot, Path=WorkspaceItemClosing}"
ItemContainerStyle="{StaticResource WorkspaceDragableTabItemStyleInner}"
x:Name="TabablzControlSelf">
<dragablz:TabablzControl.InterTabController>
<dragablz:InterTabController InterTabClient="{Binding InterTabClient}"/>
</dragablz:TabablzControl.InterTabController>
<dragablz:TabablzControl.HeaderSuffixContentMinimumSize>
<Size Width="28"/>
</dragablz:TabablzControl.HeaderSuffixContentMinimumSize>
<dragablz:TabablzControl.HeaderSuffixContent>
<StackPanel HorizontalAlignment="Stretch" VerticalAlignment="Center"
x:Name="HeaderSuffixContentContainerView">
<Button HorizontalAlignment="Left" Margin="4,0"
Style="{StaticResource GeometryContentButtonStyleDefault}"
Command="{Binding NewCommand}"
Width="20"
Height="20"
Styles:StylesHelper.CornerRadius="0,0,0,0"
BorderThickness="0"
Padding="0">
Add+
</Button>
</StackPanel>
</dragablz:TabablzControl.HeaderSuffixContent>
</dragablz:TabablzControl>