Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf XAML中网格内部的网格_Wpf_Xaml - Fatal编程技术网

Wpf XAML中网格内部的网格

Wpf XAML中网格内部的网格,wpf,xaml,Wpf,Xaml,我希望在parentGrid的第二列中有一个childGrid(在childGrid中,我希望有两列:第一列为label,第二列为textbox) 我怎么能做那样的事?我尝试了以下代码: <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Height="*"/> <ColumnDefinition Height="*"/> <RowDef

我希望在parentGrid的第二列中有一个childGrid(在childGrid中,我希望有两列:第一列为label,第二列为textbox)

我怎么能做那样的事?我尝试了以下代码:

<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>

根据您的代码,只需修改一点:

<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,在外部网格中将它们混合在一起。我从外部网格中删除了行定义,因为您似乎没有使用它们。您的内部网格有两列四行。

Phenevo,今年我做了大量XAML UI设计。尝试一下,您可以轻松地将代码迁移到窗口或用户控件。我对网格和面板进行了颜色编码,这样你就可以实时确认它们的布局——当你满意的时候,把背景参数吹走

<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>

您可能会发现这很有用。尝试使用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>

这是外部网格的第一行。
这是外部网格的第三排。
这是第二行的第一列。
第一标签
第二标签
第三个标签,包含异常长的内容
第一个文本框,包含异常长的内容
第二个文本框
第三个文本框

如何在子网格中放置控件可能会有点混乱。这里有一个例子

我们有3*3单元网格。然后将中心单元格进一步划分为3行,每行有一个按钮

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="*"/>
        <RowDefinition Height="*"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <Grid Grid.Row="1" Grid.Column="1">
        <Grid.RowDefinitions>
            <RowDefinition Height="*"/>
            <RowDefinition Height="*"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
            <Button Grid.Row="0" Content="Button1"/>
            <Button Grid.Row="1" Content="Button2"/>
            <Button Grid.Row="2" Content="Button3"/>
    </Grid>
</Grid>

结果:


如何将控件放置在内部网格中?@genera4或使用控件上的
网格.Row
网格.Column
附加属性。由于这是一个注释,我必须简短,但它看起来是这样的:
一些测试
当然,您会在其中有一些行/列定义,为了简洁起见,我将它们保留为空。请记住,行/列计数是基于零的。确定。知道了。Grid.Row=“1”和Grid.Column=“2”总是引用最内部的网格。代码如何知道您引用的是哪个网格控件的行和列?这似乎不是一个明确的答案。可以在每个网格上的不同位置显示两个控件吗?@omJohn8372行/列位置位于控件(或网格)所属网格的上下文中。因此,可以在上面所示的两个网格中分别显示更多控件/网格。