回复 14楼q406157290的帖子
参考解决方案(1):
- if (cell != null && cell.Row.Index < this.grid.Rows.Count)
- {
- d.FlexGridModels = cell.Row.DataItem as FlexGridModel;
- // 下面两句是必须的
- this.grid.Focus();
- this.grid.UpdateLayout();
-
- Window1 w = new Window1();
- //d.FlexGridModels.Name = null;// 情况一
- // d.FlexGridModels.Name = "";// 情况二
- w.DataContext = d;
- w.ShowDialog();
- // 子窗口关闭后再选中行
- grid.SelectedIndex = cell.Row.Index;
- }
复制代码
参考解决方案(2):
- if (cell != null && cell.Row.Index < this.grid.Rows.Count)
- {
- d.FlexGridModels = cell.Row.DataItem as FlexGridModel;
- // 启动开始更新
- grid.Selection.BeginUpdate();
- // 换行
- grid.SelectedIndex = cell.Row.Index;
-
- // 下面两句是必须的
- this.grid.Focus();
- this.grid.UpdateLayout();
- Window1 w = new Window1();
- //d.FlexGridModels.Name = null;// 情况一
- // d.FlexGridModels.Name = "";// 情况二
- w.DataContext = d;
- w.ShowDialog();
- // 提交换行更新
- grid.Selection.EndUpdate(true, true);
- }
复制代码
如果在显示子窗口之前,不需要选中点击按钮所在行,只要调用下面两句代码(少一句都不可以)即可保证只有一个红色验证边框:
- this.grid.Focus();
- this.grid.UpdateLayout();
复制代码
但是,一旦在显示子窗口之前,手动设置DataGrid的选择行,以至于触发了其换行事件(如果本来就是选择该行,没触发换行事件,则没事儿),就会导致两层红色边框:
- if (cell != null && cell.Row.Index < this.grid.Rows.Count)
- {
- d.FlexGridModels = cell.Row.DataItem as FlexGridModel;
- grid.SelectedIndex = cell.Row.Index;
-
- // 下面两句是必须的
- this.grid.Focus();
- this.grid.UpdateLayout();
-
- Window1 w = new Window1();
- //d.FlexGridModels.Name = null;// 情况一
- // d.FlexGridModels.Name = "";// 情况二
- w.DataContext = d;
- w.ShowDialog();
- // 子窗口关闭后再选中行
- //grid.SelectedIndex = cell.Row.Index;
- }
复制代码
上面的代码,当DataGrid当前选择的行,与所点击的按钮所在行一致,则不会出现两层红色边框,否则相反;
所以就猜测是由于显示子窗口之前,DataGrid的换行操作事件,导致了子窗口中对应绑定控件多了一层排他验证的Border;
参考解决方案(2),即可知道,当 grid.Selection.EndUpdate(true, true); 提交换行操作时,就会导致该现象,所以可以将换行操作放到子窗口关闭后在提交即可; |