.Net MAUI Xaml — настройка текста и рамки при изменении размера

Имейте этот код. Проблема, с которой я сталкиваюсь, заключается в том, что я не могу определить текст и рамку для настройки при изменении размера экрана.

<ScrollView>
    <StackLayout>
        <!-- First block of text -->
        <Frame BackgroundColor = "LightBlue" Padding = "10" Margin = "10">
            <Label LineBreakMode = "WordWrap"  Text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor." />
        </Frame>

        <!-- Second block of text -->
        <Frame BackgroundColor = "LightGreen" Padding = "10" Margin = "10">
            <Label LineBreakMode = "WordWrap"  Text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor." />
        </Frame>

        <!-- Third block of text -->
        <Frame BackgroundColor = "LightPink" Padding = "10" Margin = "10">
            <Label LineBreakMode = "WordWrap"  Text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor." />
        </Frame>

        <!-- More blocks of text... -->
    </StackLayout>
</ScrollView>

Текст не обтекает, не скругляет края при изменении размера

Я хочу, чтобы текст переносился на следующие строки, а фон имел одинаковые круглые края с обеих сторон.

Как вы "меняете размер экрана"? Это действие пользователя или программа? Если программный, добавьте этот код в вопрос. ScrollView имеет ContentSize, который необходимо программно установить при изменении размера экрана. Чтобы дать ответ, нужно больше подробностей о ситуации.

ToolmakerSteve 18.04.2023 20:20

Поскольку я изменяю размер экрана вручную, Label внутри Frame размер может изменяться автоматически Обтекание текстом. Возможно, вам потребуется обновить Visual Studio до последней версии, чтобы проверить, работает ли она.

Alexandar May - MSFT 19.04.2023 04:53
Стоит ли изучать 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 называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
2
250
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Я действительно не знаю, почему Frame действует таким образом, но переключение Frame на Border работает для меня:

<!-- First block of text -->
<Border BackgroundColor = "LightBlue" Padding = "10" Margin = "10" >
    <Border.StrokeShape>
        <RoundRectangle CornerRadius = "10" />
    </Border.StrokeShape>
                
    <Label LineBreakMode = "WordWrap"  Text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor." />
</Border>

См. https://stackoverflow.com/a/71739057/653457 , по-видимому, Border в любом случае является улучшением Frame. Также согласно документации по фрейму:

Класс Frame существует в Xamarin.Forms и присутствует в .NET MAUI для пользователей, которые переносят свои приложения с Xamarin.Forms на .NET MAUI. Если вы создаете новое приложение .NET MAUI, вместо этого рекомендуется использовать Border и задавать тени с помощью привязываемого свойства Shadow в VisualElement. Дополнительные сведения см. в разделе Граница и тень.


Также не в вашем вопросе, но вы должны использовать VerticalStackLayout (или горизонтальную версию) вместо StackLayout для MAUI.

Пользовательский интерфейс многоплатформенного приложения .NET (.NET MAUI) VerticalStackLayout организует дочерние представления в одномерном вертикальном стеке и является более производительной альтернативой StackLayout.

Новый контроль границы рекомендуется и предпочтительнее фрейма, который является устаревшим.

Julian 18.04.2023 20:23

FWIW: "Вам следует использовать...": Делая рекомендацию, скажите, почему - в чем польза? Когда это имеет значение? (В этом случае в документах говорится, что эти варианты «более производительны», чем общий StackLayout.)

ToolmakerSteve 18.04.2023 20:28

@ToolmakerSteve спасибо, я добавил это. Прошлой ночью было поздно, и мне было лень искать URL-адрес документации, лол.

Luke Vo 19.04.2023 06:13

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