C# ProgressDialogController mahapps,关闭弹出窗口时出现问题
我正在使用Mahapps Metro创建一个WPF项目 我的问题是,我将从DetailPage.xaml框架启动,该框架嵌入MainWindow.xaml中,mahapps提供了等待模式。 所以我用了两种方法打开和关闭,但最后他说这不再是对话。 有人有解决办法吗 框架中的我的代码C# ProgressDialogController mahapps,关闭弹出窗口时出现问题,c#,wpf,xaml,modal-dialog,mahapps.metro,C#,Wpf,Xaml,Modal Dialog,Mahapps.metro,我正在使用Mahapps Metro创建一个WPF项目 我的问题是,我将从DetailPage.xaml框架启动,该框架嵌入MainWindow.xaml中,mahapps提供了等待模式。 所以我用了两种方法打开和关闭,但最后他说这不再是对话。 有人有解决办法吗 框架中的我的代码DetailPage.xaml private void Meeting_Click(object sender, RoutedEventArgs e) { MainWindow w = (MainWindow)
DetailPage.xaml
private void Meeting_Click(object sender, RoutedEventArgs e)
{
MainWindow w = (MainWindow)App.Current.MainWindow;
w.showMessaggeAsyncFromMainWindow();
var MIDClick = sender as Button;
String MID = MIDClick.Tag as String;
...mycode...
w.closeMessaggeAsyncFromMainWindow();
}
public ProgressDialogController dialog;
public async Task showMessaggeAsyncFromMainWindow()
{
dialog = await this.ShowProgressAsync(Properties.strings.attendi, Properties.strings.aggiornamentoMeetingsInCorso, false) as ProgressDialogController;
}
public async Task closeMessaggeAsyncFromMainWindow()
{
await dialog.CloseAsync();
}
main window.xaml中的我的代码(MetroWindow)
我的错误:
这里的问题是,您正在执行一个“点火并忘记”(异步void
)。换句话说,您正在调用showmessaggeasyncfrommain窗口
,并在启动对话框
之前,在调用closeMessaggeasyncfrommain窗口
后重新启动
解决方案:
private async void Meeting_Click(object sender, RoutedEventArgs e)
{
MainWindow w = (MainWindow)App.Current.MainWindow;
await w.showMessaggeAsyncFromMainWindow();
var MIDClick = sender as Button;
String MID = MIDClick.Tag as String;
...mycode...
await w.closeMessaggeAsyncFromMainWindow();
}
main窗口中的代码。xaml
private void Meeting_Click(object sender, RoutedEventArgs e)
{
MainWindow w = (MainWindow)App.Current.MainWindow;
w.showMessaggeAsyncFromMainWindow();
var MIDClick = sender as Button;
String MID = MIDClick.Tag as String;
...mycode...
w.closeMessaggeAsyncFromMainWindow();
}
public ProgressDialogController dialog;
public async Task showMessaggeAsyncFromMainWindow()
{
dialog = await this.ShowProgressAsync(Properties.strings.attendi, Properties.strings.aggiornamentoMeetingsInCorso, false) as ProgressDialogController;
}
public async Task closeMessaggeAsyncFromMainWindow()
{
await dialog.CloseAsync();
}
有了这个解决方案,你就不会做一个“失火而忘记”的事情。您正在等待对话框以wait
打开和关闭
快乐编码:)这里的问题是你在做一个“点火并忘记”(异步void
)。换句话说,您正在调用showmessaggeasyncfrommain窗口
,并在启动对话框
之前,在调用closeMessaggeasyncfrommain窗口
后重新启动
解决方案:
private async void Meeting_Click(object sender, RoutedEventArgs e)
{
MainWindow w = (MainWindow)App.Current.MainWindow;
await w.showMessaggeAsyncFromMainWindow();
var MIDClick = sender as Button;
String MID = MIDClick.Tag as String;
...mycode...
await w.closeMessaggeAsyncFromMainWindow();
}
main窗口中的代码。xaml
private void Meeting_Click(object sender, RoutedEventArgs e)
{
MainWindow w = (MainWindow)App.Current.MainWindow;
w.showMessaggeAsyncFromMainWindow();
var MIDClick = sender as Button;
String MID = MIDClick.Tag as String;
...mycode...
w.closeMessaggeAsyncFromMainWindow();
}
public ProgressDialogController dialog;
public async Task showMessaggeAsyncFromMainWindow()
{
dialog = await this.ShowProgressAsync(Properties.strings.attendi, Properties.strings.aggiornamentoMeetingsInCorso, false) as ProgressDialogController;
}
public async Task closeMessaggeAsyncFromMainWindow()
{
await dialog.CloseAsync();
}
有了这个解决方案,你就不会做一个“失火而忘记”的事情。您正在等待对话框以wait
打开和关闭
快乐编码:)如果有人想使用对话框取消按钮关闭它
var settings = new MetroDialogSettings()
{
NegativeButtonText = "cancel",
DialogMessageFontSize = 25,
DialogTitleFontSize = 25,
DialogResultOnCancel = MessageDialogResult.Canceled,
};
ProgressDialogController controller =
await this.ShowProgressAsync("Title", "Message", true, settings);
controller.SetCancelable(true);
controller.Canceled += controller_Canceled;
//after your job
if(controller.IsOpen)
await controller.CloseAsync();
这是取消活动
private async void controller_Canceled(object sender, EventArgs e)
{
ProgressDialogController controller_ = (ProgressDialogController)sender;
await controller_.CloseAsync();
}
如果有人想使用对话框取消按钮关闭它
var settings = new MetroDialogSettings()
{
NegativeButtonText = "cancel",
DialogMessageFontSize = 25,
DialogTitleFontSize = 25,
DialogResultOnCancel = MessageDialogResult.Canceled,
};
ProgressDialogController controller =
await this.ShowProgressAsync("Title", "Message", true, settings);
controller.SetCancelable(true);
controller.Canceled += controller_Canceled;
//after your job
if(controller.IsOpen)
await controller.CloseAsync();
这是取消活动
private async void controller_Canceled(object sender, EventArgs e)
{
ProgressDialogController controller_ = (ProgressDialogController)sender;
await controller_.CloseAsync();
}