- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个数据网格:
<DataGrid x:Name="Foo" ... />
我想将元素的高度绑定(bind)到数据网格的高度。简单地执行 {Binding ElementName=Foo, Path=ActualHeight}
将不起作用,因为它需要 ScrollViewer
的高度,而不是数据网格内容的总高度。
最佳答案
您需要找到 DataGrid 的内部 ScrollViewer
,并绑定(bind)到它的 ViewportHeight
根据您使用此值执行的操作以及需要它的位置,可以通过多种方式完成此操作。
通常情况下,为了仅查看目的需要这种东西,所以我会把代码放在 CodeBehind 中查找 ViewPort 高度
例如,使用一些 VisualTreeHelpers ,你可以这样做:
// Find first child of type ScrollViewer in object Foo
var scrollViewer = VisualTreeHelpers.FindChild<ScrollViewer>(Foo);
// If object is found, set other control's height to ViewportHeight
if (scrollViewer != null)
{
MyControl.Height = scrollViewer.ViewportHeight;
}
我不记得是否有多个ScrollViewer
在DataGrid
...你必须使用类似 Snoop 的东西确定地找出来。如果存在,则 .FindChild()
过载按名称查找您应该能够使用的元素。名字也可以通过Snoop之类的东西获取。
这也可以在 Converter
中完成,你在那里传递 DataGrid
到转换器,让它找到 ScrollViewer
和 ViewportHeight
在转换器中
<Grid Height="{Binding ElementName=Foo,
Converter={StaticResource GetDataGridContentHeight}}" />
编辑
我实际上做了一些测试,DataGrid 的 ScrollViewer
处理大小有点不同,可能是由于 Virtualization
.它似乎使用基于行数的相对大小。
测试DataGrid
我正在处理 23 行。 ScrollViewer.ExtentHeight
等于 23,并且 ScrollViewer.ViewportHeight
是 3,意味着总共有 23 行,并且显示了 3 个完整的行。 ScrollViewer.ScrollableHeight
等于 20,这意味着我可以从 0 滚动到 20(因为显示了 3 个项目,所以不需要转到 23),而 ScrollViewer.VerticalOffset
设置为我当前滚动到的任何项目。
因此要获取虚拟化中项目的实际内容高度ScrollViewer
,我想你将不得不得到 ActualHeight
其中一个可见行,并将其乘以 ScrollViewer.ExtentHeight
获取内容的实际大小。这仅在 Height
时有效你所有的项目都是一样的。
关于c# - 如何在 WPF 中检索 DataGrid 内容的总高度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11156592/
我是一名优秀的程序员,十分优秀!