Если вы используете ScollView
, есть событие Scrolled
, которое возникает при прокрутке представления, а ScrolledEventArgs
содержит свойства ScrollX
и ScrollY
, которые позволяют вам узнать, где находится ScrollView
в настоящее времяЕсли вы сравните ScrollY
с высотой ContentSize
свойства ScrollView
, например:
XAML:
<StackLayout>
<ScrollView x:Name="scrollView" Scrolled="Handle_Scrolled">
<StackLayout>
<Label Text="{Binding Article}" HorizontalOptions="StartAndExpand" VerticalOptions="StartAndExpand" />
</StackLayout>
</ScrollView>
<Entry IsVisible="{Binding AtEnd}" Placeholder="End reached!" />
</StackLayout>
Код позади (MainPage
является ContentPage
подкласс):
string _article;
public string Article
{
get
{
return _article;
}
set
{
if (_article != value)
{
_article = value;
OnPropertyChanged("Article");
}
}
}
bool atEnd;
public bool AtEnd
{
get
{
return atEnd;
}
set
{
if (atEnd != value)
{
atEnd = value;
OnPropertyChanged("AtEnd");
}
}
}
public MainPage()
{
Article = "<put in enough text here to force scrolling>";
AtEnd = false;
InitializeComponent();
BindingContext = this;
}
void Handle_Scrolled(object sender, Xamarin.Forms.ScrolledEventArgs e)
{
if (e.ScrollY + scrollView.Height >= scrollView.ContentSize.Height)
AtEnd = true;
else
AtEnd = false;
}
Тем не менее, почему бы просто не поместить запись под статьей, используя тот же вид прокрутки?Я просто помещаю элемент Entry
после Label
выше в тот же StackLayout
, и запись всегда будет там в конце всегда, но пользователь не увидит его, пока не прокрутит вниз.Кажется, это было бы более простым решением.Конечно, вы не можете использовать Label
, но то же самое применимо, просто поместите Entry
внизу макета, который ScrollView
прокручивает.