找回密码
 立即注册

QQ登录

只需一步,快速开始

q406157290

高级会员

124

主题

531

帖子

1359

积分

高级会员

积分
1359

活字格认证

q406157290
高级会员   /  发表于:2015-11-2 09:43  /   查看:10784  /  回复:16
如图所示的问题,为什么初期进来的时候多了一层红框,该怎么解决







这个是我新做的demo ,不用选择行 直接点击Button,问题就再现了

本帖子中包含更多资源

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

x

16 个回复

正序浏览
Alice
社区贡献组   /  发表于:2015-11-9 09:33:00
17#
回复 16楼KNight的帖子

谢谢@KNight
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
KNight
中级会员   /  发表于:2015-11-5 17:28:00
16#
回复 14楼q406157290的帖子

参考解决方案(1):
  1. if (cell != null && cell.Row.Index < this.grid.Rows.Count)
  2. {
  3.         d.FlexGridModels = cell.Row.DataItem as FlexGridModel;

  4.         // 下面两句是必须的
  5.         this.grid.Focus();
  6.         this.grid.UpdateLayout();
  7.        
  8.         Window1 w = new Window1();
  9.         //d.FlexGridModels.Name = null;// 情况一
  10.         // d.FlexGridModels.Name = "";// 情况二
  11.         w.DataContext = d;
  12.         w.ShowDialog();

  13.         // 子窗口关闭后再选中行
  14.         grid.SelectedIndex = cell.Row.Index;
  15. }
复制代码


参考解决方案(2):
  1. if (cell != null && cell.Row.Index < this.grid.Rows.Count)
  2. {
  3.         d.FlexGridModels = cell.Row.DataItem as FlexGridModel;

  4.         // 启动开始更新
  5.         grid.Selection.BeginUpdate();
  6.         // 换行
  7.         grid.SelectedIndex = cell.Row.Index;
  8.        
  9.         // 下面两句是必须的
  10.         this.grid.Focus();
  11.         this.grid.UpdateLayout();

  12.         Window1 w = new Window1();
  13.         //d.FlexGridModels.Name = null;// 情况一
  14.         // d.FlexGridModels.Name = "";// 情况二
  15.         w.DataContext = d;
  16.         w.ShowDialog();

  17.         // 提交换行更新
  18.         grid.Selection.EndUpdate(true, true);
  19. }
复制代码


如果在显示子窗口之前,不需要选中点击按钮所在行,只要调用下面两句代码(少一句都不可以)即可保证只有一个红色验证边框:
  1. this.grid.Focus();
  2. this.grid.UpdateLayout();
复制代码


但是,一旦在显示子窗口之前,手动设置DataGrid的选择行,以至于触发了其换行事件(如果本来就是选择该行,没触发换行事件,则没事儿),就会导致两层红色边框:
  1. if (cell != null && cell.Row.Index < this.grid.Rows.Count)
  2. {
  3.         d.FlexGridModels = cell.Row.DataItem as FlexGridModel;

  4.         grid.SelectedIndex = cell.Row.Index;
  5.        
  6.         // 下面两句是必须的
  7.         this.grid.Focus();
  8.         this.grid.UpdateLayout();
  9.        
  10.         Window1 w = new Window1();
  11.         //d.FlexGridModels.Name = null;// 情况一
  12.         // d.FlexGridModels.Name = "";// 情况二
  13.         w.DataContext = d;
  14.         w.ShowDialog();

  15.         // 子窗口关闭后再选中行
  16.         //grid.SelectedIndex = cell.Row.Index;
  17. }
复制代码

上面的代码,当DataGrid当前选择的行,与所点击的按钮所在行一致,则不会出现两层红色边框,否则相反;

所以就猜测是由于显示子窗口之前,DataGrid的换行操作事件,导致了子窗口中对应绑定控件多了一层排他验证的Border;
参考解决方案(2),即可知道,当 grid.Selection.EndUpdate(true, true); 提交换行操作时,就会导致该现象,所以可以将换行操作放到子窗口关闭后在提交即可;
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-11-5 14:10:00
15#
回复 14楼q406157290的帖子

谢谢您的反馈。
您可以查看10楼的示例验证您的需求。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
q406157290
高级会员   /  发表于:2015-11-5 08:58:00
14#
回复 13楼Alice的帖子

但是实际的开发中 需要当直接点击DataGrid 某行的button时,需要被点击button所在行处于选中状态,这两行代码是不能没有的
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-11-4 11:31:00
13#
回复 11楼q406157290的帖子

和研发组讨论了下您的问题。
因为通过window已经传了DataContxt,因此下面的两句在Button_Click中的代码是没有必要的:
  1.   //CollectionView cv = (CollectionView)CollectionViewSource.GetDefaultView(this.flexGridViewModel1.ItemSource);
  2.                     //cv.MoveCurrentTo(d.FlexGridModels);
复制代码


和10楼所提到的一致。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-11-3 15:49:00
12#
回复 1楼q406157290的帖子

谢谢您的反馈。
您的问题我重现了,问题已经提交到产品组,如果有进展,会给您反馈。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
q406157290
高级会员   /  发表于:2015-11-3 15:29:00
11#
回复 10楼KNight的帖子

应该是您找的原因,之所以写那代码是因为当只点击button的时候button所在的行时不会被选择上的,所以才手动让当前选择行它移动到button所在行,这代码又是必须有的 哎
回复 使用道具 举报
KNight
中级会员   /  发表于:2015-11-3 14:05:00
10#
回复 9楼q406157290的帖子

我先确定一下我理解的是否有误,您是想当Name初始时为Null,然后在详细信息的子界面中第一次不对Null做排他验证而显示红框,之后的验证照常,是这样吗?对于您提到的两层红框,我提交一个demo,您看一下是否还有两层红框的问题

参考如下Demo:


列举了三种初始情况:


注释如下两句代码测试一遍,打开注释再测试一遍,可发现由这两句引起的双层红框:
  1. // 引起两层红框缘由
  2. //CollectionView cv = (CollectionView)CollectionViewSource.GetDefaultView(this.flexGridViewModel1.ItemSource);
  3. //cv.MoveCurrentTo(d.FlexGridModels);
复制代码


这里就深奥了,我就不晓得具体是啥原因了,详情可以问一下Alice;我猜测是由于其中的 MoveCurrentTo 方法,触发了在当前输入框外围又多添加了一层红色边框;

本帖子中包含更多资源

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

x

评分

参与人数 1金币 +999 满意度 +5 收起 理由
q406157290 + 999 + 5 奖励金币

查看全部评分

回复 使用道具 举报
q406157290
高级会员   /  发表于:2015-11-3 08:09:00
9#
回复 8楼KNight的帖子

按照您自己的解决思路,还有没有其它除了您给的解决方案外的方法呢真的麻烦了, 就是不要让它出现两层红框
我发现在我的Demo上初期不给Name赋值,就连Null都不给它赋值,在点击button的时候不用把Name设置为Null
画面运行不选择行直接点击button就会出两层红框,如果先选择一行然后再点击button,就不会出两层红框了
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部