簡體   English   中英

ProgressDialogController mahapps,關閉彈出窗口的問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM