[英]ProgressDialogController mahapps, problems closing popup
我正在使用 Mahapps Metro 創建一個 WPF 項目。
我的問題是我將從 DetailPage.xaml 框架啟動,它嵌入在 MainWindow.xaml 中,等待模式 mahapps 提供。 所以我做了兩種打開和關閉的方法,但最后他說那不再是對話框。 有沒有人有解決方案?
我在框架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();
}
我在MainWindow.xaml
代碼(MetroWindow)
public ProgressDialogController dialog;
public async void showMessaggeAsyncFromMainWindow()
{
dialog = await this.ShowProgressAsync(Properties.strings.attendi, Properties.strings.aggiornamentoMeetingsInCorso, false) as ProgressDialogController;
}
public async void closeMessaggeAsyncFromMainWindow()
{
await dialog.CloseAsync();
}
我的錯誤:
這里的問題是您正在執行“即發即棄”( async void
)。 換句話說,您在啟動dialog
之前調用closeMessaggeAsyncFromMainWindow
之后調用showMessaggeAsyncFromMainWindow
和 rigth。
解決方案 :
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();
}
MainWindow.xaml
的代碼
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();
}
使用此解決方案,您不會執行“即發即忘”。 您正在等待對話框使用await
打開和關閉。
快樂編碼:)
如果有人想使用對話框取消按鈕關閉它
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();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.