I try to build a title bare like Google Chrome title bar in WPF
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="auto"/>
</Grid.ColumnDefinitions>
<!--taps -->
<StackPanel Orientation="Horizontal" Grid.Column="0">
<!--open taps-->
<local:TitleWindowTap />
<local:TitleWindowTap />
<!--add tap button-->
<Button Style="{StaticResource MaterialDesignIconButton}">
<materialDesign:PackIcon Kind="AddCircle"/>
</Button>
</StackPanel>
<!--window control buttons-->
<StackPanel Orientation="Horizontal" Grid.Column="1">
<Button Style="{StaticResource MaterialDesignIconButton}" >
<materialDesign:PackIcon Kind="WindowMinimize"/>
</Button>
<Button Style="{StaticResource MaterialDesignIconButton}" >
<materialDesign:PackIcon Kind="WindowMaximize"/>
</Button>
<Button Style="{StaticResource MaterialDesignIconButton}" >
<materialDesign:PackIcon Kind="WindowClose"/>
</Button>
</StackPanel>
</Grid>
and the code for the TitleWindowTap
is a userControl as following
<Border Margin="5 5 0 5" BorderBrush="{DynamicResource SecondaryHueMidBrush}" BorderThickness="1" CornerRadius="10">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="auto"/>
</Grid.ColumnDefinitions>
<Button Style="{StaticResource MaterialDesignIconButton}" Grid.Column="1">
<materialDesign:PackIcon Kind="WindowClose"/>
</Button>
<TextBlock x:Name="txtBlock" d:Text="very long title bla bls" VerticalAlignment="Center" Padding="5" FontSize="20" TextTrimming="CharacterEllipsis">
no title
</TextBlock>
</Grid>
</Border>
when I add a new tap (manually in XML) it over the window controls like the following
how to auto resize this taps to fit the available space ?
If you want the taps to be auto-resized you should get rid of the StackPanel
and use a Panel
that actually resizes its children. You could for example add a ColumnDefinition
per TitleWindowTap
:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="auto"/>
</Grid.ColumnDefinitions>
<!--open taps-->
<local:TitleWindowTap />
<local:TitleWindowTap Grid.Column="1" />
<!--add tap button-->
<Button Grid.Column="2" Style="{StaticResource MaterialDesignIconButton}">
<materialDesign:PackIcon Kind="Circle"/>
</Button>
<!--window control buttons-->
<StackPanel Orientation="Horizontal" Grid.Column="3">
<Button Style="{StaticResource MaterialDesignIconButton}" >
<materialDesign:PackIcon Kind="WindowMinimize"/>
</Button>
<Button Style="{StaticResource MaterialDesignIconButton}" >
<materialDesign:PackIcon Kind="WindowMaximize"/>
</Button>
<Button Style="{StaticResource MaterialDesignIconButton}" >
<materialDesign:PackIcon Kind="WindowClose"/>
</Button>
</StackPanel>
</Grid>