在网格中使用无行和columness子项的奇怪行为

时间:2018-01-30 05:16:41

标签: c# wpf xaml

考虑这个简单的网格:

<Grid x:Name="gridTest" ShowGridLines="True">
    <Grid.RowDefinitions>
        <RowDefinition></RowDefinition>
        <RowDefinition></RowDefinition>
        <RowDefinition></RowDefinition>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition></ColumnDefinition>
        <ColumnDefinition></ColumnDefinition>
        <ColumnDefinition></ColumnDefinition>
    </Grid.ColumnDefinitions>
</Grid>

在代码隐藏中,我添加了以下代码:

public MainWindow()
{
    InitializeComponent();

    Label labTest = new Label { Content = "Test Label" };
    gridTest.Children.Add(labTest);
}

结果是:
First Example

请注意,标签位于网格的左上角。没错,因为我没有设置Grid.Col和Grid.Row(使用Grid.SetColumn()和Grid.SetRow())

现在,检查下一个示例:

public MainWindow()
{
    InitializeComponent();

    Label labTest = new Label { Content = "Test Label", Height = 30, Width = 70 };
    gridTest.Children.Add(labTest);
}

我只是为标签添加了高度和宽度。但结果是: Second Example

现在,标签就像集中在网格的第一个单元格中,尽管我没有为标签指定网格行或列! 我的问题:

  1. 为什么会这样?是“按设计”还是它的错误?
  2. 我可以对第二个示例中的标签做什么,就像在第一个示例中一样,即在添加到grid.Children集合时出现在网格的最顶部和最左边(0,0)位置

1 个答案:

答案 0 :(得分:4)

  1. 它的设计理念。事实上,标签总是集中在网格的第一个单元格中。您只是在没有给出维度的情况下看不到它,因为默认情况下它会填满整个单元格,但其内容始终保持左对齐。

  2. 使用VerticalAlignment和Horizo​​ntalAlignment属性对齐标签本身:

    Label labTest = new Label
    {
        Content = "Test Label",
        Height = 30,
        Width = 70,
        VerticalAlignment = VerticalAlignment.Top,
        HorizontalAlignment = HorizontalAlignment.Left
    };
    gridTest.Children.Add(labTest);