.net - WPF 数据网格和动态列宽

标签 .net wpf datagrid resize

我们有一个自定义的 DataGrid 控件,它动态生成由 XML 结构确定的列。

创建每一列时,我们给它一个带星号的单位类型,因为我们希望确保 DataGrid 中永远不会有任何水平滚动。

            DataGridTextColumn column = new DataGridTextColumn();
            column.Width = new DataGridLength(entity.DisplaySize, DataGridLengthUnitType.Star);

但是,我们已经注意到,当 DataGrid 被呈现时,它以给定列的最小大小呈现,然后一旦 DataGrid 完全呈现,它就会调整列的大小以正确适应 DataGrid。这会导致闪烁效果。

有没有人有任何可能的解决方案?也许如何在后台渲染 DataGrid,然后在列完成后显示?还是有其他想法?

最佳答案

不幸的是,这是正常行为。它与控件的呈现方式有关。在 WPF 中,您有一层又一层的控件,DataGrid 在完成渲染之前无法知道控件的种类。

所以第一个布局 channel 创建控件,但它必须通过第二个 channel 来测量这些控件的大小。一旦它知道控件有多大,它就可以开始调整列的大小。

DataGrid 是 WPF 的高度可配置和动态布局系统不起作用的场景的一个很好的例子。要获得您习惯的那种性能,您需要使用非 WPF 网格,该网格能够更好地预测其自身的层次结构,从而执行这些类型的测量,而无需预渲染所有内容。 WPF 存在此类控件,但您必须找到它们。

这是来自 xceed 的一个:http://xceed.com/Grid_WPF_Intro.html?gclid=CNKE8rOBtrICFQfonAodHQ8AEA

这是来自 Telerik 的一个:http://www.telerik.com/products/wpf/gridview.aspx

(由于需要平衡灵活性和性能,以及现代数据网格中预期的大量功能,此控件长期以来一直被视为控件开发的顶峰。好的数据网格极难构建。在 Excel 中,Microsoft 构建了一个整个应用程序,本质上是一个美化的数据网格。所有这一切,你可能不会免费找到你正在寻找的东西。)

看到这个问题:WPF DataGrid Vs Windows Forms DataGridView

关于.net - WPF 数据网格和动态列宽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12428774/

相关文章:

c# - 类属性在程序集或命名空间外部只读

.net - 将 ASP.net MVC 网站部署到 Azure 网站的子文件夹?

WPF ListView 非事件选择颜色

.net - 哪些代码控制 WPF 应用程序的启动?

asp.net - C# 分页中 CodeBehind 的 GridView 不起作用

c# - 如何拖放 DataGrid 列标题?

c# - 防止在 ObservableCollection.CollectionChanged 事件上添加新项目

c# - 动态重新加载引用 (C# .NET)

c# - 用于视频广播的 wpf 应用程序

wpf - DataGrid 选项卡导航跳过列