Мой google и stackoverflow search-fu мне не удалось, поэтому я предлагаю сообществу этот вопрос.
(Все это сгенерировано с использованием VS2010 и .NET 4.0 в пустом решении WPF по умолчанию)
Рассмотрим следующий XAML:
<StackPanel Orientation="Horizontal">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="20"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Border Name="aborder" Grid.Column="0" Grid.ColumnSpan="2"
Background="Red" Width="200"/>
<Border Name="aborder2" Background="Green"/>
</Grid>
</StackPanel>
Что бы вы предсказывали ширину "aborder2"?
Если вы догадались "20 пикселей", вы ошибаетесь. Правильный ответ - 110 пикселей.
Рассмотрим этот XAML:
<StackPanel Orientation="Horizontal">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="20"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Border Name="aborder" Grid.Column="0" Grid.ColumnSpan="2"
Background="Red" Width="200"/>
<Border Name="aborder2" Background="Green"/>
</Grid>
</StackPanel>
Что бы вы предсказывали ширину "aborder2"?
Если вы угадали либо 20 пикселей, либо 110 пикселей, вы ошибались. Правильный ответ - 200 пикселей.
Я не могу понять это, и это сводит меня с ума. Кажется, ответ должен быть очевиден; ясно, что существует некоторое взаимодействие между столбцом сетки автозаполнения и панелью стека, которая заставляет сетку волноваться. Но это просто не имеет смысла - все правила, регулирующие такое поведение, кажутся произвольными. Почему 110 пикселей? Почему не 109 пикселей или 100 пикселей? Я бы понял, если столбец с автоматическим размером не смог полностью или что-то расширить, но чтобы столбец фиксированной ширины беспорядочно игнорировал его ширину, я оставил обожженную оболочку разработчика.
Любые помощь или направляющие огни будут высоко оценены!