ScrollViewer не показывает прокрутку далеко без фиксированной высоты - PullRequest
0 голосов
/ 01 сентября 2018

У меня ниже XAML. Проблема, которую я не могу решить, заключается в том, что у меня есть средство просмотра с прокруткой, которое охватывает сетку, полную представлений (с фиксированной высотой), но не может заставить полосы прокрутки прокручивать содержимое длиннее, чем размер окна.

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

Я посмотрел другие примеры на сайте, но не смог найти правильный ответ (включая эту ссылку ).

XAML:

<UserControl d:DesignWidth="300" d:DataContext="{d:DesignInstance ViewModels:EntityViewModel}">
    <StackPanel>
        <Label Content=“text” />
        <ScrollViewer Height="450" Width="250" VerticalScrollBarVisibility="auto">
            <Grid>
                <ItemsControl ItemsSource="{Binding Entities}">
                    <ItemsControl.ItemTemplate>
                        <DataTemplate>
                            <local:EntityView DataContext="{Binding}" />
                        </DataTemplate>
                    </ItemsControl.ItemTemplate>
                </ItemsControl>
            </Grid>
        </ScrollViewer>
    </StackPanel>
</UserControl>

Edit:
Я добавляю дополнительный пример, который можно легко воссоздать. Нужно иметь возможность иметь прокручиваемый вид прокрутки с помощью панели док-станции (может быть сеткой), которая имеет больше содержимого, чем может поместиться на экране, на котором вставлен пользовательский элемент управления (что означает, что я не могу иметь фиксированный Размер на просмотрщик прокрутки).

<Window Title="MainWindow" Height="200" Width="300">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="200" />
        </Grid.ColumnDefinitions>


        <StackPanel Grid.Column="0">
            <Label Content="title"/>
            <ScrollViewer>
                <DockPanel>
                    <Label DockPanel.Dock="Top" Content="title" HorizontalContentAlignment="Center" />
                    <Label DockPanel.Dock="Top" Content="title" HorizontalContentAlignment="Center" />
                    <Label DockPanel.Dock="Top" Content="title" HorizontalContentAlignment="Center" />
                    <Label DockPanel.Dock="Top" Content="title" HorizontalContentAlignment="Center" />
                    <Label DockPanel.Dock="Top" Content="title" HorizontalContentAlignment="Center" />
                    <Label DockPanel.Dock="Top" Content="title" HorizontalContentAlignment="Center" />
                    <Label DockPanel.Dock="Top" Content="title" HorizontalContentAlignment="Center" />
                </DockPanel>
            </ScrollViewer>
        </StackPanel>
    </Grid>
</Window>

Ответы [ 2 ]

0 голосов
/ 02 сентября 2018

StackPanel с вертикальной ориентацией не ограничивает высоту своих дочерних элементов. Другими словами, Scrollviewer всегда будет настолько высоким, насколько это необходимо для отображения всего его содержимого, если вы явно не установите его высоту.

Вам придется выбрать другую панель, например, сетка или док-панель:

<UserControl ...>
    <DockPanel>
        <Label DockPanel.Dock="Top" Content="text"/>
        <ScrollViewer VerticalScrollBarVisibility="Auto">
            <ItemsControl ItemsSource="{Binding Entities}">
                ...
            </ItemsControl>
        </ScrollViewer>
    </DockPanel>
</UserControl>
0 голосов
/ 01 сентября 2018

Попробуйте установить ScrollViewer на StackPanel

<ScrollViewer Height="450" Width="250" VerticalScrollBarVisibility="auto">
    <StackPanel>
        <Grid>
            <ItemsControl ItemsSource="{Binding Entities}">
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <local:EntityView DataContext="{Binding}" />
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ItemsControl>
        </Grid>
    </StackPanel>
</ScrollViewer>
...