patrick
patrick

Reputation: 16999

Need a WPF control suggestion

I have a tab control and I want to add a button in the top right corner.

> [TabControl]
> [TabItem1][TabItem2][TabItem3][TabItem4].....blank space...[ settings button] 

If I add the settings button to the TabControl, it will be directly adjacent to TabItem4.

Any suggestions?

Upvotes: 2

Views: 108

Answers (1)

Novitzky
Novitzky

Reputation: 4876

Create something like a template content for your TabControl you put inside.

e.g.

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="100"/>
    </Grid.ColumnDefinitions>       
    <TabControl Grid.ColumnSpan="2" >
            <TabItem Header="TabItem">
            </TabItem>
            <TabItem Header="TabItem">
            </TabItem>
    </TabControl>
    <Button Grid.Column="1" VerticalAlignment="Top" Height="20"></Button>
</Grid>

Alternatively you can edit TabControl template end customize HeaderPanel as you need.

<ControlTemplate TargetType="{x:Type TabControl}">
    <Grid ClipToBounds="true" SnapsToDevicePixels="true" KeyboardNavigation.TabNavigation="Local">
        <Grid.ColumnDefinitions>
            <ColumnDefinition x:Name="ColumnDefinition0"/>
            <ColumnDefinition x:Name="ColumnDefinition1" Width="0"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition x:Name="RowDefinition0" Height="Auto"/>
            <RowDefinition x:Name="RowDefinition1" Height="*"/>
        </Grid.RowDefinitions>
        <Grid Grid.Column="0">
            <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="100"/>
        </Grid.ColumnDefinitions>
        <TabPanel x:Name="HeaderPanel" Grid.Column="0" IsItemsHost="true" Margin="2,2,2,0" Grid.Row="0" KeyboardNavigation.TabIndex="1" Panel.ZIndex="1"/>
        <Button Grid.Column="1"> settings </Button>
    </Grid>
    <Border x:Name="ContentPanel" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Grid.Column="0" KeyboardNavigation.DirectionalNavigation="Contained" Grid.Row="1" KeyboardNavigation.TabIndex="2" KeyboardNavigation.TabNavigation="Local">
        <ContentPresenter x:Name="PART_SelectedContentHost" ContentSource="SelectedContent" Margin="{TemplateBinding Padding}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
    </Border>
  </Grid>
</ControlTemplate>

Upvotes: 1

Related Questions