views:

37

answers:

2

Here is the layout I want:

Grid with 2 columns, 2 rows

Row 1 should contain a group box that spans both columns. Row 2, Column 1 will contain a group box Row 2, Column 2 will contain another group box.

In row 1's group box, I want the left side to have a stack of labels/combo boxes. On the right side will be a stack of labels/checkboxes. In the Row 2/Column 1 group box, I want more labels/combo boxes that should align with the first row's labels/combo boxes. In the Row 2/Column 2 group box, I want more labels/checkboxes that align with the first row's labels/checkboxes.

Here is what I have so far. The problem I'm having is that the label/combo box pairs in row 1's group box want to span the entire group box. But, I am explicitly setting the row=0, column=0 for the inner grid that contains the labels/combo boxes.

Forgive me if this doesn't compile as I'm typing from a printout on a computer without Studio.

<Grid>
   <Grid.RowDefinitions>
      <RowDefinition/>
      <RowDefinition/>      
   </Grid.RowDefinitions>
   <Grid.ColumnDefinitions>
      <ColumnDefinition/>
      <ColumnDefinition/>
   <Grid.ColumnDefinitions>
   <GroupBox Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2">
      <GroupBox.Header>
         <Label Content="Device Configuration"></Label>
      </GroupBox.Header>
      <Grid Grid.Row="0" Column="0">
         <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition/>      
            <RowDefinition/>      
         </Grid.RowDefinitions>
         <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition/>
         <Grid.ColumnDefinitions>

         <Label Grid.Column="0" Grid.Row="0" Content="Label 1"></Label>
         <ComboBox Grid.Column="1" Grid.Row="0"></ComboBox>

         <Label Grid.Column="0" Grid.Row="1" Content="Label 2"></Label>
         <ComboBox Grid.Column="1" Grid.Row="1"></ComboBox>

         <Label Grid.Column="0" Grid.Row="2" Content="Label 3"></Label>
         <ComboBox Grid.Column="1" Grid.Row="2"></ComboBox>
      </Grid>
   </GroupBox>
</Grid>
+1  A: 

Once a control is no longer the direct descendant of a grid, it has no concept of being within the Grid panel, and isn't formatted as such. So, because there's a GroupBox in the way, it's not a direct descendant of the Grid.

If you want the contents of the GroupBox to look like they're part of the top-most Grid, you'll have to reproduce that Grid structure (2 columns in the GroupBox) on your own.

Visual Studio doesn't give any errors when you put Grid.* on items, even if the parent isn't a Grid.

Grandpappy
A: 

You are close. I don't know if it was the copy/past that broke your code or not, but you weren't closing the Grid.ColumnDefinitions tag. You also may have to reproduce the first outter grid in the top group box if you want the columns to line up.

<Grid>
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>

        <GroupBox Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2">
            <GroupBox.Header>
                <Label Content="Device Configuration"></Label>
            </GroupBox.Header>
            <Grid Grid.Row="0" Column="0">
                <Grid.RowDefinitions>
                    <RowDefinition/>
                    <RowDefinition/>
                    <RowDefinition/>
                </Grid.RowDefinitions>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition/>
                    <ColumnDefinition/>
                </Grid.ColumnDefinitions>

                <Label Grid.Column="0" Grid.Row="0" Content="Label 1"></Label>
                <ComboBox Grid.Column="1" Grid.Row="0"></ComboBox>

                <Label Grid.Column="0" Grid.Row="1" Content="Label 2"></Label>
                <ComboBox Grid.Column="1" Grid.Row="1"></ComboBox>

                <Label Grid.Column="0" Grid.Row="2" Content="Label 3"></Label>
                <ComboBox Grid.Column="1" Grid.Row="2"></ComboBox>
            </Grid>
        </GroupBox>

        <GroupBox Grid.Row="1" Grid.Column="0">
            <TextBlock>Row 1 Column 0</TextBlock>
        </GroupBox>

        <GroupBox Grid.Row="1" Grid.Column="1">
            <TextBlock>Row 1 Column 1</TextBlock>
        </GroupBox>
    </Grid>
Jerod Houghtelling