gpt4 book ai didi

c# - Xamarin:适用于 Android 和 Windows UWP 的 Xamarin 表单中分组列表的垂直字母索引(跳转列表)

转载 作者:太空狗 更新时间:2023-10-29 20:16:11 24 4
gpt4 key购买 nike

我为 ios、android 和 windows 平台设计了 Xamarin 表单中的分组 ListView 。当我在 ListView 中设置 GroupShortNameBinding 属性时,垂直索引(跳转列表)会自动出现在 IOS 中。但是跳转列表没有出现在android中。如何使用自定义渲染在 android 和 windows 中获得垂直索引的支持。如果谁能提供支持跨平台这个特性的自定义渲染源。

enter image description here

最佳答案

如果您不想要 CustomRenders,最简单的方法是使用 XAML hack。

您可以将 ListView 包装在高度和宽度等于父级(内容页面)的 RelativeLayout 中。

对于 ListView ,使用高度作为父级,宽度为父级的 90%。添加一个宽度为 10% 的堆栈布局,并从以高度为父级的相对布局的 90% 开始。使其方向垂直。将所有字母作为标签添加到堆栈布局并实现其 TapGestureScrollTo特定的位置。

将 Android 的宽度设置为 90%,仅适用于 iOS,Windows 保持为 100%,堆栈布局宽度为 0%,并且 IsVisible=false

View 模型:

public class JumpListViewModel : INotifyPropertyChanged
{
private ObservableCollection<Item> _allItems;
private List<string> _alphabetList;

public event PropertyChangedEventHandler PropertyChanged;

[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));

public JumpListViewModel()
{
AllItems = new ObservableCollection<Item>(new List<Item> { new Item { MyText = "1" }, new Item { MyText = "2" }, new Item { MyText = "3" } });

AlphabetList = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray().Select(x => x.ToString()).ToList();
}

public ObservableCollection<Item> AllItems
{
get { return _allItems; }
set
{
_allItems = value;
OnPropertyChanged();
}
}

public List<string> AlphabetList
{
get { return _alphabetList; }
set
{
_alphabetList = value;
OnPropertyChanged();
}
}
}

View :

<RelativeLayout VerticalOptions="FillAndExpand">

<ListView VerticalOptions="FillAndExpand" HasUnevenRows="True" ItemsSource="{Binding AllItems}"
SeparatorColor="Transparent" SeparatorVisibility="None" BackgroundColor="Transparent"
RelativeLayout.HeightConstraint="{ConstraintExpression Type=RelativeToParent, Property=Height, Factor=1}">
<RelativeLayout.WidthConstraint>
<OnPlatform x:TypeArguments="Constraint" Android="{ConstraintExpression Type=RelativeToParent, Property=Width,Factor=0.9}"
iOS="{ConstraintExpression Type=RelativeToParent, Property=Width,Factor=1}"
WinPhone="{ConstraintExpression Type=RelativeToParent, Property=Width,Factor=1}" />
</RelativeLayout.WidthConstraint>

<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>

<StackLayout HorizontalOptions="FillAndExpand" BackgroundColor="Silver">

<Label Text="{Binding MyText}" />
<Button Text="button" />
<BoxView HeightRequest="1" Color="Gray" BackgroundColor="Gray" HorizontalOptions="FillAndExpand" />

</StackLayout>

</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>

<ListView VerticalOptions="FillAndExpand" HasUnevenRows="True" ItemsSource="{Binding AlphabetList}"
SeparatorColor="Transparent" SeparatorVisibility="None" BackgroundColor="Transparent"
RelativeLayout.HeightConstraint="{ConstraintExpression Type=RelativeToParent, Property=Height, Factor=0.9}"
RelativeLayout.YConstraint="{ConstraintExpression Type=RelativeToParent, Property=Height, Factor=0.05}"
RelativeLayout.XConstraint="{ConstraintExpression Type=RelativeToParent, Property=Width, Factor=0.9}">
<RelativeLayout.WidthConstraint>
<OnPlatform x:TypeArguments="Constraint" Android="{ConstraintExpression Type=RelativeToParent, Property=Width,Factor=0.1}"
iOS="{ConstraintExpression Type=RelativeToParent, Property=Width,Factor=0, Constant=0}"
WinPhone="{ConstraintExpression Type=RelativeToParent, Property=Width,Factor=0, Constant=0}" />
</RelativeLayout.WidthConstraint>
<ListView.IsVisible>
<OnPlatform x:TypeArguments="x:Boolean" WinPhone="False" iOS="False" Android="True" />
</ListView.IsVisible>
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Label Text="{Binding .}" TextColor="Red" FontSize="Micro" />
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>

</RelativeLayout>

Android 截图:

enter image description here

关于c# - Xamarin:适用于 Android 和 Windows UWP 的 Xamarin 表单中分组列表的垂直字母索引(跳转列表),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38737980/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com