如何在 WPF Datagrid 上启用滚动条?
Posted
技术标签:
【中文标题】如何在 WPF Datagrid 上启用滚动条?【英文标题】:how can I enable scrollbars on the WPF Datagrid? 【发布时间】:2010-10-14 23:35:39 【问题描述】:当我从this article 运行以下 Northwind WPF Toolkit Datagrid 代码时,我得到了一个数据网格,但没有没有滚动条,因此用户只能看到部分的数据网格。我使用的是 2009 年 3 月的最新版本。
我需要指定什么以使 WPF 数据网格具有滚动条?
我尝试将数据网格放在 ScrollViewer 中,但没有帮助。
XAML:
<Window x:Class="TestDataGrid566.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:toolkit="http://schemas.microsoft.com/wpf/2008/toolkit"
Title="Window1" Height="600" Width="800">
<StackPanel>
<toolkit:DataGrid x:Name="TheDataGrid" AutoGenerateColumns="True"/>
</StackPanel>
</Window>
代码隐藏:
using System.Linq;
using System.Windows;
using TestDataGrid566.Model;
namespace TestDataGrid566
public partial class Window1 : Window
public Window1()
InitializeComponent();
NorthwindDataContext db = new NorthwindDataContext();
var customers = from c in db.Customers
select c;
TheDataGrid.ItemsSource = customers;
【问题讨论】:
WPF Datagrid - Not showing any Scrollbar的可能重复 【参考方案1】:将DataGrid
放入Grid
、DockPanel
、ContentControl
或直接放入Window
。一个垂直方向的StackPanel
将给它的孩子他们要求的任何垂直空间——即使这意味着它被渲染在视野之外。
【讨论】:
除此之外,HeaderedContentControl
在内部使用StackPanel
实现,这将导致DataGrid
的行为方式与ContentControl
不一致。
我认为这个建议是垃圾几个小时,直到我终于发现 StackPanel 标记潜伏在我的 XAML 顶部看不见。谢谢!
还有一个垂直方向的 Stackpanel 会阻碍虚拟化并影响应用程序性能。
另外,如果 DataGrid 放置在 Grid Row 中,请不要使用“Auto”,因为这将允许数据网格在屏幕外展开——没有滚动条。要显示滚动条,必须为 DataGrid 明确指定大小——如 * 或数字。【参考方案2】:
WPF4
<DataGrid AutoGenerateColumns="True" Grid.Column="0" Grid.Row="0"
ScrollViewer.CanContentScroll="True"
ScrollViewer.VerticalScrollBarVisibility="Auto"
ScrollViewer.HorizontalScrollBarVisibility="Auto">
</DataGrid>
with : <ColumnDefinition Width="350" />
& <RowDefinition Height="300" />
工作正常。
滚动条不显示<ColumnDefinition Width="Auto" />
& <RowDefinition Height="300" />
。
也适用于:<ColumnDefinition Width="*" />
& <RowDefinition Height="300" />
如果 this 嵌套在外部 <Grid>
中。
【讨论】:
@Konrad VilterstenScrollViewer
是附加属性。【参考方案3】:
如果任何父容器 RowDefinition
高度设置为 "Auto"
也是滚动条的停止器
您也可以设置高度“*”
这发生在我的案例中。
【讨论】:
【参考方案4】:在DataGrid
上添加MaxHeight
和VerticalScrollBarVisibility="Auto"
解决了我的问题。
【讨论】:
是的,这很有效。完美解决了我的问题。谢谢~ 以我的拙见为最佳答案。【参考方案5】:为列和行添加具有定义的高度和宽度的网格。然后添加ScrollViewer
并在其中添加dataGrid。
【讨论】:
【参考方案6】:就我而言,我必须设置 MaxHeight
并将 IsEnabled="False"
替换为 IsReadOnly="True"
【讨论】:
【参考方案7】:这对我有用。 关键是使用 * 作为行高。
<Grid x:Name="grid">
<Grid.RowDefinitions>
<RowDefinition Height="60"/>
<RowDefinition Height="*"/>
<RowDefinition Height="10"/>
</Grid.RowDefinitions>
<TabControl Grid.Row="1" x:Name="tabItem">
<TabItem x:Name="ta"
Header="List of all Clients">
<DataGrid Name="clientsgrid" AutoGenerateColumns="True" Margin="2"
></DataGrid>
</TabItem>
</TabControl>
</Grid>
【讨论】:
我不知道为什么像这样的简单解决方案被否决 - 我可以确认,这个简单(没有 bla bla 和复杂的东西)非常适合我 - 谢谢! @ChristianCasutt 因为只看它,TabItem 更有可能影响结果。当我使用 * 作为包含数据网格的行的高度时,它不起作用。以上是关于如何在 WPF Datagrid 上启用滚动条?的主要内容,如果未能解决你的问题,请参考以下文章