根据listview滚动条滑动堆栈布局。-Xamarin.forms
在我的Xamarin.Forms应用程序中,我有一个StackLayout和ListView 我想根据ListView滚动方向隐藏/显示此StackLayout: 如果用户向下滚动->向上滑动堆栈布局并隐藏 如果用户向上滚动->向下滑动堆栈布局并显示 我所做的是订阅ListView的一个外观事件根据listview滚动条滑动堆栈布局。-Xamarin.forms,listview,xamarin,xamarin.forms,stacklayout,Listview,Xamarin,Xamarin.forms,Stacklayout,在我的Xamarin.Forms应用程序中,我有一个StackLayout和ListView 我想根据ListView滚动方向隐藏/显示此StackLayout: 如果用户向下滚动->向上滑动堆栈布局并隐藏 如果用户向上滚动->向下滑动堆栈布局并显示 我所做的是订阅ListView的一个外观事件 ObservableCollection DistrictData=新的ObservableCollection(); int-lastItemIndex; int-currentItemIndex;
ObservableCollection DistrictData=新的ObservableCollection();
int-lastItemIndex;
int-currentItemIndex;
private void FirstListview_项目出现(对象发送方,项目可见性事件参数e)
{
DistrictData项=e.项作为DistrictData;
currentItemIndex=DistrictDatas.IndexOf(项目);
如果(currentItemIndex>lastItemIndex)
{
选择AllLayout.TranslationY-=30;
选择AllLayout.IsVisible=false;
}
其他的
{
选择AllLayout.TranslationY=0;
选择AllLayout.IsVisible=true;
}
lastItemIndex=currentItemIndex;
}
我的圣诞节
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:d="http://xamarin.com/schemas/2014/forms/design"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:touch="clr-namespace:TouchEffect;assembly=TouchEffect"
xmlns:controls="clr-namespace:SampleApp.CustomRender"
mc:Ignorable="d"
x:Class="SampleApp.Views.Notification_Center.Add_New_Notification.Districts">
<ContentPage.Content>
<Grid>
<Grid BackgroundColor="#076c9c">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid x:Name="SelectAllLayout" Grid.Row="0" Margin="10,10,10,0">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<BoxView Grid.Row="0" Grid.Column="0" VerticalOptions="Center" HorizontalOptions="FillAndExpand" BackgroundColor="LightBlue" HeightRequest="0.1"></BoxView>
<Frame Grid.Row="0" HasShadow="False" BackgroundColor="White" Padding="7" CornerRadius="20" Grid.Column="1">
<Label Text="Step 1" FontSize="Micro" TextColor="Black" HorizontalOptions="Center" VerticalOptions="Center" Margin="10,0,10,0">
<Label.FontFamily>
<OnPlatform x:TypeArguments="x:String">
<On Platform="iOS" Value="Montserrat-Regular" />
<On Platform="Android" Value="Montserrat-Regular.ttf#Montserrat-Regular" />
</OnPlatform>
</Label.FontFamily>
</Label>
</Frame>
<BoxView Grid.Row="0" VerticalOptions="Center" Grid.Column="2" HorizontalOptions="FillAndExpand" BackgroundColor="LightBlue" HeightRequest="0.1"></BoxView>
<StackLayout Grid.Row="1" HorizontalOptions="StartAndExpand" Orientation="Horizontal" Margin="12,0,0,0">
<CheckBox IsChecked="False" HorizontalOptions="Start" VerticalOptions="Center" Color="LightGreen"></CheckBox>
<Label Text="Select All" FontSize="Small" TextColor="White" HorizontalOptions="Start" VerticalOptions="Center" Margin="10,0,0,0">
<Label.FontFamily>
<OnPlatform x:TypeArguments="x:String">
<On Platform="iOS" Value="Montserrat-Regular" />
<On Platform="Android" Value="Montserrat-Regular.ttf#Montserrat-Regular" />
</OnPlatform>
</Label.FontFamily>
</Label>
</StackLayout>
</Grid>
<StackLayout VerticalOptions="Center" Grid.Row="1" x:Name="ListLayout" BackgroundColor="Transparent"
RelativeLayout.WidthConstraint="{ConstraintExpression Type=RelativeToParent, Property=Width}"
RelativeLayout.HeightConstraint="{ConstraintExpression Type=RelativeToParent, Property=Height}">
<ListView
x:Name="FirstListview"
HasUnevenRows="True"
HeightRequest="{Binding Path=Height, Source={x:Reference ListLayout}}"
CachingStrategy="RecycleElement"
HorizontalOptions="FillAndExpand"
BackgroundColor="Transparent"
ItemAppearing="FirstListview_ItemAppearing"
ItemTapped="DistrictList_ItemTapped"
VerticalOptions="FillAndExpand"
Margin="7,7,7,0"
SeparatorVisibility="None">
<ListView.ItemTemplate >
<DataTemplate >
<ViewCell >
<ViewCell.View>
<Frame HorizontalOptions="FillAndExpand"
BorderColor="#4088CCF1" BackgroundColor="#4088CCF1"
Padding="10"
Margin="3"
CornerRadius="6">
<Frame.HasShadow>
<OnPlatform x:TypeArguments="x:Boolean" iOS="false" Android="true"/>
</Frame.HasShadow>
<StackLayout Orientation="Horizontal" HorizontalOptions="FillAndExpand">
<CheckBox HorizontalOptions="Start" IsChecked="{Binding Selected}" Color="LightBlue" Margin="2,-6,0,0" VerticalOptions="Start"></CheckBox>
<StackLayout Orientation="Vertical" VerticalOptions="StartAndExpand" >
<Label Text="District Name" FontSize="Micro" TextColor="LightBlue" Margin="10,0,0,0"></Label>
<Label Text="{Binding Heading}" VerticalOptions="Center" FontSize="12" HorizontalTextAlignment="Start" TextColor="White" Margin="10,5,5,5">
<Label.FontFamily>
<OnPlatform x:TypeArguments="x:String">
<On Platform="iOS" Value="Montserrat-Regular" />
<On Platform="Android" Value="Montserrat-Regular.ttf#Montserrat-Regular" />
</OnPlatform>
</Label.FontFamily>
</Label>
</StackLayout>
<Image Source="NC_rightarrow.png" HorizontalOptions="EndAndExpand" HeightRequest="15" Margin="0,0,7,0" VerticalOptions="Center"></Image>
</StackLayout>
</Frame>
</ViewCell.View>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
</Grid>
</Grid>
</ContentPage.Content>
</ContentPage>
但它并没有像我预期的那样工作。当我们滚动时,布局会随机显示和隐藏。如何解决这个问题?我提到了这个问题。但是没有运气 我必须说,你的代码没有什么问题,只是你不断地用更新的值点击视觉元素,我认为这会导致闪烁。我能够通过实现viewmodel和减少网格点击来消除闪烁。这是部分成功的,因为网格高度绑定一直正确启动,但网格本身在滚动listview时似乎在更新高度方面存在问题。在您的情况下(在我看来),最好的解决方案是使用绝对布局作为附加用户菜单。它工作正常,不会引起所描述的问题。您可以找到工作的基本示例。这是否回答了您的问题@亚当:嗨,我提过那个问题。我从那个问题中得到了这个想法。但这并没有解决我的问题,而是你的全部xaml。你在其他地方有问题/@Adlorem我添加了完整的xamlHi,答案是否有用,你解决了吗?