GridExtra.Core.WPF 0.5.1

dotnet add package GridExtra.Core.WPF --version 0.5.1
NuGet\Install-Package GridExtra.Core.WPF -Version 0.5.1
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="GridExtra.Core.WPF" Version="0.5.1" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add GridExtra.Core.WPF --version 0.5.1
#r "nuget: GridExtra.Core.WPF, 0.5.1"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install GridExtra.Core.WPF as a Cake Addin
#addin nuget:?package=GridExtra.Core.WPF&version=0.5.1

// Install GridExtra.Core.WPF as a Cake Tool
#tool nuget:?package=GridExtra.Core.WPF&version=0.5.1

GridExtra

GridExtra is a custom panel library for WPF/UWP.

  • ResponsiveGrid
    • Custom Panel class that provides bootstrap like grid system.
    • Grid system
      • switch layout with window width.
        • XS(<768px), SM(<992px), MD(<1200px), LG(1200px<=)
      • 12 columns across the page.(customizable with MaxDivision property)
  • GridEx
    • Helper class that defines usefull attached properties for Grid panel.
  • WrapPanelEx
    • Helper class that provide adaptive layout for WrapPanel.

install

Nuget Package

Install-Package GridExtra.Core.WPF

Preparation

Add xmlns to xaml code.

For WPF
xmlns:ge="clr-namespace:SourceChord.GridExtra;assembly=GridExtra.Wpf"
For UWP
xmlns:ge="using:SourceChord.GridExtra"

Usage

ResponsiveGrid

ResponsiveGrid provides the grid layout system that is similar to Bootstrap framework.

demo

Example
    <Grid>
        <Grid.Resources>
            <Style TargetType="{x:Type Border}">
                <Setter Property="BorderBrush" Value="Black" />
                <Setter Property="BorderThickness" Value="1" />
                <Setter Property="Background" Value="LightGray" />
                <Setter Property="Height" Value="60" />
            </Style>
        </Grid.Resources>
        <rg:ResponsiveGrid>
            <Border ge:ResponsiveGrid.XS="12" ge:ResponsiveGrid.SM="3" />
            <Border ge:ResponsiveGrid.XS="12" ge:ResponsiveGrid.SM="6" />
            <Border ge:ResponsiveGrid.XS="12" ge:ResponsiveGrid.SM="3" />
        </rg:ResponsiveGrid>
    </Grid>

extra small device(~768px)
extra small device

small device(~992px)
small device

Properties
Dependency Properties
Property Name Type Description
MaxDivision int Gets or sets a value that determines grid divisions.
BreakPoints BreakPoints class
ShowGridLines int Gets or sets a value that indicates whether grid column's lines are visible within this ResponsiveGrid.
Attached Properties
Property Name Type Description
XS<br/>SM<br/>MD<br/>LG<br/> int Gets or sets a value that determines grid columns for XS(extra small), SM(small), MD(medium), LG(large) devices.
XS_Offset<br/>SM_Offset<br/>MD_Offset<br/>LG_Offset<br/> int Gets or sets a value that determines grid columns offset for XS(extra small), SM(small), MD(medium), LG(large) devices.
XS_Push<br/>SM_Push<br/>MD_Push<br/>LG_Push<br/> int Gets or sets a value that moves columns to right from the original position.
XS_Pull<br/>SM_Pull<br/>MD_Pull<br/>LG_Pull<br/> int Gets or sets a value that moves columns to left from the original position.
Compared to bootstrap
bootstrap ResponsiveGrid
col-xs<br/>col-sm<br/>col-md<br/>col-lg<br/> XS<br/>SM<br/>MD<br/>LG<br/>
col-xs-offset<br/>col-sm-offset<br/>col-md-offset<br/>col-lg-offset<br/> XS_Offset<br/>SM_Offset<br/>MD_Offset<br/>LG_Offset<br/>
col-xs-push<br/>col-sm-push<br/>col-md-push<br/>col-lg-push<br/> XS_Push<br/>SM_Push<br/>MD_Push<br/>LG_Push<br/>
col-xs-pull<br/>col-sm-pull<br/>col-md-pull<br/>col-lg-pull<br/> XS_Pull<br/>SM_Pull<br/>MD_Pull<br/>LG_Pull<br/>
visibility-xs, visibility-sm,…<br />hidden-xs, hidden-sm,... (T.B.D.)
attention

ResponsiveGrid is not suitable for ItemsPanel, because it isn't implemented VirtualizingPanel class.

If you use ResponsiveGrid in ListBox as ItemsPanel. Your ListBox become to not virtualize items of ListBox.

GridEx

GridEx is Helper class for defining Grid properties.

demo

Example1 (Row/Column Definition)
    <Grid ge:GridEx.RowDefinition="*, *, *, *"
          ge:GridEx.ColumnDefinition="50, 75, *, 2*"
          ShowGridLines="True">
        <Button Grid.Row="1"
                Grid.Column="2"
                Margin="5"
                Content="Button" />
    </Grid>

Example1

Row/Column Definition with Min/Max size
    <Grid ge:GridEx.RowDefinition="*, *, *, *"
          ge:GridEx.ColumnDefinition="50, *(50-200), 2*(80-), 2*(-300)"
          ShowGridLines="True">
        <Button Grid.Row="1"
                Grid.Column="2"
                Margin="5"
                Content="Button" />
    </Grid>

ge:GridEx.ColumnDefinition="50, *(50-200), 2*(80-), 2*(-300)" is similar to below definition.

        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="50"/>
            <ColumnDefinition Width="*" MinWidth="50" MaxWidth="200"/>
            <ColumnDefinition Width="2*" MinWidth="80"/>
            <ColumnDefinition Width="2*" MaxWidth="300"/>
        </Grid.ColumnDefinitions>
Example2 (Area Definition)

Area property provides the way of defineing Row/Column/RowSpan/ColumnSpan.

    <Grid ge:GridEx.RowDefinition="*, *, *, *"
          ge:GridEx.ColumnDefinition="*, *, *, *"
          ShowGridLines="True">
        <Button Margin="5"
                ge:GridEx.Area="0, 0, 1, 2"
                Content="GridEx.Area=&quot;0, 0, 1, 2&quot;" />
        <Button Margin="5"
                ge:GridEx.Area="2, 1, 2, 3"
                Content="GridEx.Area=&quot;2, 1, 2, 3&quot;" />
    </Grid>

Example2

Example3 (Named Template Area)

TemplateArea provides named grid areas, like CSS Grid Layout Module Level 1.
TemplateArea property makes row/column definition. And, define region's name.

Children of Grid can be placed with region's name, that is defined by TemplateArea property.

    <Grid ge:GridEx.TemplateArea="
            Header Header Header &#10;
            Menu Content SubMenu &#10;
            Footer Footer Footer &#10;
          "
          ShowGridLines="True">
        <Button Margin="5"
                ge:GridEx.AreaName="Header"
                Content="Header" />
        <Button Margin="5"
                ge:GridEx.AreaName="Menu"
                Content="Menu" />
        <Button Margin="5"
                ge:GridEx.AreaName="Content"
                Content="Content" />
        <Button Margin="5"
                ge:GridEx.AreaName="SubMenu"
                Content="SubMenu" />
        <Button Margin="5"
                ge:GridEx.AreaName="Footer"
                Content="Footer" />
    </Grid>

Example3

Row devision is defined by line feed or /.

  • line feed
    • \n(.cs)
    • &#10;(xaml)
  • /
    <Grid ge:GridEx.TemplateArea="
            Header Header Header/
            Menu Content SubMenu/
            Footer Footer Footer/
          ">
Example4 (Named Template Area, working with RowDefinition/ColumnDefintion)
    <Grid ge:GridEx.RowDefinition="50, *, 30"
          ge:GridEx.ColumnDefinition="*, 2*, 100"
          ge:GridEx.TemplateArea="
            Header Header Header/
            Menu Content SubMenu/
            Footer Footer Footer/
          "
          ShowGridLines="True">
        <Button Margin="5"
                ge:GridEx.AreaName="Header"
                Content="Header" />
        <Button Margin="5"
                ge:GridEx.AreaName="Menu"
                Content="Menu" />
        <Button Margin="5"
                ge:GridEx.AreaName="Content"
                Content="Content" />
        <Button Margin="5"
                ge:GridEx.AreaName="SubMenu"
                Content="SubMenu" />
        <Button Margin="5"
                ge:GridEx.AreaName="Footer"
                Content="Footer" />
    </Grid>

Example4

Attached Properties(for Grid)
Property Name Type Description
RowDefinition string Sets a value that determines row definition of Grid.
ColumnDefinition string Sets a value that determines column definition of Grid.
TemplateArea string Sets a definition of grid devision and area names.
Attached Properties(for Grid children)
Property Name Type Description
Area string Sets a value that determines Row, Column, RowSpan, ColumnSpan properties.
AreaName string Sets a name of regions for item's belong.(use with TemplateArea property)
Example5 (Auto fill children)

demo2

Attached Properties(for Grid)
Property Name Type Description
AutoFillChildren string Gets or sets a value that indicates whether the Grid arranges its children to each cell.
AutoFillOrientation string Sets a value that determines auto fill orientation.
Attached Properties(for Grid children)
Property Name Type Description
AutoFillSpan string Sets a value that determines cell span value that is used during AutoFill process.
    <Grid ge:GridEx.ColumnDefinition="*, *"
        ge:GridEx.RowDefinition="Auto, Auto, Auto"
        ge:GridEx.AutoFillChildren="True"
        ShowGridLines="True">
        <TextBlock Text="Name:" />
        <TextBox VerticalAlignment="Top" Margin="5"/>

        <TextBlock Text="Age:" />
        <TextBox VerticalAlignment="Top" Margin="5"/>

        <Button ge:GridEx.Area="2, 1, 1, 1"
            Margin="5" Width="60"
            HorizontalAlignment="Right"
            Content="OK" />
    </Grid>

Example5

AutoFillChildren with Hidden/Collapsed items
    <Grid ge:GridEx.ColumnDefinition="*, *, *"
          ge:GridEx.RowDefinition="*, *"
          ge:GridEx.AutoFillChildren="True">
        <Button Content="1" Visibility="Hidden"/>
        <Button Content="2" />
        <Button Content="3" />
        <Button Content="4" />
        <Button Content="5" Visibility="Collapsed" />
        <Button Content="6" />
    </Grid>

Example5_1

AutoFillChildren with pinned items
    <Grid ge:GridEx.ColumnDefinition="*, *, *"
          ge:GridEx.RowDefinition="*, *"
          ge:GridEx.AutoFillChildren="True">
        <Button Content="1" />
        <Button Content="2" />
        <Button Content="3" />
        <Button Content="4" />
        <Button Content="Fixed Item" ge:GridEx.Area="0,1,1,1"/>
    </Grid>

Example5_2

WrapPanelEx (WPF Only)

WrapPanelEx is Helper class that provide adaptive layout for WrapPanel.

demo

Example1

WrapPanelEx.AdaptiveLayout property makes WrapPanel into UWP Community Toolkit's AdaptiveGridView like layout.

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition />
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>
        <WrapPanel ItemWidth="200" ItemHeight="70"
                   Orientation="Horizontal"
                   ge:WrapPanelEx.AdaptiveLayout="{Binding IsChecked, ElementName=chkIsAdaptive}">
            <Button />
            <Button />
            <Button />
            <Button />
            <Button />
            <Button />
            <Button />
        </WrapPanel>
        <CheckBox x:Name="chkIsAdaptive"
                  Grid.Row="1" Margin="5"
                  Content="WrapPanelEx.AdaptiveLayout"/>
    </Grid>

Lisence

MIT

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp3.1 is compatible. 
.NET Framework net45 is compatible.  net451 was computed.  net452 was computed.  net46 was computed.  net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • .NETCoreApp 3.1

    • No dependencies.
  • .NETFramework 4.5

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
0.5.1 109 2/3/2024

Targeted .netCore WPF applications