Я конвертирую свое приложение Xamarin Forms в .NET MAUI.
Я пытаюсь перенести пользовательский рендерер из Xamarin в MAUI по этой ссылке Использование пользовательских рендереров в .NET MAUI
Вот мой код:
public static MauiApp CreateMauiApp()
{
var builder = MauiApp.CreateBuilder();
builder
.UseMauiApp<App>()
.UseMauiCompatibility()
.ConfigureMauiHandlers(handlers =>
{
handlers.AddCompatibilityRenderer(typeof(CustomFrame), typeof(CustomShadowFrameRenderer));
});
return builder.Build();
}
Пользовательский кадр:
public class CustomFrame : Frame
{
public CustomFrame()
{
}
}
Ниже приведен класс пользовательского рендерера.
public class CustomShadowFrameRenderer : FrameRenderer
{
public CustomShadowFrameRenderer(Context context) : base(context)
{
}
protected override void OnElementChanged(ElementChangedEventArgs<Frame> e)
{
base.OnElementChanged(e);
if (e.NewElement != null && e.OldElement == null)
{
e.NewElement.HeightRequest = 1000;
e.NewElement.VerticalOptions = LayoutOptions.FillAndExpand;
}
}
<ContentPage xmlns = "http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x = "http://schemas.microsoft.com/winfx/2009/xaml"
x:Class = "MauiApp1.MainPage" BackgroundColor = "Red"
xmlns:local = "clr-namespace:MauiApp1.Controls">
<local:CustomFrame BackgroundColor = "Blue" HeightRequest = "1000" Padding = "20">
<VerticalStackLayout
Spacing = "25"
Padding = "30,0"
VerticalOptions = "Center">
<Label
Text = "Hello, World!"
SemanticProperties.HeadingLevel = "Level1"
FontSize = "32"
HorizontalOptions = "Center" />
<Label
Text = "Welcome to .NET Multi-platform App UI"
SemanticProperties.HeadingLevel = "Level2"
SemanticProperties.Description = "Welcome to dot net Multi platform App U I"
FontSize = "18"
HorizontalOptions = "Center" />
<Button
x:Name = "CounterBtn"
Text = "Click me"
SemanticProperties.Hint = "Counts the number of times you click"
Clicked = "OnCounterClicked"
HorizontalOptions = "Center" />
</VerticalStackLayout>
</local:CustomFrame>
</ContentPage>
Фрейм не принимает запрос высоты в MAUI, но то же самое отлично работает в формах Xamarin.
Ниже изображение для того же
Я создал образец для проверки вашего кода и столкнулся с той же проблемой. Кроме того, я даже не могу нажать кнопку в CustomFrmae. Кажется, есть некоторые проблемы совместимости с FrameRender в maui.
Поэтому я пытаюсь изменить CustomRender на CustomHandler. Это сработало хорошо, и вам просто нужно изменить двухзначный код.
public class CustomShadowFrameRenderer : Microsoft.Maui.Controls.Handlers.Compatibility.FrameRenderer
var builder = MauiApp.CreateBuilder();
builder
.UseMauiApp<App>()
.ConfigureMauiHandlers(handlers =>
{
handlers.AddHandler(typeof(CustomFrame), typeof(CustomShadowFrameRenderer));
})
Я не знаю, почему это не работает, но есть ли причина не устанавливать эти свойства элемента в коде пользовательского фрейма? Кроме того, рассмотрите возможность перехода с фрейма на элемент
Border
Мауи.