2014-01-15 3 views
0

Я expierience проблемы в определении (с использованием Grid) макета, который выглядит следующим образом:Как определить, что расположение в XAML

enter image description here

Я знаю, как получить простой макет, который выглядит следующим образом:

enter image description here

<Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="2*" /> 
      <RowDefinition Height="8*" /> 
     </Grid.RowDefinitions> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="2*" /> 
      <ColumnDefinition Width="4*" /> 
     </Grid.ColumnDefinitions> 
</Grid> 

Как добиться, что первый макет?

ответ

3

Вы не можете достичь этого с помощью одной сетки. Создайте сетку с двумя столбцами и тремя рядами. Затем поместите еще одну сетку в столбец 1 строки 1 внешней сетки. Например (также демонстрирует, как поставить контроль в каждой клетке):

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="2*" /> 
     <RowDefinition Height="3*" /> 
     <RowDefinition Height="7*" /> 
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="2*" /> 
     <ColumnDefinition Width="4*" /> 
    </Grid.ColumnDefinitions> 
    <Grid Grid.Row="1" Grid.Column="1"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="3*" /> 
      <RowDefinition Height="*" /> 
     </Grid.RowDefinitions> 
     <Label >Row 1 Column 1</Label> 
     <Label Grid.Row="1">Row 2 Column 1</Label> 
    </Grid> 
    <Label >Row 0 Column 0</Label> 
    <Label Grid.Row="1">Row 1 Column 0</Label> 
    <Label Grid.Row="2">Row 2 Column 0</Label> 
    <Label Grid.Column="1">Row 0 Column 1</Label> 
    <Label Grid.Column="1" Grid.Row="2">Row 3 Column 1</Label> 
</Grid> 

UPDATE:

На самом деле вы можете добиться того, что с одной сетки, как было предложено в комментарии @ Крис. Создайте сетку с двумя столбцами и 4 строками. Затем установите элемент управления UI в столбце 1 строки 1, чтобы занять место для двух строк (значение Grid.RowSpan="2"). Это пример:

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="2*" /> 
     <RowDefinition Height="2*" /> 
     <RowDefinition Height="1*" /> 
     <RowDefinition Height="7*" /> 
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="2*" /> 
     <ColumnDefinition Width="4*" /> 
    </Grid.ColumnDefinitions> 
    <Label >Row 0 Column 0</Label> 
    <Label Grid.Row="1" Grid.RowSpan="2">Row 1 Column 0</Label> 
    <Label Grid.Row="3">Row 2 Column 0</Label> 
    <Label Grid.Column="1">Row 0 Column 1</Label> 
    <Label Grid.Column="1" Grid.Row="1">Row 1 Column 1</Label> 
    <Label Grid.Column="1" Grid.Row="2">Row 2 Column 1</Label> 
    <Label Grid.Column="1" Grid.Row="3">Row 3 Column 1</Label> 
</Grid> 
+0

Спасибо, но не могли бы вы рассказать мне, как вставить объект в эту внутреннюю (нижнюю) ячейку. Это самая маленькая ячейка. Давайте скажем 'Button'? Потому что это координаты как '1.1x1.0', но я уверен, что это не то, как я должен ссылаться на него. –

+0

замените '....' в ответе на вашу кнопку 'Button', вы также можете указать, в какой строке внутренней сетки вы хотите разместить кнопку. – har07

+0

Он мог бы сделать это с помощью одной сетки, добавив еще одну строку и создав содержимое Row1 Column0 Grid.RowSpan = "2" в случае, если нужна одна сетка. Как примечание. –

0

Вы можете сделать это следующим образом:

<Grid>   
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="2*" /> 
     <ColumnDefinition Width="4*" /> 
    </Grid.ColumnDefinitions> 

    <Grid Grid.Column="0"> 
     <Grid.RowDefinitions> 
     <RowDefinition Height="50"> 
     <RowDefinition Height="70"> 
     <RowDefinition Height="300"> 
     </Grid.RowDefinitions> 
    </Grid> 
    <Grid Grid.Column="1"> 
     <Grid.RowDefinitions> 
     <RowDefinition Height="50"> 
     <RowDefinition Height="50"> 
     <RowDefinition Height="20"> 
     <RowDefinition Height="300"> 
     </Grid.RowDefinitions> 
    </Grid> 
</Grid> 

Просто измените высоту и ширину, как вы хотите.

Смежные вопросы