datagrid中的ScrollViewer不能用作属性

时间:2014-12-29 17:33:12

标签: wpf datagrid

我想添加一个简单的垂直滚动条但不知何故,下面的前两个选项不起作用,只有第三个工作。我想知道有什么不同。

option1 :(作为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>   

当我将所有内容添加到一起时,您可以分别看到它从内部到外部的样子。(第三个工作的是外部的,最右边的)

enter image description here

1 个答案:

答案 0 :(得分:1)

您需要提高Grid个高度,或将StackPanel更改为限制其子级大小的内容,例如DockPanel或{{1 }}。

Grid

或者

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

默认情况下,<Grid> <DataGrid x:Name="dg" ... /> </Grid> 允许其子项占用所需的空间,从而允许Grid允许尽可能多的垂直空间并以全高渲染。通过给它StackPanel,你可以限制它占用的空间,这将使它显示ScrollBar。

第二个代码块会出现同样的问题,但是如果可能的话,我建议不要将Height包装在DataGrid中,因为它会取消DataGrid虚拟化,这可能会导致加载时间过长和/或许多记录表现不佳。