using FirstFloor.ModernUI.Windows.Controls; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace Common.Helper { /// <summary> /// Interaction logic for frmMessage.xaml /// </summary> public partial class frmMessage : ModernDialog { public string ReturnMsg = ""; private string msgTitle = ""; private string msg1 = ""; private string msg2 = ""; private string msgType = ""; private string msgDetail = ""; public frmMessage(string msgTitle, string msg1, string msg2, string msgType, string msgDetail) { InitializeComponent(); this.msgTitle = msgTitle; this.msg1 = msg1; this.msg2 = msg2; this.msgType = msgType; this.msgDetail = msgDetail; } private void btnYes_Click(object sender, EventArgs e) { try { ReturnMsg = "YES"; this.DialogResult = true; this.Close(); } catch (Exception ex) { //this.Cursor = Cursors.Default; string msg = Utility.UtilityHelper.GetFinalInnerException(ex).Message; Utility.UtilityHelper.WriteLog("frmMessage/btnYes_Click " + msg, Utility.UtilityHelper.eLogCategory.UI, System.Diagnostics.TraceEventType.Error); CommonHelper.CallMsgPopUp("Notice", CommonManager.GetMessage("30013"), "", "1", msg); } } private void btnNo_Click(object sender, EventArgs e) { try { ReturnMsg = "NO"; this.DialogResult = true; this.Close(); } catch (Exception ex) { //this.Cursor = Cursors.Default; string msg = Utility.UtilityHelper.GetFinalInnerException(ex).Message; Utility.UtilityHelper.WriteLog("frmMessage/btnNo_Click " + msg, Utility.UtilityHelper.eLogCategory.UI, System.Diagnostics.TraceEventType.Error); CommonHelper.CallMsgPopUp("Notice", CommonManager.GetMessage("30013"), "", "1", msg); } } private void btnConfirm_Click(object sender, EventArgs e) { try { ReturnMsg = "OK"; this.DialogResult = true; this.Close(); } catch (Exception ex) { //this.Cursor = Cursors.Default; string msg = Utility.UtilityHelper.GetFinalInnerException(ex).Message; Utility.UtilityHelper.WriteLog("frmMessage/btnConfirm_Click " + msg, Utility.UtilityHelper.eLogCategory.UI, System.Diagnostics.TraceEventType.Error); CommonHelper.CallMsgPopUp("Notice", CommonManager.GetMessage("30013"), "", "1", msg); } } private void frmMessage_Loaded(object sender, RoutedEventArgs e) { try { // define the dialog buttons this.Buttons = new Button[] { this.YesButton, this.NoButton, this.OkButton, this.CancelButton }; this.YesButton.Click += new System.Windows.RoutedEventHandler(this.btnYes_Click); this.NoButton.Click += new System.Windows.RoutedEventHandler(this.btnNo_Click); this.OkButton.Click += new System.Windows.RoutedEventHandler(this.btnConfirm_Click); this.CancelButton.Click += new System.Windows.RoutedEventHandler(this.btnConfirm_Click); this.Title = msgTitle; this.lblMessage1.Text = msg1; this.lblMessage2.Text = msg2; if (msgType == "1") { this.YesButton.Visibility = Visibility.Hidden; this.NoButton.Visibility = Visibility.Hidden; this.OkButton.Visibility = Visibility.Visible; } else if (msgType == "2") { this.YesButton.Visibility = Visibility.Visible; this.NoButton.Visibility = Visibility.Visible; this.OkButton.Visibility = Visibility.Hidden; ; } if (msgDetail != "") { CancelButton.Visibility = Visibility.Visible; CancelButton.Content = msgDetail; } } catch (Exception ex) { string msg = Utility.UtilityHelper.GetFinalInnerException(ex).Message; Utility.UtilityHelper.WriteLog("frmMessage " + msg, Utility.UtilityHelper.eLogCategory.UI, System.Diagnostics.TraceEventType.Error); CommonHelper.CallMsgPopUp("Notice", CommonManager.GetMessage("30006"), "", "1", msg); } } } }
点击确认时发生异常
异常信息如下:
Exception
System.InvalidOperationException: DialogResult can be set only after Window is created and shown as dialog.
at System.Windows.Window.set_DialogResult(Nullable`1 value)
at FirstFloor.ModernUI.Windows.Controls.ModernDialog.<.ctor>b__9_0(Object o)
at FirstFloor.ModernUI.Presentation.RelayCommand.OnExecute(Object parameter)
at FirstFloor.ModernUI.Presentation.CommandBase.Execute(Object parameter)
at MS.Internal.Commands.CommandHelpers.CriticalExecuteCommandSource(ICommandSource commandSource, Boolean userInitiated)
at System.Windows.Controls.Primitives.ButtonBase.OnClick()
at System.Windows.Controls.Button.OnClick()
at System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp(MouseButtonEventArgs e)
at System.Windows.UIElement.OnMouseLeftButtonUpThunk(Object sender, MouseButtonEventArgs e)
at System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs rou
你应该贴出来使用这个窗口的的代码,这个窗口展现的时候有两种方式 一种是 .show() 一种是.showdialog() 你要是用了前者就会出这个问题。
string msgData = "";
Helper.frmMessage frm = new Helper.frmMessage(msgTitle, msg1, msg2, msgType, msgDetail);
bool? DialogResult = frm.ShowDialog();
msgData = frm.ReturnMsg;
return msgData;
我不觉得这个有什么问题
@愤青愤青: 还是有问题的
bool? DialogResult = frm.ShowDialog(); msgData = frm.ReturnMsg;
这两句话就有问题了,你可以尝试着把底下那句话先注释试试。
WPF 取值一般不这么取,先学些一下MVVM再进行WPF开发吧,这样方向就错了。
@Darren.Dai: 不行
@愤青愤青: 没有抨击的意思,大家都是做技术的,别想这么多,我是上班前,一行行帮你看代码解决问题的。
方便的话要不把源码发一份 我帮你调试一下吧。
@Darren.Dai:
WPF 自学的
以前一直做Winform
自学点MVVM 或者MVC
确实不懂
我猜应该是你继承ModernDialog的问题
对的,是继承了ModernDialog
问一下怎么解决呢?