Фактическая высота Scrollviewer превышает разрешение экрана

#c# #.net #wpf #scrollviewer #actualheight

#c# #.net #wpf #scrollviewer #фактическая высота

Вопрос:

У меня есть Grid с этими настройками строк: (Я не могу опубликовать много кода, извините)

 RowDefinition Height="1*"

RowDefinition Height="120"
  

Внутри этой сетки у меня есть ScrollViewer с Height="Auto" и verticalAlignment = "Stretch" в строке 0.

В строке 2 у меня есть другая сетка с фиксированной высотой 60 пикселей.

Когда я это делаю this.UpdateLayout (внутри UserControl ), то scrollviewer.ActualHeight значение переходит к 2332, что соответствует размеру изображения внутри него и превышает разрешение экрана. Почему он не обновляется, чтобы соответствовать размеру экрана?

Спасибо.

Комментарии:

1. внутри чего находится сама сетка?

2. Установка высоты определения первой строки в «Звезду» — не имеет особого смысла, поскольку она никогда не заполнит оставшееся пространство, «Звезда» обычно используется для самой последней строки или самого последнего столбца. Обычно UpdtaeLayout не требуется — в конце концов, он работает асинхронно, поэтому в окне просмотра все равно не будут отображаться правильные цифры.

3. в сетке есть scrollviewer, сетка и другие вещи, которые не имеют значения. Я уже пробовал ставить 0.8 * и 0.2 * или что-нибудь подобное.

Ответ №1:

Если вы поместите внешний элемент Grid в f.i. a StackPanel с ориентацией по вертикали, то может не быть ограничения на высоту сетки, а затем и вертикального ограничения на ScrollViewer . Поместите Grid в DockPanel или установите (максимальную) высоту Grid . Тогда ScrollViewer высота будет ограничена.

Комментарии:

1. этот вид не решался. Но заставил меня заметить ошибку. Моим основным контейнером UserControl была stackpanel. Когда я изменил его на Grid. Это сработало! 😀 ты

Ответ №2:

Используется минимальная высота, максимальная высота

 <ScrollViewer 
            VerticalAlignment="Top"
            Grid.Column ="0"    
            MinHeight="60"
            MaxHeight="190"
            Grid.Row="0"
            />
  

затем настройте свой Scrollviewer в зависимости от разрешения экрана