XAML中Grid设置滚动条无效,如何正确添加横向纵向滚动条?
解决XAML Grid滚动条不显示的问题
嘿,刚入门XAML很容易踩这个坑!你直接在Grid上设置ScrollViewer.HorizontalScrollBarVisibility是不会生效的,因为Grid本身不是可滚动控件——它只是一个布局容器,没有内置的滚动逻辑。那个附加属性是给ScrollViewer控件用的,正确的做法是把Grid整个包裹在ScrollViewer里面。
正确的实现方式
你需要把你的Grid放在ScrollViewer标签内部,然后在ScrollViewer上设置滚动条的可见性属性,这样当Grid的内容超出ScrollViewer的显示范围时,滚动条就会自动出现了。修改后的代码如下:
<ScrollViewer HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Visible"> <Grid> <Grid.RowDefinitions> <RowDefinition/> <RowDefinition/> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="110"/> <ColumnDefinition Width="60"/> <ColumnDefinition Width="90"/> <ColumnDefinition Width="60"/> <ColumnDefinition Width="80"/> <ColumnDefinition Width="50"/> </Grid.ColumnDefinitions> <TextBlock Grid.Row="0" Grid.Column="0" Style="{DynamicResource Resource}" Text="{l:LocText CustomerStats_Last24Hours}"></TextBlock> <TextBlock Grid.Row="0" Grid.Column="1" Style="{DynamicResource Resource}" Text="{Binding CustomerSummaryStats.Last24Hours.Count}"></TextBlock> <TextBlock Grid.Row="0" Grid.Column="2" Style="{DynamicResource Resource}" Text="{Binding CustomerSummaryStats.Last24Hours.TotalAmount, StringFormat='{}$ {0:0,0.00}'}"></TextBlock> <TextBlock Grid.Row="0" Grid.Column="3" Style="{DynamicResource Resource}" Text="{Binding CustomerSummaryStats.Last24Hours.CheckCurrency}"></TextBlock> <TextBlock Grid.Row="0" Grid.Column="4" Style="{DynamicResource Resource}" Text="{Binding CustomerSummaryStats.Last24Hours.AverageAmount, StringFormat='{}$ {0:0,0.00}'}"></TextBlock> <TextBlock Grid.Row="0" Grid.Column="5" Style="{DynamicResource Resource}" Text="{Binding CustomerSummaryStats.Last24Hours.Percentage, StringFormat='{}{0:0}%'}"></TextBlock> <TextBlock Grid.Row="1" Grid.Column="0" Style="{DynamicResource Resource}" Text="{l:LocText CustomerStats_Last7Days}"></TextBlock> <TextBlock Grid.Row="1" Grid.Column="1" Style="{DynamicResource Resource}" Text="{Binding CustomerSummaryStats.Last7Days.Count}"></TextBlock> <TextBlock Grid.Row="1" Grid.Column="2" Style="{DynamicResource Resource}" Text="{Binding CustomerSummaryStats.Last7Days.TotalAmount, StringFormat='{}$ {0:0,0.00}'}"></TextBlock> <TextBlock Grid.Row="1" Grid.Column="3" Style="{DynamicResource Resource}" Text="{Binding CustomerSummaryStats.Last7Days.CheckCurrency}"></TextBlock> <TextBlock Grid.Row="1" Grid.Column="4" Style="{DynamicResource Resource}" Text="{Binding CustomerSummaryStats.Last7Days.AverageAmount, StringFormat='{}$ {0:0,0.00}'}"></TextBlock> <TextBlock Grid.Row="1" Grid.Column="5" Style="{DynamicResource Resource}" Text="{Binding CustomerSummaryStats.Last7Days.Percentage, StringFormat='{}{0:0}%'}"></TextBlock> </Grid> </ScrollViewer>
额外提示
- 如果滚动条还是没显示,你可以试着把窗口拉窄一点,或者给Grid设置一个固定的
Width(比如Width="500"),确保它的宽度超过ScrollViewer的可用空间,这样横向滚动条就会出来了。 - 你可以根据需求调整
HorizontalScrollBarVisibility和VerticalScrollBarVisibility的值,比如设为Auto的话,只有当内容超出时才显示滚动条,更友好。
内容的提问来源于stack exchange,提问作者Nickso
相关产品推荐
相关产品推荐

