Проблема со ScrollViewer в WPF - PullRequest
2 голосов
/ 15 ноября 2011

Я работаю над приложением WPF и использую scrollViewer для просмотра содержимого, которое находится за пределами области экрана. Работает нормально, без проблем.

Но если мое окно содержит Listbox или Grid или что-то в этом роде и этот элемент управления имеет много записей, то вместо добавления полосы прокрутки к себе, он просто увеличивает высоту элемента управления и самого окна, потому что scrollviewer считает, что его необходимо расширить.

Я не хочу жестко задавать высоту списка, потому что это делает его одинаковым в разных разрешениях, я хочу, чтобы он увеличивал высоту, но не всегда, как это делает scrollviewer.

Спасибо

Ответы [ 2 ]

5 голосов
/ 15 ноября 2011

Нельзя включать объект переменной высоты / ширины в ScrollViewer без установки высоты / ширины средства просмотра.

Средство просмотра с прокруткой эффективно имеет бесконечную высоту, поэтому сетка расширяется, чтобы заполнить "доступное пространство - отсюда и эффект, который вы видите.Как говорит @JoeWhite в своих комментариях, ScrollViewer - это контейнер, который может быть настолько высоким, насколько это необходимо для хранения всего его содержимого.Привязка не помогла бы - по сути, ваш ListBox уже привязан, он просто привязан к чему-то, что говорит: «О, я буду такого размера, какой вам нужен».

Вам понадобитсячтобы либо ограничить высоту, переместите ListBox за пределы ScrollViewer или используйте что-то отличное от ScrollViewer.

Снова цитируя @Joe "Это опасность помещения области прокрутки в другую область прокрутки- это плохое удобство использования и трудно определить поведение. "

1 голос
/ 16 мая 2013

Вы можете обернуть ScrollViewer в Grid и привязать свойства ширины и высоты scrollViewer к сеткам ActualWidth и ActualHeight.Таким образом, просмотрщик прокрутки будет иметь фиксированный размер, равный размеру сетки, который будет изменяться при изменении размера окна.

Пример:

<Grid x:Name="LayoutRoot" Background="White">
    <Grid Background="#FFF1F1F1" Height="49" VerticalAlignment="Top">
        <Button Content="Обзор" Margin="0,13,175.25,0" VerticalAlignment="Top" FontSize="14.667" HorizontalAlignment="Right" Width="95.147">
        </Button>
        <Label Content="{Binding DocPath, Converter={StaticResource FileNameConverter}, FallbackValue=Выберите файл, TargetNullValue=Выберите файл}" HorizontalAlignment="Left" VerticalAlignment="Top" Width="342.603" Margin="10,10,0,0" Height="33"/>
        <Button Content="Загрузить данные" HorizontalAlignment="Right" Margin="0,13,10,0" VerticalAlignment="Top" Width="151.147" FontSize="14.667">
        </Button>
    </Grid>
    <Grid x:Name="scrollBorder" Margin="10,54,10,10">
        <ScrollViewer x:Name="LogScroller" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" 
                        HorizontalAlignment="Left" VerticalAlignment="Top" 
                        Height="{Binding ActualHeight, ElementName=scrollBorder}" Width="{Binding ActualWidth, ElementName=scrollBorder}" >
            <ItemsControl ItemsSource="{Binding Log}" />
        </ScrollViewer>
    </Grid>
</Grid>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...