如何在 WPF 数据网格中显示 N 个项目?
Posted
技术标签:
【中文标题】如何在 WPF 数据网格中显示 N 个项目?【英文标题】:How to show N items in a WPF data grid? 【发布时间】:2021-06-16 18:48:27 【问题描述】:对于我正在使用的窗口宽度:
SizeToContent="Width"
但是对于身高,我是手动硬编码的。但是如何才能让窗口显示最多 N 个数据网格项呢?
所以如果超过 20 个项目,只显示其中的 20 个,如果少于则显示所有项目。
【问题讨论】:
您是否希望将所有项目加载到网格中,例如,当您对其进行排序时,您会看到前 20 个项目,或者您只想拥有最初的 20 个项目并使用它们? 这是.Take(20)
的问题吗?还是在寻找寻呼机?
我想要加载所有项目,因为我最多有 50-60 个,所以不是很多。但我想让我的窗口调整大小以在数据网格视图中显示最多 20 个项目(带滚动条)。如果它小于 20,窗口也应该在启动和运行时调整大小,所以如果我在我正在做的代码中删除或添加一个项目,那么窗口应该应用上面相同的逻辑并适当地调整大小。
因此,只需调整我的数据网格视图的大小以显示 20 个或更少的项目(带有滚动条)并根据此调整窗口大小。我的应用只包含这个单一的数据网格视图。
我认为这个问题和另一个问题很相似***.com/questions/10227218/…
【参考方案1】:
只需在窗口上使用SizeToContent="WidthAndHeight" MaxHeight="400"
,并使用适当的MaxHeight
值,以便DataGrid
中只有20 个项目可见。
这样所有项目都将被加载,如果项目超过 20 个,将显示滚动条,并且窗口将针对任何较少数量的项目正确调整大小。根据您上面的评论,我认为您正在努力实现这一目标。
当然,如果窗口仍需要手动完全调整大小,此解决方案将不起作用。
编辑
由于上述建议无法应用,这里还有一个...
因此,根据所有信息,如果我不能或不想使用分页,我会这样做:
MainWindow.xaml
<Window ...
Title="MainWindow"
SizeToContent="WidthAndHeight">
<Grid>
<DataGrid Name="dataGrid" />
</Grid>
</Window>
MainWindow.xaml.cs
public partial class MainWindow : Window
// Total number of items
private int dataCount = 0;
...
private void AddDataToGrid(SomeData data)
// Update item counter
dataCount += 1;
// Auto size if now there are 20 or less items, otherwise do not change size
this.SizeToContent = dataCount <= 20 ? SizeToContent.WidthAndHeight : SizeToContent.Width;
// Update grid data
this.dataGrid.Items.Add(data);
private void RemoveDataFromGrid(SomeData data)
// Update item counter
dataCount -= 1;
// Auto size if now there are 20 or less items, otherwise do not change size
this.SizeToContent = dataCount <= 20 ? SizeToContent.WidthAndHeight : SizeToContent.Width;
// Update grid data
this.dataGrid.Items.Remove(data);
基本上,我会添加用于添加或删除DataGrid
项目的方法,然后每次检查项目总数,并在需要时通过将SizeToContent
值设置为WidthAndHeight
使窗口的高度适合内容或Width
。
【讨论】:
谢谢,但我无法对值进行编码。因为我不知道实际的行高。此外,当项目少于 20 个时,它只需要显示那些调整了窗口大小的项目,因此您需要知道运行时的实际行高。 @JoanVenge 如果是这样,我已经用不同的可能解决方案更新了我的答案。 谢谢,但这只会调整窗口大小,不是吗?我需要调整数据网格的大小以仅显示 N 个项目。 对不起,我不确定我是否理解,您在写其他 cmets 中的窗口大小调整...无论如何,在我发布的示例中,窗口将遵循数据网格的大小,直到项目数超过 20,在这种情况下,窗口将保持相同大小,但数据网格会出现滚动条。 谢谢 我会试试这个,但我不明白你是如何使用硬编码的高度值 400 的?基本上我需要数据网格总是在 20 行的高度,或者更少,不超过 20。但是我需要程序来计算或使用实际显示的行高,因为如果我没有错 WPF 只知道这一点在运行时不是编译时。想象多台计算机,每台计算机都使用不同的分辨率和 hidpi 设置。我不想为每个实例使用不同的硬编码高度值。以上是关于如何在 WPF 数据网格中显示 N 个项目?的主要内容,如果未能解决你的问题,请参考以下文章