Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

WPF Groupbox header position alignment

Is it possible to set the position alignment for a GroupBox Header in WPF? The default is to place in the top left corner of the GroupBox outline but I would like it to be centered at the top. I know that you can set the properties of the text using:

<GroupBox Grid.Row="1" HorizontalAlignment="Center">
   <GroupBox.Header> 
      <TextBlock Text="Cash Match" Foreground="Black" FontWeight="Bold"/>
   </GroupBox.Header>
</GroupBox>

But I'm looking to set the position of it with respect to the GroupBox outline.

like image 274
ambog36 Avatar asked Jan 20 '10 18:01

ambog36


2 Answers

It's simple! Just edit Template of GroupBox:

In Blend, do the following :

  • Right click GroupBox > Edit Template > Edit a Copy > OK
  • Search for following section:

    <Border x:Name="Header" Padding="3,1,3,0" 
            Grid.Column="1" Grid.Row="0" Grid.RowSpan="2">
        ...
    </Border>
    
  • Change Grid.Column to 2

  • Also set HorizontalAlignment="Right"

You have just aligned the header to right!!! But bot the white gap behind it. For that,

  • Now search for following section :

    <Border BorderBrush="White" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="4" Grid.ColumnSpan="4" Grid.Row="1" Grid.RowSpan="3">
        <Border.OpacityMask>
            ...
        </Border.OpacityMask>
        ...
    </Border>
    
  • Add RenderTransformOrigin="0.5,0.5" to the border

  • Just above , add following code (this will shift the "white gap" behind header to right:

    <Border.RenderTransform>
        <ScaleTransform ScaleX="-1"/>
    </Border.RenderTransform>
    

You are done! You just got a GroupBox with right aligned header!!!

Please tell me if this is what you required.

like image 94
mg007 Avatar answered Nov 04 '22 20:11

mg007


Changing the group-box-header alinment will result in non-OS-conform controls.

Therefore, I think you won't be able to change this using the default styles. A custom template will solve your problem.

like image 45
Matthias Avatar answered Nov 04 '22 18:11

Matthias