WPF中的Window.ShowDialog()打开的窗口中的按钮Close()事件
我经常会使用ShowDialog().Value;这个遇到实现下面的功能时,ShowDialog()出的窗体Close()时,并不能返回值。
错误代码如下:
0 AddDataWay addDataWay = new AddDataWay();
1 if (addDataWay.ShowDialog().Value) //
2 {
3 int selectedWay = addDataWay.SelectWay();
4 if (selectedWay == 1)
5 {
6 }
7 else
8 {
9 }
10 }
对策一,更改为:
0 AddDataWay addDataWay = new AddDataWay();
1 if (addDataWay.ShowDialog().HasValue) //
2 {
3 int selectedWay = addDataWay.SelectWay();
4 if (selectedWay == 1)
5 {
6 }
7 else
8 {
9 }
10 }
对策二,AddDataWay代码中 this.Close();前加入一行 this.DialogResult = true;如下:
1 base.DialogResult = true; //this.Close()
2 base.Close(); //this.DialogResult = true;
补充:C#base和this的区别;
AddDataWay窗口代码:
1 public partial class AddDataWay : DXWindow
2 {
3 #region 成员变量
4 public static int selectedWay=1; // 选择方式默认云端
5 #endregion
6
7 public AddDataWay()
8 {
9 this.InitializeComponent();
10 }
11
12 private void DXWindow_Loaded(object sender, RoutedEventArgs e)
13 {
14 }
15
16 /// <summary>
17 /// 云端-0
18 /// </summary>
19 /// <param name="sender"></param>
20 /// <param name="e"></param>
21 private void ImportFromTheCloud_Click(object sender, RoutedEventArgs e)
22 {
23 selectedWay = 0;
24 this.Close();
25 }
26
27 /// <summary>
28 /// 本地-1
29 /// </summary>
30 /// <param name="sender"></param>
31 /// <param name="e"></param>
32 private void ImportFromTheLocal_Click(object sender, RoutedEventArgs e)
33 {
34 selectedWay = 1;
35 this.Close();
36 }
37 }