WPF中的DataGrid控件的VerticalScrollBarVisibility属性失效

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的尺寸的怪癖

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WPF自定义DataGrid控件是通过继承现有的DataGrid类,并在其基础上进行修改和扩展来实现的。 自定义DataGrid控件的步骤如下: 1. 创建一个自定义的类,继承自DataGrid。例如,可以命名为CustomDataGrid。 2. 在CustomDataGrid,可以添加额外的属性、依赖属性或附加属性,用于自定义DataGrid控件的特定行为或外观。 3. 重写或扩展DataGrid的现有方法、事件和样式,以满足自定义需求。例如,可以重写OnApplyTemplate()方法以应用自定义样式。 4. 根据需要,可以添加新的功能或控件,例如自定义列、单元格、行、排序、筛选、分页等等。 5. 在CustomDataGrid,可以通过编写自定义的模板(Template)来修改DataGrid的外观。例如,可以通过修改DataGrid的ControlTemplate来改变整个DataGrid的显示风格。 6. 编写完自定义类后,可以在XAML使用自定义DataGrid控件,通过添加命名空间引用并将CustomDataGrid作为一个控件使用。可以设置自定义属性、事件和样式,达到期望的效果。 通过自定义DataGrid控件,可以根据实际需求对其进行扩展和修改,以满足特定的业务需求。由于WPF提供了强大的样式、模板和继承机制,因此可以轻松地自定义DataGrid控件,并且可以实现高度的灵活性和可扩展性。这样,可以根据项目的需求和用户的喜好来创建独特的、具有个性化的DataGrid控件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值