Почему WPF Grid не разделяет пространство одинаково, когда средний столбец имеет MinWidth? - PullRequest
10 голосов
/ 15 сентября 2010

В этом примере первый столбец получает 100, а следующие 2 столбца получают по 50, что является ожидаемым поведением.

<Grid Width="200" Height="200">
    <Grid.ColumnDefinitions>
        <ColumnDefinition MinWidth="100" />
        <ColumnDefinition />
        <ColumnDefinition />
    </Grid.ColumnDefinitions>
    <Border Background="Red" Grid.Column="0" />
    <Border Background="Yellow" Grid.Column="1" />
    <Border Background="Blue" Grid.Column="2" />
</Grid>

alt text

Если переместить MinWidth всредний столбец ...

<Grid Width="200" Height="200">
    <Grid.ColumnDefinitions>
        <ColumnDefinition />
        <ColumnDefinition MinWidth="100" />
        <ColumnDefinition />
    </Grid.ColumnDefinitions>
    <Border Background="Red" Grid.Column="0" />
    <Border Background="Yellow" Grid.Column="1" />
    <Border Background="Blue" Grid.Column="2" />
</Grid>

... тогда первый столбец получает 33,3, а последний столбец 66,6, что кажется странным.Не уверен, почему это должно изменить поведение сетки.Я ожидаю, что столбцы 0 и 2 получат по 50.

alt text

Обновление: я понимаю, почему это происходит, но мне было интересно, если кто-то считает это ошибкой (особенно еслив Silverlight отличается)

Ответы [ 4 ]

3 голосов
/ 21 октября 2011

Эта проблема возникает, только если у вас есть центральный столбец, что означает, что у вас есть нечетное количество столбцов, определенных для вашей сетки.Я не уверен, почему это происходит, и при этом я не думаю, что это преднамеренное поведение.Но другой обходной путь - всегда обеспечивать, чтобы у вас было определено четное количество столбцов, даже если вы используете только нечетное число из них (скрывая дополнительный столбец, используя MaxWidth = 0).

    <Grid Width="200" Height="200">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="*" MinWidth="100"/>
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="*" MaxWidth="0"/> <!--Workaround-->
        </Grid.ColumnDefinitions>

        <Border Grid.Column="0" Background="Red"/>
        <Border Grid.Column="1" Background="Yellow"/>
        <Border Grid.Column="2" Background="Blue"/>
    </Grid>

Недостатком здесь являетсяу вас есть пустой столбец в вашей сетке.Преимущество в том, что вы получаете ожидаемое распределение пространства.

1 голос
/ 27 сентября 2011

Просто обновление .. Я попробовал фрагмент XAML с комбинацией .NET 3.5 / 4.0 Silverlight 3/4 и все еще не смог получить равную ширину для второго примера ...

Этот XAML был единственным способом обойти эту проблему:

<Grid Width="200" Height="200">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width=".5*" />
            <ColumnDefinition MinWidth="100" />
            <ColumnDefinition Width=".5*" />
        </Grid.ColumnDefinitions>
        <Border Background="Red" Grid.Column="0" />
        <Border Background="Yellow" Grid.Column="1" />
        <Border Background="Blue" Grid.Column="2" />
    </Grid>

Любое обновление на вашей стороне, ребята?

0 голосов
/ 12 октября 2011

Если вы хотите равную ширину, вы не можете использовать Авто.Вы должны явно установить ширину каждого столбца в желаемой пропорции, для 3 столбцов вы хотите ".3 *" для каждого.MinWidth имеет приоритет, если вычисленная ширина становится меньше, чем MinWidth.

0 голосов
/ 02 октября 2011

точно не знаю, в чем проблема, но эти две сетки ведут себя так, как вы хотите.Мне нравится второй больше, чем первый, поскольку он явно указывает, что первый и третий столбцы должны занимать оставшееся пространство одинаково

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