2014-12-29 3 views
0

Я хочу добавить простую вертикальную полосу прокрутки, но как-то сначала два варианта ниже не работают, работает только третий. Я хочу знать, в чем отличия.ScrollViewer в datagrid не работает как атрибут

опция1: (как атрибут DataGrid)

<StackPanel>  
     <Grid> 
     <DataGrid DataContext="{StaticResource Viewobj}" ScrollViewer.VerticalScrollBarVisibility="Visible" AutoGenerateColumns="True" HorizontalAlignment="Stretch" VerticalAlignment="Top" x:Name="dg" ItemsSource="{Binding myDatasource}" BorderThickness="2"/> 
    </Grid>     

Вариант2: обтекание Сетка

 <StackPanel> 
    <ScrollViewer>  
      <Grid> 
      <DataGrid DataContext="{StaticResource Viewobj}" AutoGenerateColumns="True" HorizontalAlignment="Stretch" VerticalAlignment="Top" x:Name="dg" ItemsSource="{Binding myDatasource}" BorderThickness="2"/> 
     </Grid> 
    </ScrollViewer>     
    </StackPanel > 

вариант 3: обтекание StackPanel

<ScrollViewer> 
<StackPanel> 
      <Grid> 
      <DataGrid DataContext="{StaticResource Viewobj}" ScrollViewer.VerticalScrollBarVisibility="Visible" AutoGenerateColumns="True" HorizontalAlignment="Stretch" VerticalAlignment="Top" x:Name="dg" ItemsSource="{Binding myDatasource}" BorderThickness="2"/> 
     </Grid>    
    </StackPanel > 
    </ScrollViewer> 

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

enter image description here

ответ

1

Вы должны дать свой Grid высоту или измените свой StackPanel на то, что ограничивает размер его детей, например DockPanel или Grid.

<DataGrid x:Name="dg" Height="400" /> 

Или

<Grid> 
    <DataGrid x:Name="dg" ... /> 
</Grid> 

По умолчанию StackPanel позволяет своим детям занять столько места, сколько им нужно, в результате чего в сетке разрешают как много вертикального пространства, как он хочет и делает на полную высота. Давая ему Height, вы ограничиваете пространство, которое ему разрешено заняться, что заставит его показать ScrollBar.

Та же проблема возникает с вашим вторым блоком кода, однако я бы не рекомендовал оборачивать ваши DataGrid в ScrollViewer, если это возможно, потому что это приведет к отмене DataGrid виртуализации, что может привести к увеличению времени загрузки и/или плохой производительности для много записей.

Смежные вопросы