找回密码
 立即注册

QQ登录

只需一步,快速开始

Immortals

金牌服务用户

2

主题

7

帖子

25

积分

金牌服务用户

积分
25
最新发帖
Immortals
金牌服务用户   /  发表于:2022-4-11 14:52  /   查看:3679  /  回复:8
10金币
使用.net4.5 wpf flexgrid显示数据后,鼠标单击列边框(想手动拉伸列宽),实际效果是列宽会自动变窄,无法拉伸列宽;(flexgrid使用默认属性)
请问该问题需如何解决?



最佳答案

查看完整内容

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

8 个回复

正序浏览
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-4-11 18:45:48
8#
好的,我明天验证一下,然后给你回复
回复 使用道具 举报
Immortals
金牌服务用户   /  发表于:2022-4-11 18:13:18
7#
Immortals 发表于 2022-4-11 18:02
我window窗体的window style设置为none,窗体是无法被移动的,所以需要定义“MouseLeftButtonDown”的处 ...

这是问题复现的一个demo;

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
Immortals
金牌服务用户   /  发表于:2022-4-11 18:02:33
6#
Richard.Ma 发表于 2022-4-11 17:43
我看你这个本意是要写一个标题栏内允许拖拽,但是你这个代码应该是包含了整个的窗口位置了吧,
你这边实际 ...

我window窗体的window style设置为none,窗体是无法被移动的,所以需要定义“MouseLeftButtonDown”的处理事件来实现窗体的移动。
我的需求只是flexgrid显示数据,列宽可通过鼠标进行拉伸的功能,但是flexgrid控件布局在一个定义了“MouseLeftButtonDown”处理事件的窗体中,就无法实现这个拉伸功能。
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-4-11 17:43:56
5#
我看你这个本意是要写一个标题栏内允许拖拽,但是你这个代码应该是包含了整个的窗口位置了吧,
你这边实际的需求就是要在flexgrid的标题栏来拖动窗口移动吗?还是指的是窗口的标题栏

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
Immortals
金牌服务用户   /  发表于:2022-4-11 16:43:49
4#
Immortals 发表于 2022-4-11 16:36
我现在排查出来的差异点是,wpf的window窗体定义了“MouseLeftButtonDown”的事件处理程序时,就会出现上 ...

这是 MouseLeftButtonDown 的事件处理代码;

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
Immortals
金牌服务用户   /  发表于:2022-4-11 16:36:26
3#
Richard.Ma 发表于 2022-4-11 15:53
目前的行为是双击列头的边框时,会自动对列宽进行调整,也就是你说的自动变窄
但是单击时不会,单击时是可 ...

我现在排查出来的差异点是,wpf的window窗体定义了“MouseLeftButtonDown”的事件处理程序时,就会出现上述问题,把自定义的事件处理代码删除后,就可以进行列宽的拉伸;这个问题可以规避掉吗?
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-4-11 15:53:48
2#
目前的行为是双击列头的边框时,会自动对列宽进行调整,也就是你说的自动变窄
但是单击时不会,单击时是可以正常拖动列宽的

如果你这边确实是单击就自动调整了列宽,建议可以做一个简单的重现问题的demo上传上来,我协助你看一下原因
回复 使用道具 举报
最佳答案
最佳答案
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-4-11 14:52:27
来自 9#
用下面的代码可以规避这个问题,但是,肯定还会有其他的问题,
比如:列无法被拖动交换顺序,无法选中flexgrid单元格区域等

  1.             if (e.LeftButton == MouseButtonState.Pressed&& Flexgrid.Cursor!= Cursors.SizeWE)
  2.             {
  3.                 if (position.X >= 0 && position.Y >= 0 && position.X < this.ActualWidth && position.Y < this.ActualHeight)
  4.                 {
  5.                     this.DragMove();
  6.                 }
  7.             }
复制代码



另外关于你自适应列宽的问题,可以用下面的代码
  1.             Flexgrid.AutoSizeColumns(0, Flexgrid.Columns.Count, 1);
  2.             Flexgrid.AutoSizeColumn(0, 0);
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部