WPF中的DataGrid控件,如果放在<StackPanel></StackPanel>面板中,VerticalScrollBarVisibility=“Visible”或VerticalScrollBarVisibility=“Auto”是失效的。如下所示:
<materialDesign:Card Grid.Column="2" Margin="5">
<StackPanel Orientation="Vertical"> <!--StackPanel标签>
<DataGrid AutoGenerateColumns="False"
ItemsSource="{Binding VMs}"
DataContext="{Binding DataVM}"
VerticalScrollBarVisibility="Visible">
<DataGrid.ColumnHeaderStyle>
<Style TargetType="DataGridColumnHeader">
<Setter Property="HorizontalContentAlignment" Value="Center"/>
</Style>
</DataGrid.ColumnHeaderStyle>
<DataGrid.Columns>
<DataGridTemplateColumn Width="50" Header="评定">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<RadioButton IsChecked="{Binding IsChecked,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Width="60" Header="标度" Binding="{Binding Index,Mode=OneWay}">
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
</StackPanel>
</materialDesign:Card>
然后当我删除StackPanel标签后,就显示正常了。
<materialDesign:Card Grid.Column="2" Margin="5">
<!--删除StackPanel>
<DataGrid AutoGenerateColumns="False"
ItemsSource="{Binding VMs}"
DataContext="{Binding DataVM}"
VerticalScrollBarVisibility="Visible">
<DataGrid.ColumnHeaderStyle>
<Style TargetType="DataGridColumnHeader">
<Setter Property="HorizontalContentAlignment" Value="Center"/>
</Style>
</DataGrid.ColumnHeaderStyle>
<DataGrid.Columns>
<DataGridTemplateColumn Width="50" Header="评定">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<RadioButton IsChecked="{Binding IsChecked,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Width="60" Header="标度" Binding="{Binding Index,Mode=OneWay}">
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
</materialDesign:Card>
补充:当然,理论上讲,把一个DataGrid放在一个StackPanel确实没有意义,不应该怎么放,当有时会不注意放进去的,或者在StackPanel中还有其它元素且当其它元素被删除后就会出现这种情况。但是,当一个StackPanel中除了放一个DataGrid还方其它元素时,会出现同样的现场,因此要当心。
关于上面这种情况的进一步解释,可以参考我的另一篇文章:
WPF中StackPanel的尺寸的怪癖