Alle sichtbaren Metro-Dialoge ausblenden, bevor ein anderer angezeigt wird
Ich benutze MahApps.Metro in meinem WPF-Projekt, und ich erstelle eine Klasse, die mir hilft, @ zu zeig Dialoge. Ich würde gerne wissen, ob es eine Möglichkeit gibt, alle sichtbaren Dialogfelder zu schließen, bevor ein anderes angezeigt wird.
Manchmal, wenn ich ein @ zeiProgressDialog
und dann einMessageDialog
Der ProgressDialog wird nicht korrekt geschlossen und bleibt im Hintergrund. Wenn ich den MessageDialog schließe, bleibt er dort und friert die Benutzeroberfläche ein.
So versuche ich derzeit, alle Dialoge auszublenden:
public static async void HideVisibleDialogs(MetroWindow parent)
{
BaseMetroDialog dialogBeingShow = await parent.GetCurrentDialogAsync<BaseMetroDialog>();
while (dialogBeingShow != null)
{
await parent.HideMetroDialogAsync(dialogBeingShow);
dialogBeingShow = await parent.GetCurrentDialogAsync<BaseMetroDialog>();
}
}
Ich nenne es so:
public static MessageDialogResult ShowMessage(String title, String message, MetroWindow parent, Int32 timeout, MessageDialogStyle style, MetroDialogSettings settings, MessageDialogResult defaultResult)
{
AutoResetEvent arEvent = new AutoResetEvent(false);
App.Current.Dispatcher.Invoke(() =>
{
HideVisibleDialogs(parent);
arEvent.Set();
});
arEvent.WaitOne();
[Rest of method]
}
Jede Hilfe wird gebeten. Vielen Dank
@BEARBEITE
Anscheinend scheint das Problem gelöst zu sein, dankThomas Freudenberg
So ist es jetzt:
public static Task HideVisibleDialogs(MetroWindow parent)
{
return Task.Run(async () =>
{
await parent.Dispatcher.Invoke(async () =>
{
BaseMetroDialog dialogBeingShow = await parent.GetCurrentDialogAsync<BaseMetroDialog>();
while (dialogBeingShow != null)
{
await parent.HideMetroDialogAsync(dialogBeingShow);
dialogBeingShow = await parent.GetCurrentDialogAsync<BaseMetroDialog>();
}
});
});
}
Und ich nenne es so:
HideVisibleDialogs(parent).Wait();