无法在我的WPF网格中创建列

时间:2009-11-12 00:38:22

标签: c# wpf grid

我的代码非常适用于非常基本的WPF项目。

<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">   

<Grid ShowGridLines="True">
    <ColumnDefinition x:Name="LeftColumn"></ColumnDefinition>
</Grid>

但是,列定义行给出了一个错误:

  

错误1无法将类型为“ColumnDefinition”的实例添加到“UIElementCollection”类型的集合中。只允许使用'UIElement'类型的项目。

3 个答案:

答案 0 :(得分:2)

你必须将它包含在ColumnDefinitions集合中。

<Grid Height="27">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
</Grid>

添加行定义的方式相同。

享受!

答案 1 :(得分:2)

<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Grid ShowGridLines="True">
    <Grid.ColumnDefinitions>
    <ColumnDefinition x:Name="LeftColumn"></ColumnDefinition>
    </Grid.ColumnDefinitions>
</Grid>

我认为这就是你要找的东西。

答案 2 :(得分:0)

在XAML中,这种表示法:

<Container>
    <ContentItem />
</Container>

这是简写:

<Container>
    <Container.Children>
        <ContentItem />
    </Container.Children>
</Container>

错误是网格将为子项获取UIElement项,而不是ColumnDefinition项。这是因为正在使用的简写符号中隐含<Container.Children>

正如其他答案所述,ColumnDefinition项目必须是<Grid.ColumnDefinitions>的子项才能使XAML有效。但是,如果标记是这样的话,最好知道:

<Grid>
    <ColumnDefinition />
    <Grid.Children>
        ...
    </Grid.Children>
</Grid>

然后你还会有一个属性'Children'被设置多次构建错误,因为它的XAML语法使得<Container.Children>隐含在简写符号中。这就是<ColumnDefinition>项需要显式包含在<Grid.ColumnDefinitions>集合中的原因,否则编译器会尝试在隐含的<ColumnDefinition>标记下使用<Grid.Children>,该标记需要从UIElement派生的项目,因此错误。