Я переношу проект Xamarin с UWP в проект .NET MAUI с WinUI 3. В моем проекте Xamarin я использовал Acr.UserDialogs.IProgressDialog и Acr.UserDialogs.UserDialogs.Instance.Alert для отображения диалоговых окон и оповещений о ходе выполнения. Поскольку Acr.UserDialogs не поддерживает платформы за пределами Android, iOS и UWP, мне нужно найти эквивалентное решение в MAUI с WinUI 3.
Вот мой текущий код UWP:
использование Acr.UserDialogs;
общедоступный класс ImportDataForWin: IImportDataForWin { частный прогресс IProgressDialog;
public async Task ImportData()
{
var picker = new Windows.Storage.Pickers.FileOpenPicker
{
ViewMode = Windows.Storage.Pickers.PickerViewMode.Thumbnail,
SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.PicturesLibrary
};
picker.FileTypeFilter.Add(".xlsx");
picker.FileTypeFilter.Add(".xls");
var file = await picker.PickSingleFileAsync();
if (file != null)
{
var config = new ProgressDialogConfig()
.SetTitle("Importing Data")
.SetIsDeterministic(false);
progress = UserDialogs.Instance.Progress(config);
progress.PercentComplete = 0;
progress.Show();
// Some code
var countMax = itemsToAdd.Count();
var rowCount = 0;
foreach (var item in itemsToAdd)
{
rowCount++;
await SaveData(item);
progress.PercentComplete = (rowCount * 100) / countMax;
}
progress.Hide();
UserDialogs.Instance.Alert("errorMessage");
}
}
}
Как я могу добиться аналогичной функциональности в MAUI с WinUI 3?
В частности, мне нужна помощь в:
Отображение диалога хода выполнения во время импорта данных. Отображение диалогового окна предупреждения, когда импорт завершен или возникла ошибка.
Будем очень признательны за любые рекомендации или примеры кода.
Да, я рассматривал возможность использования всплывающих окон в MAUI, но не совсем уверен, как их реализовать для отображения диалоговых окон и предупреждений о ходе выполнения. Не могли бы вы привести пример или указать мне на некоторые ресурсы, демонстрирующие, как использовать всплывающие окна для этой цели в проекте MAUI с WinUI 3?
Я привел пример кода в своем ответе. Вы можете это проверить.
Индикатор выполнения Мауи (с использованием):
https://learn.microsoft.com/en-us/dotnet/api/microsoft.maui.controls.progressbar?view=net-maui-8.0
Всплывающие окна Мауи («оповещения»; действия; подсказки):
https://learn.microsoft.com/en-us/dotnet/maui/user-interface/pop-ups?view=net-maui-8.0
Я создал образец отображения индикатора выполнения во всплывающем окне:
Код в xaml:
toolkit:Popup xmlns = "http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x = "http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:toolkit = "http://schemas.microsoft.com/dotnet/2022/maui/toolkit"
x:Class = "MauiApp1.PopupTest">
<VerticalStackLayout HeightRequest = "100" WidthRequest = "200">
<ProgressBar HeightRequest = "50" Progress = "{Binding Progress}" VerticalOptions = "Center" ProgressColor = "Red"/>
</VerticalStackLayout>
</toolkit:Popup>
Код всплывающего окна в классе:
public partial class PopupTest : Popup, INotifyPropertyChanged
{
private double progress;
public event PropertyChangedEventHandler PropertyChanged;
public double Progress
{
get => progress;
set
{
if (progress != value)
{
progress = value;
OnPropertyChanged(); // reports this property
}
}
}
public PopupTest()
{
InitializeComponent();
BindingContext = this;
}
public void OnPropertyChanged([CallerMemberName] string name = "") =>
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
}
И отобразите его на странице содержимого:
var popup = new PopupTest();
this.ShowPopup(popup);
Для получения дополнительной информации вы можете обратиться к официальной ссылке на документ, предоставленной мной и Джерри Шмитцем.
Вы проверили всплывающее окно для Мауи?