如何在WPF Datagrid上启用滚动条?

时间:2009-03-23 14:10:48

标签: wpf datagrid scroll

当我从this article运行以下 Northwind WPF Toolkit Datagrid 代码时,我得到了一个数据网格,但是没有滚动条,因此用户只能看到datagrid的一部分。我使用的是2009年3月的最新版本。

我需要指定什么才能让WPF Datagrid有滚动条?

我尝试将数据网格放在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;
        }
    }
}

7 个答案:

答案 0 :(得分:91)

DataGrid放入GridDockPanelContentControl或直接放在Window中。垂直方向的StackPanel将为其子项提供他们要求的任何垂直空间 - 即使这意味着它被渲染出视图。

答案 1 :(得分:45)

WPF4

<DataGrid AutoGenerateColumns="True" Grid.Column="0" Grid.Row="0"
      ScrollViewer.CanContentScroll="True" 
      ScrollViewer.VerticalScrollBarVisibility="Auto"
      ScrollViewer.HorizontalScrollBarVisibility="Auto">
</DataGrid>

with:<ColumnDefinition Width="350" />&amp; <RowDefinition Height="300" />工作正常。

滚动条不显示<ColumnDefinition Width="Auto" />&amp; <RowDefinition Height="300" />

也适用于:<ColumnDefinition Width="*" />&amp; <RowDefinition Height="300" /> 如果它嵌套在外部<Grid>

答案 2 :(得分:16)

如果设置为RowDefinition的任何父容器"Auto"高度也是滚动条的停止者

或者,您可以设置高度“*”

我的情况发生了什么。

答案 3 :(得分:8)

MaxHeight上添加VerticalScrollBarVisibility="Auto"DataGrid解决了我的问题。

答案 4 :(得分:1)

为列和行添加定义高度和宽度的网格。然后添加ScrollViewer并在其中添加dataGrid。

答案 5 :(得分:1)

就我而言,我必须设置MaxHeight并将IsEnabled="False"替换为IsReadOnly="True"

答案 6 :(得分:-1)

这对我有用。 关键是使用*作为行高。

<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>