添加数据时,WPF DataGrid的高度会增加

时间:2012-06-12 10:16:43

标签: c# wpf height wpfdatagrid

我有一个WPF DataGrid,当我向其添加数据时,它的高度会增加,不适合它的初始高度。除非用户增加窗口大小,否则我不希望更改高度。有没有办法停止自动调整大小?

<Window x:Class="WpfDataGridSizeTest.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Loaded="Window_Loaded"
        SizeToContent="WidthAndHeight">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <DockPanel Grid.Row="0">
            <DataGrid x:Name="wordsDataGrid" VerticalAlignment="Top" ItemsSource="{Binding}" MinHeight="100" SelectionMode="Single" AutoGenerateColumns="False" VerticalScrollBarVisibility="Auto" >
                <DataGrid.Columns>
                    <DataGridTextColumn Header="Column" Width="Auto" Binding="{Binding AString}"/>
                </DataGrid.Columns>
            </DataGrid>
        </DockPanel>
    </Grid>
</Window>

    public partial class MainWindow : Window
    {
        MyList myList = new MyList();

        public MainWindow()
        {
            InitializeComponent();
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            wordsDataGrid.DataContext = myList;
            for (int i = 0; i < 100; ++i)
            {
                myList.AddOne("blah blah");
            }
        }
    }

    public class MyList : ObservableCollection<AClass>
    {
        public MyList() { }

        public void AddOne(string aString)
        {
            base.Add(new AClass(aString));
        }
    }

    public class AClass
    {
        public string AString { get; set; }

        public AClass(string aString)
        {
            AString = aString;
        }
    }

6 个答案:

答案 0 :(得分:4)

如果我没有弄错你,你希望你的DataGrid最初处于centain高度,在Windows中的DataGrid下方有一些空的空间......然后当调整Window的大小时,DataGrid将改变它的大小。

向网格添加一个Row,并定义该Row的MinHeight。然后将DataGrid设置为VerticalAlignment = Stretch。还要为窗口设置默认高度大小。

<Window x:Class="WpfDataGridSizeTest.MainWindow" 
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        Title="MainWindow" Loaded="Window_Loaded" Height="300"> 
    <Grid> 
        <Grid.RowDefinitions> 
            <RowDefinition Height="*"/> 
            <RowDefinition MinHeight="100"/> 
        </Grid.RowDefinitions> 
        <DockPanel Grid.Row="0" VerticalAlignment="Stretch"> 
            <DataGrid x:Name="wordsDataGrid" VerticalAlignment="Stretch" ItemsSource="{Binding}" MinHeight="100" SelectionMode="Single" AutoGenerateColumns="False" VerticalScrollBarVisibility="Auto" > 
                <DataGrid.Columns> 
                    <DataGridTextColumn Header="Column" Width="Auto" Binding="{Binding AString}"/> 
                </DataGrid.Columns> 
            </DataGrid> 
        </DockPanel> 
    </Grid> 
</Window> 

答案 1 :(得分:3)

我遇到了同样的问题,我通过在Window定义中删除 SizeToContent =“WidthAndHeight”来修复它。

答案 2 :(得分:1)

这将按照您的意愿行事:

<Grid>
    <Grid.RowDefinitions>
      <RowDefinition Height="1*"/>
      <RowDefinition Height="1*"/>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
      <ColumnDefinition Width="70"/>
      <ColumnDefinition Width="Auto"/>
    </Grid.ColumnDefinitions>

    <DataGrid Name="dgMain" AutoGenerateColumns="True"></DataGrid>

    </Grid>

与此同时:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        Foo foo;
        List<Foo> foos = new List<Foo>();

        foo = new Foo() { Name = "Sjaak" };
        foos.Add(foo);

        foo = new Foo() { Name = "Joepie" };
        foos.Add(foo);

        dgMain.ItemsSource = foos;

    }
}

public class Foo
{
    public Foo() { }

    public String Name { get; set; }
}

诀窍在于行高的比例(偶数)分布,使用“1 *”表示两行的高度属性。你也可以通过将一行高度设置为“2 *”等来在其他“份额”中对其进行分类。

答案 3 :(得分:0)

尝试使用VerticalAlignment = Top或明确将Height属性设置为某个值。

This也可能有助于将DataGrid放入StackPanel并控制StackPanel的大小调整行为。

答案 4 :(得分:0)

如果问题是整个网格增长(但你很高兴个别行增长)那么:DataGrid所在的父面板是什么?更改此设置可能会影响控件的大小调整方式。

例如:StackPanel允许其子项在一个方向(堆叠方向)上增长,而DockPanel会将“已填充”元素的大小限制为可用空间。

答案 5 :(得分:0)

 VerticalAlignment="Bottom" 

帮我解决了这个完全相同的问题。我也用过

 VerticalScrollBarVisibility="Auto"