Вертикальная полоса прокрутки не появляется, когда элементы gridview превышают высоту отображения

Я помещаю следующие операторы во вторую строку моей сетки в xaml:

<ScrollViewer VerticalScrollBarVisibility = "Auto" Grid.Row = "1">
     <ListView Name = "listView" Margin = "5" Grid.Row = "1">

                <ListView.View>
                    <GridView AllowsColumnReorder = "True">
                        <GridViewColumn DisplayMemberBinding = "{Binding Path=DateTime}" Header = "Date Time" Width = "140"/>
                        <GridViewColumn DisplayMemberBinding = "{Binding Path=Vehicle}" Header = "Vehicle" Width = "130"/>
                        <GridViewColumn DisplayMemberBinding = "{Binding Path=AlarmType}" Header = "Alarm Type" Width = "100"/>
                        <GridViewColumn DisplayMemberBinding = "{Binding Path=Direction}" Header = "Direction" Width = "100"/>
                        <GridViewColumn DisplayMemberBinding = "{Binding Path=Speed}" Header = "Speed" Width = "100"/>
                        <GridViewColumn DisplayMemberBinding = "{Binding Path=Alarmed}" Header = "Alarmed" Width = "100"/>
                        <GridViewColumn DisplayMemberBinding = "{Binding Path=LoadType}" Header = "Load Type" Width = "100"/>
                        <GridViewColumn DisplayMemberBinding = "{Binding Path=Status}" Header = "Status" Width = "110"/>
                    </GridView>
                </ListView.View>
            </ListView>     
        </ScrollViewer>
 </Grid>

Я связал listView.ItemSource с ObservableCollection, определенным в коде, для заполнения данных в списке. Когда количество элементов, добавленных в GridView, превышало высоту представления списка, вертикальная полоса прокрутки не отображалась, как указано в XAML. Что я сделал не так? Ваш вклад очень признателен. Спасибо.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
27 504
6

Ответы 6

Убедитесь, что поля и отступы правильные. Полоса прокрутки может быть за чем-то.

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

HTH

Спасибо, Артур. Ваше подозрение было исправлено. Теперь у меня все заработало.

Kevin Dente 11.11.2008 09:00

Что мне делать, если я не знаю высоту окна / контейнера во время разработки? Например, мое окно можно развернуть и изменить размер, так как я могу применить ваше решение, даже не зная динамическую высоту, которую мое окно / контейнер будет иметь во время выполнения?

Ulysses Alves 06.01.2017 16:42

Меня устраивает:

<Window x:Class = "WpfApplication1.Window1"
    xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
    Title = "Window1" Height = "300" Width = "300">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height = "*"/>
            <RowDefinition Height = "*"/>
        </Grid.RowDefinitions>

        <ScrollViewer VerticalScrollBarVisibility = "Auto" Grid.Row = "1">
            <ListView Name = "listView" Margin = "5" Grid.Row = "1">

                <ListView.View>
                    <GridView AllowsColumnReorder = "True">
                        <GridViewColumn DisplayMemberBinding = "{Binding Path=.}" Header = "Whatever" Width = "140"/>
                    </GridView>
                </ListView.View>
            </ListView>
        </ScrollViewer>
    </Grid>
</Window>

Однако шаблон управления ListView уже содержит ScrollViewer, так что ScrollViewer будет отображаться как внутри как ListView по мере необходимости. Зачем нужно заворачивать в другую?

Спасибо, Кент, я удалил один неиспользуемый столбец в моем списке и показанную полосу прокрутки (без второго средства просмотра прокрутки).

Kevin Dente 11.11.2008 08:59

Нет необходимости использовать ScrollViewer. Просто удалите ScrollViewer, используйте только ListView и попробуйте.

ListView listView = new ListView();
listView.SetValue(Grid.RowProperty, 1);
listView.SetValue(Grid.ColumnProperty, 1);
MainGrid.Children.Add(listView);

Нет необходимости указывать ширину и высоту для списка.

<Grid x:Name = "MainMenuButtonGrid">
  <StackPanel Margin = "50,0,0,0">
    <TextBlock Text = "Please select any employee" Foreground = "Wheat"/>
    <ListView x:Name = "listEmployeeDetail" SelectedValuePath = "EmployeeID">
      <ListView.View>
        <GridView>
          <GridViewColumn Header = "EmployeeName" Width = "100" DisplayMemberBinding = "{Binding EmployeeName}"></GridViewColumn>
        </GridView>
      </ListView.View>
    </ListView>
  </StackPanel>
</Grid>

Попробуйте этот код:

ListView listView = new ListView();
listView.SetValue(Grid.RowProperty, 1);
listView.SetValue(Grid.ColumnProperty, 1);
MainGrid.Children.Add(listView);

Вы можете просто использовать свойство MaxHeight, чтобы ограничить представление списка определенной высотой, и полоса прокрутки появится автоматически. Например :

 <ListView Name = "listView" Margin = "5" Grid.Row = "1" MaxHeight = "300">
            <ListView.View>
                <GridView AllowsColumnReorder = "True">
                    <GridViewColumn DisplayMemberBinding = "{Binding Path=DateTime}" Header = "Date Time" Width = "140"/>
                    <GridViewColumn DisplayMemberBinding = "{Binding Path=Vehicle}" Header = "Vehicle" Width = "130"/>
                    <GridViewColumn DisplayMemberBinding = "{Binding Path=AlarmType}" Header = "Alarm Type" Width = "100"/>
                    <GridViewColumn DisplayMemberBinding = "{Binding Path=Direction}" Header = "Direction" Width = "100"/>
                    <GridViewColumn DisplayMemberBinding = "{Binding Path=Speed}" Header = "Speed" Width = "100"/>
                    <GridViewColumn DisplayMemberBinding = "{Binding Path=Alarmed}" Header = "Alarmed" Width = "100"/>
                    <GridViewColumn DisplayMemberBinding = "{Binding Path=LoadType}" Header = "Load Type" Width = "100"/>
                    <GridViewColumn DisplayMemberBinding = "{Binding Path=Status}" Header = "Status" Width = "110"/>
                </GridView>
            </ListView.View>
        </ListView>   

Другие вопросы по теме