Имейте этот код. Проблема, с которой я сталкиваюсь, заключается в том, что я не могу определить текст и рамку для настройки при изменении размера экрана.
<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>
Текст не обтекает, не скругляет края при изменении размера
Я хочу, чтобы текст переносился на следующие строки, а фон имел одинаковые круглые края с обеих сторон.
Поскольку я изменяю размер экрана вручную, Label
внутри Frame
размер может изменяться автоматически Обтекание текстом. Возможно, вам потребуется обновить Visual Studio до последней версии, чтобы проверить, работает ли она.
Я действительно не знаю, почему 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.
Новый контроль границы рекомендуется и предпочтительнее фрейма, который является устаревшим.
FWIW: "Вам следует использовать...": Делая рекомендацию, скажите, почему - в чем польза? Когда это имеет значение? (В этом случае в документах говорится, что эти варианты «более производительны», чем общий StackLayout.)
@ToolmakerSteve спасибо, я добавил это. Прошлой ночью было поздно, и мне было лень искать URL-адрес документации, лол.
Как вы "меняете размер экрана"? Это действие пользователя или программа? Если программный, добавьте этот код в вопрос. ScrollView имеет
ContentSize
, который необходимо программно установить при изменении размера экрана. Чтобы дать ответ, нужно больше подробностей о ситуации.