Повторное использование эффектов в .NET MAUI
Хотя существует множество преимуществ для использования обработчиков многоплатформенного пользовательского интерфейса приложений .NET (.NET MAUI) для настройки элементов управления, в приложениях .NET MAUI по-прежнему можно использовать эффекты Xamarin.Forms. Дополнительные сведения о эффектах см. в статье о эффектах Xamarin.Forms.
Процесс переноса эффекта Xamarin.Forms в .NET MAUI состоит в том, чтобы:
- Удалите атрибуты эффекта из классов эффектов. Дополнительные сведения см. в разделе "Удалить атрибуты эффекта".
- Удалите директивы эффекта
using
. Дополнительные сведения см. в разделе "Удалить с помощью директив". - Добавьте код эффекта в соответствующее расположение в проекте приложения .NET MAUI. Дополнительные сведения см. в разделе "Добавление кода эффекта".
- Зарегистрируйте эффект. Дополнительные сведения см. в разделе "Регистрация эффекта".
- Использование эффекта .NET MAUI. Дополнительные сведения см. в разделе "Использование эффекта".
Удаление атрибутов эффекта
Все ResolutionGroupNameAttribute
и ExportEffectAttribute
атрибуты должны быть удалены из классов эффектов.
Удаление директив using
Все ссылки на Xamarin.Forms
пространства имен и Xamarin.Forms.Platform.*
пространства имен должны быть удалены из классов эффектов.
Добавление кода эффекта
Если вы используете многоцелевой проект .NET MAUI, код эффекта должен объединяться в один файл и размещаться за пределами папки Platform . Для этого необходимо объединить RoutingEffect реализацию и PlatformEffect реализацию в один файл, используя условную компиляцию по коду платформы. Однако если решение имеет отдельные проекты на платформу, то следует переместить файлы эффектов для конкретной платформы в соответствующие проекты.
В .NET MAUI RoutingEffect класс находится в Microsoft.Maui.Controls
пространстве имен. Это пространство имен является одной из неявных global using
директив MAUI .NET, поэтому вам не нужно добавлять директиву для нее using
. PlatformEffect Однако класс находится в Microsoft.Maui.Controls.Platform
пространстве имен, для которого необходимо добавить директивуusing
.
В следующем примере кода показаны FocusRoutingEffect
класс и его реализации платформы, объединенные в один файл:
using Microsoft.Maui.Controls.Platform;
namespace MyMauiApp.Effects;
internal class FocusRoutingEffect : RoutingEffect
{
}
#if ANDROID
internal class FocusPlatformEffect : PlatformEffect
{
protected override void OnAttached()
{
// Customize the control here
}
protected override void OnDetached()
{
// Cleanup the control customization here
}
}
#elif IOS
internal class FocusPlatformEffect : PlatformEffect
{
protected override void OnAttached()
{
// Customize the control here
}
protected override void OnDetached()
{
// Cleanup the control customization here
}
}
#elif WINDOWS
internal class FocusPlatformEffect : PlatformEffect
{
protected override void OnAttached()
{
// Customize the control here
}
protected override void OnDetached()
{
// Cleanup the control customization here
}
}
#endif
Регистрация эффекта
В проекте приложения .NET MAUI откройте MauiProgram.cs и вызовите ConfigureEffects метод объекта MauiAppBuilder в методе CreateMauiApp
:
public static MauiApp CreateMauiApp()
{
var builder = MauiApp.CreateBuilder();
builder
.UseMauiApp<App>()
.ConfigureEffects(effects =>
{
effects.Add<FocusRoutingEffect, FocusPlatformEffect>();
});
return builder.Build();
}
Эффект регистрируется в методе ConfigureEffects , который configureDelegate
регистрирует PlatformEffect реализацию в своей RoutingEffect реализации.
Использование эффекта
Эффект можно использовать в приложении .NET MAUI, добавив его в Effects коллекцию элемента управления:
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:MyMauiApp.Effects"
x:Class="MyMauiApp.MainPage">
<VerticalStackLayout>
<Entry Text="Enter your text">
<Entry.Effects>
<local:FocusRoutingEffect />
</Entry.Effects>
</Entry>
</VerticalStackLayout>
</ContentPage>