C# ProgressDialogController 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)

我正在使用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();
}
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();
    }