Я знаю, что этот вопрос старый, но у меня была точно такая же проблема, и я решил исправить эту проблему, но это лучше, чем нерешенный вопрос.
Многое из того, что у меня естьread гласит, что использование таких вещей, как StackPanel, в этом случае является плохим, потому что панель растет в соответствии с элементами, которые она содержит.Обычно это работает нормально, потому что вы можете вставить StackPanel в сетку и установить MinHeight и MaxHeight столбца / строки и зафиксировать элементы управления на месте.Как только ScrollView добавлен, этот вид идет в ад.Ответ выше хорошо описывает проблему, но не имеет решения.
Я пробовал много разных типов панелей вместо StackPanel, но все они дают один и тот же результат.Я решил, что, так как мой ListBox находится внутри Grid, мне нужно было привязать MaxHeight этого расположения сетки к некоторому другому значению в элементе управления, чтобы ListBox не рос.Проблема в том, что нет элемента, с которым вы могли бы связать прямо и получить точную высоту, которую вы ищете.
Введите хак:
Мой рост был слишком малсоздание странного всегда закадрового ListBox (на самом деле 36 пикселей слишком велико, что было высотой надписи над ListBox).Поэтому я реализовал IValueConverter:
class HeightToAdjustedHeightConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var height = (double) value - 33d;
return height < 360d ? 360d : height;
//360 being the minimum height allowed for the listbox
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return null;
}
}
Все, что я сделал после этого, включил его в качестве конвертера для привязки в MaxHeight (обратите внимание, что вам нужно назвать свой usercontrol и связать сx: Name):
<Grid Grid.Column="0"
Grid.Row="1"
VerticalAlignment="Top"
ClipToBounds="True"
MaxHeight="{Binding ElementName=AdHocUserControl, Path=ActualHeight, Converter={StaticResource HeightToAdjustedHeightConverter}}">
Единственная другая альтернатива, о которой я могу подумать, - это расширить одну из панелей и попытаться поиграть с ее ростом.Я признаю, что это взлом, но это будет работать.