Добавьте индикаторы для горизонтальной прокрутки в Xamarin - PullRequest
0 голосов
/ 24 января 2020

У меня есть следующая горизонтальная прокрутка

<ScrollView HorizontalOptions="FillAndExpand" Padding="0" Orientation="Horizontal" HorizontalScrollBarVisibility="Never">
    <ContentView Content="{Binding DocumentTypeContent}"/>
</ScrollView>

Но я хочу, чтобы при увеличении содержания справа была стрелка, указывающая на отображение справа, а когда слева осталось больше содержимого, я ' То же самое будет направлено влево, поэтому, например, стрелка вправо всегда должна отображаться, если пользователь не прокрутил вправо до упора, а стрелка влево - наоборот. Как я могу определить, когда прокрутки расположены полностью влево или полностью вправо для отображения изображения?

Ответы [ 2 ]

1 голос
/ 24 января 2020

Вы можете определить, нажимаете ли вы прокрутку до конца или начинаете так:

 <ScrollView HorizontalOptions="FillAndExpand" Padding="0" Orientation="Horizontal" HorizontalScrollBarVisibility="Never" Scrolled="ScrollView_Scrolled">    

И ваш код:

 private void ScrollView_Scrolled(object sender, ScrolledEventArgs e)
 {
        double scroll = (sender as ScrollView).ContentSize.Width - (sender as ScrollView).Width;
        if (scroll <= e.ScrollX)
        {
            right_button.IsEnabled = false;
        }
        else
        {
            right_button.IsEnabled = true;
        }

        if (e.ScrollX == 0)
        {
            left_button.IsEnabled = false;
        }
        else
        {
            left_button.IsEnabled = true;
        }

}
1 голос
/ 24 января 2020

Вы можете попробовать использовать конвертер в этой ситуации

   <ContentPage
   ...
   xmlns:Helpers="clr-namespace:YOURNAMESPACE">

<ScrollView HorizontalOptions="FillAndExpand" Padding="0" Orientation="Horizontal" HorizontalScrollBarVisibility="{Binding NUMBEROFITENS,Converter={Helpers:IsBarVisible}}">
    <ContentView Content="{Binding DocumentTypeContent}"/>
</ScrollView>

IsBarVisible.cs

public class IsBarVisible : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {

        return (int)value > 3 ? "Always" : "Never";
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return value;
    }
}
...