Прокрутка по горизонтали в Xamarin.Forms ScrollView

Я использую Xamarin.Forms и создал ScrollView, который содержит горизонтальный StackLayout. Я хочу иметь возможность прокручивать по горизонтали, поэтому я установил:

Orientation  = ScrollOrientation.Horizontal;

Но у меня нет горизонтальной прокрутки. Содержимое StackLayout шире экрана, и я вижу, что содержимое обрезается по краю.

Как добиться горизонтальной прокрутки с помощью Xamarin.Forms?


person driis    schedule 24.06.2014    source источник
comment
Можете ли вы опубликовать свой код для создания ScrollView и настройки его содержимого с помощью StackLayout?   -  person Pedro    schedule 24.06.2014


Ответы (3)


Вот как я заставил это работать

      var scrollView = ScrollView
        {
            HorizontalOptions = LayoutOptions.Fill,
            Orientation = ScrollOrientation.Horizontal,

            Content = new StackLayout{
               Orientation = StackOrientation.Horizontal,
               Children = {}
            }
        };
person lee    schedule 25.07.2014
comment
Действительно, у нас должно быть Orientation = ScrollOrientation.Horizontal в StackLayout. Спасибо. - person Barton; 06.12.2014
comment
У меня такая же проблема, но я программно добавляю дочерние элементы stacklayout. и ниже ответ не работает для меня! - person Alireza Akbari; 03.07.2017
comment
Я думаю, что ключ: Orientation = ScrollOrientation.Horizontal. Конечно, вы должны установить HorizontalOptions на Fill или FillAndExpand. Но если вы не установите Orientation = ScrollOrientation.Horizontal, горизонтальная полоса прокрутки не отображается - person peter70; 26.11.2019

Этот пакет nuget будет работать:

https://github.com/SuavePirate/DynamicStackLayout

Свойство Words представляет собой список строк:

    <ScrollView Orientation="Horizontal" HorizontalOptions="FillAndExpand">
        <dynamicStackLayout:DynamicStackLayout ItemsSource="{Binding Words}" HorizontalOptions="Fill" Orientation="Horizontal" Padding="10, -0, 50, 10">
            <dynamicStackLayout:DynamicStackLayout.ItemTemplate>
                <DataTemplate>
                    <StackLayout BackgroundColor="Gray" WidthRequest="80" HeightRequest="80">
                        <Label Text="{Binding .}" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand" VerticalTextAlignment="Center" HorizontalTextAlignment="Center" />
                    </StackLayout>
                </DataTemplate>
            </dynamicStackLayout:DynamicStackLayout.ItemTemplate>
        </dynamicStackLayout:DynamicStackLayout>
    </ScrollView>

Я надеюсь, что это помогает :)

person Ricardo de Assuncao Goncalves    schedule 27.05.2018

Если вы используете шаблоны в Visual Studio 2013 для приложений Xamarin, версия Xamarin.Forms немного устарела и не поддерживает прокрутку. Чтобы исправить это, просто введите 'update-package' и этот код

public class MainPage : ContentPage
{
    public MainPage()
    {
        Label label = new Label {
            Text = "This is a very long label which I expect to scroll horizontally because it's in a ScrollView.",
            Font = Font.SystemFontOfSize(24),
        };

        this.Content = new ScrollView {
            Content = label,
            Orientation = ScrollOrientation.Horizontal, 
        };
    }
}

код будет нормально работать на android.

Для iOS код будет работать должным образом.

К сожалению, на данный момент для WP8 есть ошибка, и хитрость заключается в добавлении настраиваемого средства визуализации.

using System.Windows.Controls;
using App2.WinPhone;
using Xamarin.Forms;
using Xamarin.Forms.Platform.WinPhone;

[assembly: ExportRenderer(typeof(ScrollView), typeof(FixedSVRenderer))]

namespace App2.WinPhone
{
    public sealed class FixedSVRenderer : ScrollViewRenderer
    {
        protected override void OnModelSet()
        {
            base.OnModelSet();

            if (Model.Orientation == ScrollOrientation.Horizontal)
            {
                // Enable horiz-scrolling
                Control.HorizontalScrollBarVisibility = ScrollBarVisibility.Auto;
            }
        }
    }
}
person Stefan Turcanu    schedule 25.11.2014