2008-11-10 1 views
1

я помещаю следующие утверждения во втором ряду моей сетки в XAML:Вертикальная полоса прокрутки не отображается, когда GridView пунктов превышают высоту дисплея

<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. Что я сделал не так? Ваш вклад очень ценится. Спасибо.

ответ

3

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

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

НТН

+0

спасибо Артуру. Ваше подозрение было исправлено. Теперь мне нужно работать. – 2008-11-11 06:00:54

+0

Что делать, если я не знаю высоту окна/контейнера во время разработки? Мое окно можно максимизировать и изменить размер, например, как я могу применить ваше решение, даже не зная динамической высоты моего окна/контейнера во время выполнения? – 2017-01-06 13:42:43

6

Это работает для меня:

<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 как и в случае необходимости. Зачем вам нужно обернуть его другим?

0

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

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

Не нужно указывать ширину и высоту списка.

0
<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> 
1

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

ListView listView = new ListView(); 
listView.SetValue(Grid.RowProperty, 1); 
listView.SetValue(Grid.ColumnProperty, 1); 
MainGrid.Children.Add(listView); 
Смежные вопросы