Я помещаю следующие операторы во вторую строку моей сетки в 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. Что я сделал не так? Ваш вклад очень признателен. Спасибо.





Убедитесь, что поля и отступы правильные. Полоса прокрутки может быть за чем-то.
Поместите высоту внешнего контейнера с фиксированным значением. Это может быть растяжение для представления списка, чтобы он никогда не отображал полосу прокрутки.
HTH
Что мне делать, если я не знаю высоту окна / контейнера во время разработки? Например, мое окно можно развернуть и изменить размер, так как я могу применить ваше решение, даже не зная динамическую высоту, которую мое окно / контейнер будет иметь во время выполнения?
Меня устраивает:
<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 по мере необходимости. Зачем нужно заворачивать в другую?
Спасибо, Кент, я удалил один неиспользуемый столбец в моем списке и показанную полосу прокрутки (без второго средства просмотра прокрутки).
Нет необходимости использовать 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>
Спасибо, Артур. Ваше подозрение было исправлено. Теперь у меня все заработало.