向下滚动提示到 Xamarin 中的 ScrollView
Scroll Down Prompt to ScrollView in Xamarin
我想在我的 Xamarin 应用程序中向 ScrollView 添加向下滚动提示,为此我遵循了这个 article .
它实际上做的是它在Scrollview之外添加了一个向下滚动指示器(Label),所以如果文本超过它显示此指示的页面大小,写为“向下滚动查看更多!”,当完全滚动到末尾时,它会隐藏此指示。
这部分工作正常,但如果文本少于页面,它仍然显示向下滚动指示器。
我想如果文本小于页面,向下滚动指示器的可见性应该是 false。
.xaml
<Grid>
<ScrollView x:Name="MyScrollView" Scrolled="MyScrollView_Scrolled">
<StackLayout>
<BoxView BackgroundColor="Red" HeightRequest="128"/>
<BoxView BackgroundColor="Orange" HeightRequest="128"/>
</StackLayout>
</ScrollView>
<Label x:Name="ScrollDownIndicator"
Text="Scroll down for more!"
BackgroundColor="Black"
TextColor="White"
FontSize="Large"
HorizontalTextAlignment="Center"
VerticalOptions="End"/>
</Grid>
.xaml.cs
private void MyScrollView_Scrolled(object sender, ScrolledEventArgs e)
{
double spaceAvailableForScrolling = MyScrollView.ContentSize.Height - MyScrollView.Height;
double buffer = 32;
ScrollDownPrompt.IsVisible = spaceAvailableForScrolling > e.ScrollY + buffer;
}
经过反复研究您的代码,我找到了一个可以让您到达所需位置的解决方案。
只是在寻找解决方法?去阅读 解决方案 部分。如果您想知道原因,请继续阅读解释部分。
解决方案
首先,我意识到在您发布的代码中 Xaml 文件中的 Label
被称为 ScrollDownIndicator
,但在事件处理程序中,您正在更改一个名为 ScrollDownPrompt
的变量。在我的测试中,我继续将两个名字相等...
在您的 .xaml.cs 文件中,将以下行添加到您的页面构造函数中:
public MainPage()
{
InitializeComponent();
MyScrollView.PropertyChanged += (s, a) =>
{
if (a.PropertyName == ScrollView.ContentSizeProperty.PropertyName)
{
double buffer = 32;
double spaceAvailableForScrolling = MyScrollView.ContentSize.Height - MyScrollView.Height;
ScrollDownIndicator.IsVisible = spaceAvailableForScrolling > buffer;
}
};
}
private void MyScrollView_Scrolled(object sender, ScrolledEventArgs e)
{
double spaceAvailableForScrolling = MyScrollView.ContentSize.Height - MyScrollView.Height;
double buffer = 32;
ScrollDownPrompt.IsVisible = spaceAvailableForScrolling > e.ScrollY + buffer;
}
说明
在您的代码中,您仅更改事件处理程序 指标 的可见性:MyScrollView_Scrolled
。如果不执行滚动,则不调用事件处理程序并且不检查指示器的可见性:它只是始终可见。
要纠正此行为,您必须在 ScrollView 的 ContentSize 属性 更改时检查可见性。
希望这对一些人有帮助:D
我想在我的 Xamarin 应用程序中向 ScrollView 添加向下滚动提示,为此我遵循了这个 article .
它实际上做的是它在Scrollview之外添加了一个向下滚动指示器(Label),所以如果文本超过它显示此指示的页面大小,写为“向下滚动查看更多!”,当完全滚动到末尾时,它会隐藏此指示。
这部分工作正常,但如果文本少于页面,它仍然显示向下滚动指示器。
我想如果文本小于页面,向下滚动指示器的可见性应该是 false。
.xaml
<Grid>
<ScrollView x:Name="MyScrollView" Scrolled="MyScrollView_Scrolled">
<StackLayout>
<BoxView BackgroundColor="Red" HeightRequest="128"/>
<BoxView BackgroundColor="Orange" HeightRequest="128"/>
</StackLayout>
</ScrollView>
<Label x:Name="ScrollDownIndicator"
Text="Scroll down for more!"
BackgroundColor="Black"
TextColor="White"
FontSize="Large"
HorizontalTextAlignment="Center"
VerticalOptions="End"/>
</Grid>
.xaml.cs
private void MyScrollView_Scrolled(object sender, ScrolledEventArgs e)
{
double spaceAvailableForScrolling = MyScrollView.ContentSize.Height - MyScrollView.Height;
double buffer = 32;
ScrollDownPrompt.IsVisible = spaceAvailableForScrolling > e.ScrollY + buffer;
}
经过反复研究您的代码,我找到了一个可以让您到达所需位置的解决方案。
只是在寻找解决方法?去阅读 解决方案 部分。如果您想知道原因,请继续阅读解释部分。
解决方案
首先,我意识到在您发布的代码中 Xaml 文件中的 Label
被称为 ScrollDownIndicator
,但在事件处理程序中,您正在更改一个名为 ScrollDownPrompt
的变量。在我的测试中,我继续将两个名字相等...
在您的 .xaml.cs 文件中,将以下行添加到您的页面构造函数中:
public MainPage()
{
InitializeComponent();
MyScrollView.PropertyChanged += (s, a) =>
{
if (a.PropertyName == ScrollView.ContentSizeProperty.PropertyName)
{
double buffer = 32;
double spaceAvailableForScrolling = MyScrollView.ContentSize.Height - MyScrollView.Height;
ScrollDownIndicator.IsVisible = spaceAvailableForScrolling > buffer;
}
};
}
private void MyScrollView_Scrolled(object sender, ScrolledEventArgs e)
{
double spaceAvailableForScrolling = MyScrollView.ContentSize.Height - MyScrollView.Height;
double buffer = 32;
ScrollDownPrompt.IsVisible = spaceAvailableForScrolling > e.ScrollY + buffer;
}
说明
在您的代码中,您仅更改事件处理程序 指标 的可见性:MyScrollView_Scrolled
。如果不执行滚动,则不调用事件处理程序并且不检查指示器的可见性:它只是始终可见。
要纠正此行为,您必须在 ScrollView 的 ContentSize 属性 更改时检查可见性。
希望这对一些人有帮助:D