Dragablz icon indicating copy to clipboard operation
Dragablz copied to clipboard

The HeaderSuffixContent is hidden sometimes.

Open pgbo opened this issue 7 years ago • 0 comments

image

image

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>

pgbo avatar Jun 06 '18 04:06 pgbo