CommunityToolkit / Windows

Collection of controls for WinUI 2, WinUI 3, and Uno Platform developers. Simplifies and demonstrates common developer tasks building experiences for Windows with .NET.
https://aka.ms/windowstoolkitdocs
Other
590 stars 74 forks source link

Add spacing between Header and Content in HeaderedContentControl #532

Open naumenkoff opened 1 month ago

naumenkoff commented 1 month ago

Describe the bug

I noticed an inconsistency in the HeaderedContentControl provided by this package. In a standard Windows 11 app like Settings (or any other default app), there is a 9 pixel gap between the header and content of the HeaderedContentControl. However, in the current implementation, there is no gap at all, except for the default 1 pixel from the Grid.

Steps to reproduce

  1. Add a HeaderedContentControl to the layout.
  2. Set the Header property, for example, Hello, world!
  3. Add a Button as the content of the HeaderedContentControl
  4. Run the application.
  5. Notice that the gap between the Hello, world! and Button is only 1 pixel.

Expected behavior

Users can set the gap between the Header and Content, for example, to 8 px (so that the total gap is 9 px).

Solution 1

Forward the Padding property to the Margin of the ContentPresenter named ContentPresenter:

                        <ContentPresenter x:Name="ContentPresenter"
                                          Grid.Row="1"
                                          Grid.ColumnSpan="2"
                                          HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                          VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                                          Content="{TemplateBinding Content}"
                                          Margin="{TemplateBinding Padding}" />

This would allow the user to set a Padding of "0, 8, 0, 0" and achieve the original, familiar gap.

Solution 2

Add a Spacing field (the gap between Header and Content): int.
Declare a new RowDefinition / ColumnDefinition with the height/width equal to Spacing, depending on the orientation.

Solution 3

Add a Spacing field (the gap between Header and Content): Thickness.
In the ContentPresenter named ContentPresenter, set the Padding property to Spacing.

Screenshots

Settings, 9px Image

Community Toolkit, 1px Image

Code Platform

Windows Build Number

Other Windows Build number

Windows 11 24H2 (Build 26100)

App minimum and target SDK version

Other SDK version

No response

Visual Studio Version

Preview

Visual Studio Build Number

17.11.0 Preview 5.0

Device form factor

Desktop

Additional context

CommunityToolkit.WinUI.Controls.HeaderedControls: 8.1.240821

Help us help you

No, I'm unable to contribute a solution.

niels9001 commented 1 month ago

This would be a useful property to have. Thanks for the extensive description + options @naumenkoff, I'll have a look!