【问题标题】:DevExpress.Wpf.Grid.InfiniteGridSizeException was unhandledDevExpress.Wpf.Grid.InfiniteGridSizeException 未处理
【发布时间】:2016-05-25 08:16:53
【问题描述】:

使用 DevExpress 时,我看到这个错误:

DevExpress.Wpf.Grid.InfiniteGridSizeException 未处理 Message="默认情况下,不允许使用无限的网格高度,因为所有网格行都会被渲染,因此网格的工作速度会很慢。要解决此问题,您应该将网格放入一个容器中,该容器将为网格,或者您应该手动指定网格的高度或 MaxHeight。请注意,您也可以通过将 GridControl.AllowInfiniteGridSize 静态属性设置为 True 来避免此异常,但在这种情况下,网格将运行缓慢。"

【问题讨论】:

    标签: c# .net wpf xaml devexpress


    【解决方案1】:

    问题是DXGrid 的高度是无限的。

    要修复,请将高度设置为非无限值。

    Snoop 在这方面绝对是无价的:

    如果 XAML 元素的“高度”是无限的(即 0NaN),您可以使用以下一个进行设置:

    • 选项 1:Height="{Binding Path=ActualHeight, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=UIElement}}"
    • 选项 2:VerticalAlignment="Stretch"
    • 选项 3:Height="Auto"

    提示:如果您是带有<RowDefinition Height="*">Grid 的孩子,请使用VerticalAlignment="Stretch",如果这不起作用,请在其他地方使用Binding RelativeSource...

    但是如果父控件的高度是无限的呢?

    如果父控件的高度是无限的,那么我们就有更大的问题了。我们必须不断设置每个连续父级的高度,直到我们碰到一个具有非无限 ActualHeight 的控件。

    附录 A:相关文章

    【讨论】:

    • 这些都不适合我,我的网格在 ItemControl 的扩展器中
    • 控件的实际高度是多少?如果它是无限的,请查看父级的 ActualHeight,然后重复,直到找到具有有限高度的父级。然后往下走,设置所有控件的高度,直到你碰到你的那个。
    【解决方案2】:

    当您的网格有 no 具有有限高度的父级时,这是一种可能的情况。例如,作为 ScrollViewer 内容。

    要解决这个问题,您可以将静态属性 GridControl.AllowInfiniteGridSize 设置为 true,但 GridControl 不会使用虚拟化机制在这种情况下。

    因此,这里更好的选择是为它设置 MaxHeight。 但由于网格的大小通常是动态的,MaxHeight 的简单常量并不是最好的。
    您可能需要计算网格的实际最大高度。 DXBinding 在这里可能会有所帮助:

    <dxg:GridControl
         MaxHeight="{DXBinding '@s.VisibleRowCount * $const:GridHelper.RowMaxHeight'}" />
    

    其中 RowMaxHeight 是您的常数,也用于单元格模板

    【讨论】:

      【解决方案3】:

      此外,我最近遇到了同样的问题,我最终将 MaxHeight 绑定到屏幕高度。可能并不适用于所有场景,但它对大多数人来说是一种快速修复。

      <dxg:GridControl MaxHeight="{x:Static SystemParameters.PrimaryScreenHeight}" />
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-19
        • 2017-11-16
        • 1970-01-01
        • 2019-11-02
        • 2016-08-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多