68

当我运行本文中的以下Northwind WPF Toolkit 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;
        }
    }
}
4

7 回答 7

109

DataGrid,Grid或直接放在DockPanel. 一个垂直方向将给它的孩子他们要求的任何垂直空间——即使这意味着它被渲染在视野之外。ContentControlWindowStackPanel

于 2009-03-23T14:28:20.943 回答
60

WPF4

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

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

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

也适用于:<ColumnDefinition Width="*" />&<RowDefinition Height="300" /> 在嵌套在外部的情况下<Grid>

于 2011-02-08T14:18:35.070 回答
20

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

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

这发生在我的案例中。

于 2015-05-25T07:06:12.163 回答
17

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

于 2016-05-12T09:27:04.883 回答
4

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

于 2016-06-03T14:21:41.140 回答
1

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

于 2019-03-27T12:07:45.123 回答
0

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

<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>
于 2020-07-24T17:16:31.190 回答