Felix
Felix

Reputation: 81

C# WPF Grid/GridSplitter

What I want to have:

What I have:

Thanks so far :)

Upvotes: 0

Views: 788

Answers (1)

punker76
punker76

Reputation: 14611

set the width (default size) for left and right column and it should be work

<Grid>
  <StatusBar Height="23" Background="Orange" DockPanel.Dock="Bottom"/>
  <Grid>
     <Grid.ColumnDefinitions>
        <ColumnDefinition MinWidth="50" Width="200"/>
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition MinWidth="100" Width="*"/>
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition MinWidth="50" Width="200"/>
     </Grid.ColumnDefinitions>
     <Grid.RowDefinitions>
        <RowDefinition Height="*"/>
     </Grid.RowDefinitions>
     <GridSplitter
        Width="5"
        Grid.Column="1"
        HorizontalAlignment="Center"
        VerticalAlignment="Stretch"
        Background="Red"
        ShowsPreview="True"/>
     <GridSplitter
        Width="5"
        Grid.Column="3"
        HorizontalAlignment="Center"
        VerticalAlignment="Stretch"
        Background="Red"
        ShowsPreview="True"/>
  </Grid>
</Grid>

EDIT

here is a fix for the first grid maxwidth problem

<Grid x:Name="Root">
      <Grid.Resources>
        <local:MaxWidthConverter x:Key="MaxWidthConverter" />
      </Grid.Resources>

      <Grid>
        <Grid.ColumnDefinitions>
          <ColumnDefinition MinWidth="50"
                            Width="200"
                            MaxWidth="{Binding ElementName=Root, Path=ActualWidth, Mode=OneWay, Converter={StaticResource MaxWidthConverter}, ConverterParameter=260}" />
          <ColumnDefinition Width="Auto" />
          <ColumnDefinition MinWidth="200"
                            Width="*" />
          <ColumnDefinition Width="Auto" />
          <ColumnDefinition MinWidth="50"
                            Width="200" />
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
          <RowDefinition Height="*" />
        </Grid.RowDefinitions>
        <GridSplitter Width="5"
                      Grid.Column="1"
                      HorizontalAlignment="Center"
                      VerticalAlignment="Stretch"
                      Background="Red"
                      ShowsPreview="True" />
        <GridSplitter Width="5"
                      Grid.Column="3"
                      HorizontalAlignment="Center"
                      VerticalAlignment="Stretch"
                      Background="Red"
                      ShowsPreview="True" />
      </Grid>
    </Grid>

simple converter to calculate the maxwidth for the first column (260 = 200 minwidth + 50 minwidth + 5 splitter width + 5 splitter width

public class MaxWidthConverter : IValueConverter
{
  public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
  {
    double minWidth;
    if (value is double && parameter is string && double.TryParse((string)parameter, NumberStyles.Any, CultureInfo.InvariantCulture, out minWidth)) {
      var maxWidth = (double)value - minWidth;
      return maxWidth < 0 ? 0 : maxWidth;
    }
    return 0;
  }

  public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
  {
    return DependencyProperty.UnsetValue;
  }
}

enter image description here

enter image description here

Upvotes: 2

Related Questions