繁体   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