【问题标题】:DevExpress WPF Grid - Event when columns width is changedDevExpress WPF Grid - 更改列宽时的事件
【发布时间】:2009-12-10 08:41:15
【问题描述】:

有谁知道,当用户更改 WPF DevExpress 网格的列宽时,会引发哪个事件?我想用它来存储数据库中的列宽。

【问题讨论】:

    标签: wpf grid devexpress


    【解决方案1】:

    您可以通过事件 View.LostFocus 存储列宽:

    DevExpress.Xpf.Grid.GridControl grc = new DevExpress.Xpf.Grid.GridControl(); grc.View.LostFocus += View_LostFocus;

    和处理程序:

     void View_LostFocus(object sender, RoutedEventArgs e)
      {
            TableView tv = sender as TableView;
            GridColumn[] gcs = tv.VisibleColumns.ToArray();
            foreach (GridColumn gc in gcs)
            {
                if (gc.ActualHeaderWidth != gc.Width)
                {
                    double newWidth = gc.ActualHeaderWidth; //Do something with new width
                }
            }
        }
    

    【讨论】:

      【解决方案2】:

      我也必须这样做,但对于 silverlight 网格。我能得到的最好的方法是处理 Grid.LayoutUpdated 事件,并枚举列以获取它们的宽度。我什至无法绑定到 silverlight 网格中的列宽属性,因为它不是依赖属性,WPF 网格很可能完全相同。

      编辑: 您可以做的是检查 WPF 网格的源代码,然后自己添加一个 ColumnResized 事件。这并不理想,因为每次安装 DevExpress 更新时都必须重新集成代码,然后重建网格。您还需要小心如何执行此操作,例如,您需要找出确定列大小调整何时完成的最佳方法,这样您就不会持续触发事件。或者您可以四处寻找功能更全面(更成熟)的网格?

      【讨论】:

      • 我试过了,这个事件每 5 秒自动触发一次,这会严重降低我的应用程序的速度。所以我认为我们必须寻找更好的方式或事件。
      • 或者也许我们必须用某种方式来指示用户何时更新布局以及何时自动提升。
      • LostMouseCapture - 工作得更好一些,如果没有人回答或建议更好的方法,我认为这将是我的目的的最佳方法。
      • 我完成了混合操作,当 LostMouseCapture 引发时,iset 属性 WithChanged 为 true,在 LayoutUpdated 事件中我检查 WithChanged 是否为 true。如果是,那么我保存我的专栏。
      • 酷,很高兴你找到了解决方案。我不想过多地贬低 DevExpress,而且我已经使用他们的东西几年了,但我真的认为他们需要使用 WPF 和 Silverlight 控件来改进他们的游戏——尤其是当缺少像 ColumnChanged 事件这样简单的东西时.
      【解决方案3】:

      DataGridColumnHeader 公开了一个 SizeChanged 事件,该事件将 SizeChangedEventArgs 对象传递给您,其中公开了许多有用的 Sizes 信息!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-09-17
        • 1970-01-01
        • 1970-01-01
        • 2020-10-29
        • 2013-08-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多