如何解决Xamarin 形成 CarouselView:子元素并不总是被实例化
我遇到了一个问题,我正在开发一个测验应用程序。长话短说,在之前的版本中,我使用了 Tabbedpage,但它没有满足我的所有期望。
所以我决定用 CarouselView 重写我的 UI。
在第一个问题中,当用户选择他的答案时,他的答案会突出显示(如果正确则为绿色,如果错误则为红色)。
但这是我的问题:当答案在问题 1 处突出显示时,不知何故问题 6 也在同一位置突出显示
<CarouselView x:Name="Carrousel"
Loop="False"
ItemsSource="{Binding FullQuestion}"
IndicatorView="indicatorView"
>
<CarouselView.ItemTemplate>
<DataTemplate>
<Grid x:Name="FirstGrid">
<Grid.RowDeFinitions>
<RowDeFinition Height="auto"/>
<RowDeFinition Height="0.3*"/>
<RowDeFinition Height="auto"/>
<RowDeFinition Height="0.3*"/>
<RowDeFinition Height="*"/>
</Grid.RowDeFinitions>
<Label x:Name="Question" Text="{Binding Name}" />
<views:MusicButtonView x:Name="MusicButtonView" Grid.Row="1" Margin="10" SongUrl="{Binding ID}" />
<Label x:Name="QuestionType" Grid.Row="2" Text="{Binding NameOfQuestion}" />
<Grid x:Name="ButtonGrid" Grid.Row="4">
<Grid.RowDeFinitions>
<RowDeFinition Height="*"/>
<RowDeFinition Height="*"/>
<RowDeFinition Height="*"/>
<RowDeFinition Height="*"/>
</Grid.RowDeFinitions>
<Button Grid.Row="0" x:Name="btn1" Text="{Binding Lines[0].songName}" Clicked="OnBtnClick" BackgroundColor="#998A8B8D" BorderColor="White" CornerRadius="1" BorderWidth="2"/>
<Button Grid.Row="1" x:Name="btn2" Text="{Binding Lines[1].songName}" Clicked="OnBtnClick" BackgroundColor="#998A8B8D" BorderColor="White" CornerRadius="1" BorderWidth="2"/>
<Button Grid.Row="2" x:Name="btn3" Text="{Binding Lines[2].songName}" Clicked="OnBtnClick" BackgroundColor="#998A8B8D" BorderColor="White" CornerRadius="1" BorderWidth="2"/>
<Button Grid.Row="3" x:Name="btn4" Text="{Binding Lines[3].songName}" Clicked="OnBtnClick" BackgroundColor="#998A8B8D" BorderColor="White" CornerRadius="1" BorderWidth="2"/>
</Grid>
</Grid>
</DataTemplate>
</CarouselView.ItemTemplate>
</CarouselView>
private void Process(QuestionFull data,int index,ref Button btn)
{
var id = data.QuestionId;
if(!data.IsAnswered)
{
btn.BackgroundColor = Color.FromHex("#998A8B8D");
}
if (data.ID.Equals(data.Lines[index].songId))
{
btn.BackgroundColor = Color.Fromrgb(0,213,33);
data.IsCorrectAnswer = true;
}
else
{
btn.BackgroundColor = Color.Fromrgb(255,69,56);
data.IsCorrectAnswer = false;
}
data.IsAnswered = true;
}
我的想法是 carouselview 重用该项目以节省内存。它有 5 个项目,然后重复使用它们? 有谁知道如何解决,或者如何增加唯一元素的数量。
解决方法
CarouselView
基于 CollectionView
,因此这种行为是正常的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。