开发者社区> 芝麻软件> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

WPF用ShowDialog()弹出窗体时控制该窗体的显示位置,并传值回父窗体

简介: 原文:http://blog.csdn.net/kiss0622/article/details/5852153 方法一: 1.父窗口代码 Window1.xaml.cs private void Button_Click(object sender, RoutedEventArgs e...
+关注继续查看

原文:http://blog.csdn.net/kiss0622/article/details/5852153

方法一:

1.父窗口代码

Window1.xaml.cs

private void Button_Click(object sender, RoutedEventArgs e)
        {
            Window2 w2 = new Window2(this.Top, this.Left);//this.Top,this.Left 作用是将当前父窗体的位置传给子窗体
           
            if (w2.ShowDialog()==true)
            {
                text1.Text = w2.name;
            }
        }
    }

 

2.子窗口代码

Window2.xaml.cs

  public string name;
        public Window2(double x,double y)
        {
            InitializeComponent();
            //启用‘Manual’属性后,可以手动设置窗体的显示位置
            this.WindowStartupLocation = WindowStartupLocation.Manual;
            this.Top = x;
            this.Left = y;
            //如需手动绑定事件,如下
        this.but1.AddHandler(Button.ClickEvent,new RoutedEventHandler(OkButton_Click)); }
private void but1_Click(object sender, RoutedEventArgs e) { name = "hlr"; this.DialogResult = true;//必须设置,否则无法回传 }

 如果使用MVVM,当前按钮有command事件,并且command中有判断条件,这里应该相应的做修改,示例如下:

选中DataGrid某行,才允许继续往下执行,即执行父窗口的if (w2.ShowDialog()==true){}内的代码,否则,没选中也执行

var item = this.DataGrid.SelectedItem;
if (item != null)
{
    this.DialogResult = true;
}

 

方法二:使用事件(MVVM下)

场景:通过命令,调出查询窗口,将选中项数据传回

 

父窗口的VM

#region 信息检索命令
        private RelayCommand _SearchCommand;

        public RelayCommand SearchCommand
        {
            get
            {
                return _SearchCommand
                    ?? (_SearchCommand = new RelayCommand(ExecuteSearchCommand));
            }
        }

        /// <summary>
        /// 检索命令逻辑
        /// </summary>
        /// <param name="obj"></param>
        private void ExecuteSearchCommand(object obj)//object obj
        { 
            AddDialog v = new AddDialog();
            v.Closed += v_Closed;
            v.ShowDialog();
        }
        private void v_Closed(object sender, EventArgs e)
        {
            var frm = (AddDialog)sender;
            var item = (ModelAdd)frm.DataGrid.SelectedItem;
            if (item != null)
            {
                var id = item.ID;
            }
        }
        #endregion

 存在的隐患:

只要窗口关闭,都会执行v_Closed

场景示例:选中DataGrid某行,点击确认按钮,确认事件中通过一定的判断规则,符合条件则执行v_Closed

可能隐患:用户选中DataGrid某行,但是点击了取消按钮,并无验证“确认事件”中的判断规则,执行v_Closed导致出错

解决:设置共有变量进行状态控制;在v_Closed中设置相应的判断(不推荐,如产生变更可能因忘记修改导致不同步,除非是特简单的条件);

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
WPF 窗体基类实现的体验及实现回车到下一控件
原文:WPF 窗体基类实现的体验及实现回车到下一控件 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jsyhello/article/details/7216509 ...
929 0
WPF 获取 ListView DataTemplate 中控件值
原文:WPF 获取 ListView DataTemplate 中控件值 版权声明:本文为博主原创文章,未经博主允许可以随意转载 https://blog.csdn.
1448 0
WPF 4 DataGrid 控件(基本功能篇)
原文:WPF 4 DataGrid 控件(基本功能篇)      提到DataGrid 不管是网页还是应用程序开发都会频繁使用。通过它我们可以灵活的在行与列间显示各种数据。本篇将详细介绍WPF 4 中DataGrid 的相关功能。
1052 0
WPF 4 DataGrid 控件(进阶篇一)
原文:WPF 4 DataGrid 控件(进阶篇一)      上一篇《WPF 4 DataGrid 控件(自定义样式篇)》中,我们掌握了DataGrid 列表头、行表头、行、单元格相关的自定义样式方法,本篇我们继续对自定义样式进行一些高级设置。
823 0
WPF 4 DataGrid 控件(自定义样式篇)
原文:WPF 4 DataGrid 控件(自定义样式篇)      在《WPF 4 DataGrid 控件(基本功能篇)》中我们已经学习了DataGrid 的基本功能及使用方法。本篇将继续介绍自定义DataGrid 样式的相关内容,其中将涉及到ColumnHeader、RowHeader、Row、Cell 的各种样式设置。
2143 0
基于WPF的窗体控件自适应思考
    WinForm要实现窗体、控件的自适应还是比较困难的。不是说不行,单靠算比较因子和坐标的办法是解决不了根本问题的。     得转变思路,考虑用WPF实现这种功能。
816 0
+关注
芝麻软件
编程语言,框架相关专家
579
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载