Не могу создать столбцы в моей сетке WPF - PullRequest
1 голос
/ 12 ноября 2009

У меня есть этот код для моего очень очень базового проекта 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 ]

2 голосов
/ 12 ноября 2009
<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 голосов
/ 12 ноября 2009

Вы должны включить его в коллекцию ColumnDefinitions.

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

Добавление определений строк работает аналогично.

Наслаждайтесь!

0 голосов
/ 04 октября 2012

В 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, и, следовательно, ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...