Пользовательская рамка не принимает запрос высоты в MAUI

Я конвертирую свое приложение 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.

Ниже изображение для того же

Я не знаю, почему это не работает, но есть ли причина не устанавливать эти свойства элемента в коде пользовательского фрейма? Кроме того, рассмотрите возможность перехода с фрейма на элемент Border Мауи.

ToolmakerSteve 23.11.2022 18:38
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
92
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я создал образец для проверки вашего кода и столкнулся с той же проблемой. Кроме того, я даже не могу нажать кнопку в CustomFrmae. Кажется, есть некоторые проблемы совместимости с FrameRender в maui.

Поэтому я пытаюсь изменить CustomRender на CustomHandler. Это сработало хорошо, и вам просто нужно изменить двухзначный код.

  1. В классе CustomShadowFrameRenderer сделайте его таким, как public class CustomShadowFrameRenderer : Microsoft.Maui.Controls.Handlers.Compatibility.FrameRenderer
  2. В MauiProgram.cs:
var builder = MauiApp.CreateBuilder();
            builder
             .UseMauiApp<App>()
             .ConfigureMauiHandlers(handlers =>
             {
                  handlers.AddHandler(typeof(CustomFrame), typeof(CustomShadowFrameRenderer));        
             })

Другие вопросы по теме