我有一个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;
}
}
答案 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"