Xamarin Forms ListView в ScrollView - Android отключить прокрутку в списке - PullRequest
0 голосов
/ 19 июня 2020

Я столкнулся с проблемой при использовании ListView внутри Scrollview в Android (через Xamarin Forms).

Я вычисляю высоту списка на основе источника элемента и высоты строки, но я все еще могу прокрутка внутри списка:

enter image description here

Список - это белая область, содержащаяся в scrollview, с несколькими ярлыками ниже, поэтому мы можем прокручивать:

enter image description here

Но в Android мы также можем прокручивать внутри самого списка:

enter image description here

Я пытался поймать событие перемещения в пользовательском рендерере:

public class CustomListViewRenderer : ListViewRenderer
{
    public CustomListViewRenderer(Context context) : base(context)
    {
    }

    protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.ListView> e)
    {
        base.OnElementChanged(e);

        var customListView = Element as CustomListView;
        if (customListView == null)
        {
            return;
        }

        if (customListView.IsScrollingEnable == false)
        {
            Control.Touch += ListView_Touch;
        }
    }

    private void ListView_Touch(object sender, TouchEventArgs e)
    {
        if (e.Event.Action == MotionEventActions.Move)
        {
            e.Handled = true;
        }
        else
        {
            e.Handled = false;
        }
    }
}

Это может решить проблему с пространством, но если пользователь прокручивает область просмотра с помощью касания, глобальный просмотр прокрутки не работает (вы можно прокручивать только касанием из области Aqua Blue).

Есть ли способ отключить прокрутку в списке, не затрагивая родительский режим прокрутки? Ссылка на образец проекта для воспроизведения проблемы: https://1drv.ms/u/s! An8JKHwJo47up2ss_6pdzlXOhtDz? E = GdXrbf

1 Ответ

1 голос
/ 22 июня 2020

Как сказал Джейсон, вы можете использовать Listview напрямую.

С вашим кодом вы можете установить setScrollContainer в false в пользовательском рендерере.

 protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.ListView> e)
    {
        base.OnElementChanged(e);

        if (e.NewElement == null)
            return;

        if (Control != null)
        {
            Control.SetScrollContainer(false);
        }
    }

введите описание изображения здесь

...