Сетка внутри Сетка в XAML - PullRequest
12 голосов
/ 06 июля 2010

Я хочу иметь childGrid во втором столбце parentGrid (в childGrid я хочу иметь два столбца: первый для метки, второй для текстового поля)

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

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Height="*"/>
        <ColumnDefinition Height="*"/>
        <RowDefinition Height="*"/>
        <RowDefinition Height="*"/>
    </Grid.ColumnDefinitions>
    <Grid Grid.Column=1>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Height="*"/>
            <ColumnDefinition Height="*"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="*"/>
            <RowDefinition Height="*"/>
            <RowDefinition Height="*"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
    </Grid>
</Grid>

Ответы [ 3 ]

22 голосов
/ 06 июля 2010

Основываясь на вашем коде, просто исправьте немного:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition />
        <ColumnDefinition  />
    </Grid.ColumnDefinitions>
    <Grid Grid.Column="1">
        <Grid.ColumnDefinitions>
            <ColumnDefinition />
            <ColumnDefinition />
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="*"/>
            <RowDefinition Height="*"/>
            <RowDefinition Height="*"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
    </Grid>
</Grid>

Обратите внимание, что ColumnDefinition не имеют Высота - у них есть Ширина .Вам также нужно определить ColumnDefinitions и RowDefinitions отдельно - они смешаны вместе во внешней сетке.Я удалил RowDefinitions из внешней сетки, потому что вы, кажется, не используете их.Ваша внутренняя сетка состоит из двух столбцов и четырех строк.

7 голосов
/ 06 июля 2010

Вы можете найти это полезным.Попробуйте вставить это на страницу с помощью Kaxaml и поиграть с различными параметрами объектов во внешней сетке.Я считаю, что использование Kaxaml для создания прототипов и экспериментов с макетами XAML совершенно необходимо.

<Grid>  
  <Grid.ColumnDefinitions>
    <ColumnDefinition Width="Auto"/>
    <ColumnDefinition Width="Auto"/>
  </Grid.ColumnDefinitions>
  <Grid.RowDefinitions>
    <RowDefinition/>
    <RowDefinition/>
    <RowDefinition/>
  </Grid.RowDefinitions>

  <!-- 
     When I'm composing grids in XAML, I group things together by type, not by where
     they live in the grid.  This turns out to make a lot of maintenance tasks
     easier.

     Also, since Grid.Row and Grid.Column default to 0, a lot of people (and tools)
     omit them if that's their value.  Not me.  It lets me quickly check to make
     sure that content is where I think it is, just by looking at how it's organized
     in the XAML.
  -->

  <TextBlock Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" Background="Lavender" Padding="10" HorizontalAlignment="Stretch">Here's the first row of the outer grid.</TextBlock>
  <TextBlock Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="2" Background="Lavender" Padding="10" HorizontalAlignment="Stretch">Here's the third row of the outer grid.</TextBlock>

  <TextBlock Grid.Row="1" Grid.Column="0" Background="AliceBlue" Padding="10">Here's the first column of the second row.</TextBlock>

  <Grid Grid.Row="1" Grid.Column="1">
    <Grid.ColumnDefinitions>
      <!--
         This part's pretty important.  Setting up the SharedSizeGroups for these
         two columns keeps the labels and text boxes neatly arranged irrespective of
         their length.
      -->
      <ColumnDefinition SharedSizeGroup="Label"/>
      <ColumnDefinition SharedSizeGroup="TextBox"/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
      <RowDefinition/>
      <RowDefinition/>
      <RowDefinition/>
    </Grid.RowDefinitions>

    <Label Grid.Row="0" Grid.Column="0">First label</Label>
    <Label Grid.Row="1" Grid.Column="0">Second label</Label>
    <Label Grid.Row="2" Grid.Column="0">Third label, containing unusually long content</Label>

    <TextBox Grid.Row="0" Grid.Column="1">First text box, containing unusually long content</TextBox>
    <TextBox Grid.Row="1" Grid.Column="1">Second text box</TextBox>
    <TextBox Grid.Row="2" Grid.Column="1">Third text box</TextBox>

  </Grid>

</Grid>
1 голос
/ 06 июля 2010

Фенево, в этом году я много занимался дизайном пользовательского интерфейса XAML.Попробуйте, вы можете легко перенести код в Window или UserControl.Я выделил цвета сетками и панелями, чтобы вы могли подтвердить их расположение в режиме реального времени - выбросьте параметры фона, когда будете довольны.

<UserControl
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    x:Class="UatControlLibrary.sampleChilGrid"
    x:Name="UserControl"
    MinWidth="400"
    MinHeight="300"
    Width="auto"
    Height="auto">
    <Grid
        x:Name="LayoutRoot">
        <Grid
            x:Name="parentGrid"
            Width="auto"
            Height="auto"
            Background="Red">
            <Grid.ColumnDefinitions>
                <ColumnDefinition
                    Width="1*" />
                <ColumnDefinition
                    Width="1*" />
            </Grid.ColumnDefinitions>
            <Grid
                x:Name="chilGrid"
                Width="auto"
                Height="auto"
                Background="Black"
                Grid.Column="1"
                Grid.Row="0">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition
                        Width="1*" />
                    <ColumnDefinition
                        Width="1*" />
                </Grid.ColumnDefinitions>
                <StackPanel
                    x:Name="stkpnlLabels"
                    Background="White"
                    Grid.Column="0"
                    Grid.Row="0" />
                <StackPanel
                    x:Name="stkpnlTextboxes"
                    Background="Blue"
                    Grid.Column="1"
                    Grid.Row="0" />
            </Grid>
        </Grid>
    </Grid>
</UserControl>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...