Immortals 发表于 2022-4-11 14:52:26

.net4.5 wpf flexgrid 的列宽拉伸

使用.net4.5 wpf flexgrid显示数据后,鼠标单击列边框(想手动拉伸列宽),实际效果是列宽会自动变窄,无法拉伸列宽;(flexgrid使用默认属性)
请问该问题需如何解决?



Richard.Ma 发表于 2022-4-11 14:52:27

用下面的代码可以规避这个问题,但是,肯定还会有其他的问题,
比如:列无法被拖动交换顺序,无法选中flexgrid单元格区域等

            if (e.LeftButton == MouseButtonState.Pressed&& Flexgrid.Cursor!= Cursors.SizeWE)
            {
                if (position.X >= 0 && position.Y >= 0 && position.X < this.ActualWidth && position.Y < this.ActualHeight)
                {
                  this.DragMove();
                }
            }


另外关于你自适应列宽的问题,可以用下面的代码
            Flexgrid.AutoSizeColumns(0, Flexgrid.Columns.Count, 1);
            Flexgrid.AutoSizeColumn(0, 0);

Richard.Ma 发表于 2022-4-11 15:53:48

目前的行为是双击列头的边框时,会自动对列宽进行调整,也就是你说的自动变窄
但是单击时不会,单击时是可以正常拖动列宽的

如果你这边确实是单击就自动调整了列宽,建议可以做一个简单的重现问题的demo上传上来,我协助你看一下原因

Immortals 发表于 2022-4-11 16:36:26

Richard.Ma 发表于 2022-4-11 15:53
目前的行为是双击列头的边框时,会自动对列宽进行调整,也就是你说的自动变窄
但是单击时不会,单击时是可 ...

我现在排查出来的差异点是,wpf的window窗体定义了“MouseLeftButtonDown”的事件处理程序时,就会出现上述问题,把自定义的事件处理代码删除后,就可以进行列宽的拉伸;这个问题可以规避掉吗?

Immortals 发表于 2022-4-11 16:43:49

Immortals 发表于 2022-4-11 16:36
我现在排查出来的差异点是,wpf的window窗体定义了“MouseLeftButtonDown”的事件处理程序时,就会出现上 ...

这是 MouseLeftButtonDown 的事件处理代码;

Richard.Ma 发表于 2022-4-11 17:43:56

我看你这个本意是要写一个标题栏内允许拖拽,但是你这个代码应该是包含了整个的窗口位置了吧,
你这边实际的需求就是要在flexgrid的标题栏来拖动窗口移动吗?还是指的是窗口的标题栏

Immortals 发表于 2022-4-11 18:02:33

Richard.Ma 发表于 2022-4-11 17:43
我看你这个本意是要写一个标题栏内允许拖拽,但是你这个代码应该是包含了整个的窗口位置了吧,
你这边实际 ...

我window窗体的window style设置为none,窗体是无法被移动的,所以需要定义“MouseLeftButtonDown”的处理事件来实现窗体的移动。
我的需求只是flexgrid显示数据,列宽可通过鼠标进行拉伸的功能,但是flexgrid控件布局在一个定义了“MouseLeftButtonDown”处理事件的窗体中,就无法实现这个拉伸功能。

Immortals 发表于 2022-4-11 18:13:18

Immortals 发表于 2022-4-11 18:02
我window窗体的window style设置为none,窗体是无法被移动的,所以需要定义“MouseLeftButtonDown”的处 ...

这是问题复现的一个demo;

Richard.Ma 发表于 2022-4-11 18:45:48

好的,我明天验证一下,然后给你回复
页: [1]
查看完整版本: .net4.5 wpf flexgrid 的列宽拉伸