MAUI 10.0.120: BlazorWebView наконец принимает перетаскивание файлов в Windows и перетаскивание изображений в Android
.NET MAUI 10.0.120 включает AllowDrop для BlazorWebView в Windows и регистрирует AndroidX DropDataContentProvider в Android, поэтому зоны drop в Blazor Hybrid работают без платформенного кода. Что изменилось, новый переключатель MauiEnableAndroidWebViewDragDrop и предупреждение MAUI1002.
.NET MAUI 10.0.120 вышел 21 октября 2026 года и содержит 213 коммитов. Большая часть из них это исправления, но два изменения в BlazorWebView убирают обходной путь, который тащит за собой каждое приложение Blazor Hybrid с областью “перетащите сюда файлы” начиная с .NET 6: файл, перетащенный из Проводника на BlazorWebView в Windows, теперь доходит до вашей HTML-цели для drop, а перетаскивание изображений внутри BlazorWebView в Android теперь создаёт настоящие данные перетаскивания.
Windows: AllowDrop теперь включён по умолчанию
До сих пор обработчик Windows создавал WinUI WebView2 с AllowDrop, оставленным в false. DOM никогда не получал событие drop для файлов, приходящих извне приложения, поэтому зона drop в Blazor, которая работала в браузере, в десктопной сборке молча ничего не делала. Обычным решением было собственное сопоставление в обработчике. PR #37904 меняет BlazorWebViewHandler.CreatePlatformView так:
protected override WebView2Control CreatePlatformView()
{
return new WebView2Control
{
AllowDrop = true,
};
}
Это значит, что обычный InputFile, растянутый на область drop, теперь работает в Windows без единой строки платформенного кода:
<div class="dropzone">
<InputFile OnChange="OnFilesDropped" multiple />
<p>Drop files here</p>
</div>
@code {
async Task OnFilesDropped(InputFileChangeEventArgs e)
{
foreach (var file in e.GetMultipleFiles(maxAllowedFiles: 10))
{
await using var stream = file.OpenReadStream(maxAllowedSize: 20 * 1024 * 1024);
// save or process the stream
}
}
}
Если вы писали mapper, который сам выставлял AllowDrop = true, после обновления его можно удалить. Одно ограничение остаётся: нативное перетаскивание элементов и изображений внутри страницы в Windows по-прежнему не работает с текущей зависимостью MAUI от Windows App SDK 1.8. Автор PR проверил Windows App SDK 2.0.1 и обнаружил, что эти сценарии начинают работать там, как только включён AllowDrop, так что этот параметр также служит заделом для такого перехода.
Android: DropDataContentProvider регистрируется за вас
В Android перетаскивание <img> в BlazorWebView вызывало события drag в DOM, но не несло пригодных данных изображения. Для этого Android WebView требует, чтобы в манифесте был объявлен DropDataContentProvider из AndroidX WebKit. PR #37975 делает так, что Microsoft.AspNetCore.Components.WebView.Maui для целей Android зависит от Xamarin.AndroidX.WebKit 1.16.0.1 и сливает этот provider в ваш манифест через AndroidManifestOverlay:
<provider
android:name="androidx.webkit.DropDataContentProvider"
android:authorities="${applicationId}.DropDataProvider"
android:exported="false"
android:grantUriPermissions="true" />
Если в вашем приложении уже объявлен тот же provider, две записи сольются в одну. Если вы объявляете его с другой конфигурацией, отключите автоматическую регистрацию:
<PropertyGroup>
<MauiEnableAndroidWebViewDragDrop>false</MauiEnableAndroidWebViewDragDrop>
</PropertyGroup>
Это свойство управляет только записью в манифесте. Ссылка на пакет Xamarin.AndroidX.WebKit остаётся в любом случае.
Обратите внимание на MAUI1002
Проекты, в которых по-прежнему задано <AndroidManifestMerger>legacy</AndroidManifestMerger>, теперь увидят предупреждение MAUI1002, потому что устаревший merger игнорирует элементы AndroidManifestOverlay, и provider никогда не попадает в манифест. Либо переключитесь на manifestmerger.jar (значение по умолчанию), либо установите MauiEnableAndroidWebViewDragDrop в false и объявите provider в Platforms/Android/AndroidManifest.xml самостоятельно. Если вы собираете с предупреждениями как ошибками, это единственная строка в 10.0.120, которая может сломать ваш CI.
Обновление
Поднимите Microsoft.Maui.Controls и Microsoft.AspNetCore.Components.WebView.Maui до 10.0.120, оба уже есть в NuGet. Тот же релиз также продолжает очистку утечек, о которой я писал в посте про 10.0.110, включая утечку BlazorWebView в iOS, при которой DisconnectHandlers() никогда не доходил до страниц внутри Shell.
Comments
Sign in with GitHub to comment. Reactions and replies thread back to the comments repo.