Xamarin.Forms - CollectionView SelectedItem 在 iOS 加载时不遵守 VisualStateManager

Xamarin.Forms - CollectionView SelectedItem doesn't respect VisualStateManager on iOS on load

所以,

我有一个 CollectionView,它在页面加载时加载 SelectedItem。

我使用 VisualStateManager 来管理选定项和 non-selected 项的属性,还可以管理单元格本身的背景颜色。

我的问题是有时(随机)在页面加载时 VisualStateManager 没有在 SelectedItem 上正确设置任何属性。这只发生在 iOS,它在 Android.

上工作正常

我的收藏查看代码:

<CollectionView
                        x:Name="DaysList"
                        ItemsLayout="HorizontalList"
                        SelectionMode="Single"
                        VerticalOptions="Start"
                        HorizontalScrollBarVisibility="Never"
                        HorizontalOptions="FillAndExpand"
                        ItemsSource="{Binding DaysList}"
                        SelectedItem="{Binding DaysListSelectedItem, Mode=TwoWay}">

                        <CollectionView.Margin>
                            <OnPlatform x:TypeArguments="Thickness">
                                <On Platform="iOS" Value="-3,0,-3,40"/>
                                <On Platform="Android" Value="-3,-40,-3,0"/>
                            </OnPlatform>
                        </CollectionView.Margin>

                        <CollectionView.HeightRequest>
                            <OnPlatform x:TypeArguments="x:Double">
                                <On Platform="iOS" Value="74"/>
                                <On Platform="Android" Value="150"/>
                            </OnPlatform>
                        </CollectionView.HeightRequest>

                        <CollectionView.ItemTemplate>
                            <DataTemplate>

                                <Grid
                                    Padding="3,0,3,0">

                                    <VisualStateManager.VisualStateGroups>

                                        <VisualStateGroup Name="CommonStates">

                                            <VisualState Name="Normal"/>
                                            <VisualState Name="Selected">

                                                <VisualState.Setters>
                                                    <Setter Property="Background" Value="#2F2F2F"/>
                                                    <Setter TargetName="SelectedFrame" Property="Frame.BackgroundColor" Value="#F0CF4E"/>
                                                    <Setter TargetName="SelectedFrame" Property="Frame.WidthRequest" Value="104"/>
                                                    <Setter TargetName="SelectedFrame" Property="Frame.HeightRequest" Value="70"/>
                                                    <Setter TargetName="SelectedDate1" Property="Label.TextColor" Value="#080808"/>
                                                    <Setter TargetName="SelectedDate2" Property="Label.TextColor" Value="#080808"/>
                                                </VisualState.Setters>

                                            </VisualState>
                                        </VisualStateGroup>
                                    </VisualStateManager.VisualStateGroups>

                                    <Frame
                                        x:Name="SelectedFrame"
                                        CornerRadius="5"
                                        HasShadow="False"
                                        Padding="0"
                                        BackgroundColor="{AppThemeBinding Light=Gray, Dark=Gray}"
                                        Margin="0"
                                        VerticalOptions="CenterAndExpand"
                                        WidthRequest="92"
                                        HeightRequest="62">

                                        <StackLayout
                                            HorizontalOptions="FillAndExpand"
                                            VerticalOptions="CenterAndExpand"
                                            Spacing="0">

                                            <Label
                                                x:Name="SelectedDate1"
                                                Text="{Binding Day}"
                                                FontSize="16"
                                                Style="{StaticResource LightWhite}"
                                                Margin="0,0,0,-2"
                                                HorizontalOptions="CenterAndExpand"
                                                VerticalOptions="CenterAndExpand"/>

                                            <Label
                                                x:Name="SelectedDate2"
                                                Text="{Binding DayName}"
                                                FontSize="20"
                                                Style="{StaticResource BoldWhite}"
                                                Margin="0,-2,0,0"
                                                HorizontalOptions="CenterAndExpand"
                                                VerticalOptions="CenterAndExpand"/>

                                        </StackLayout>

                                    </Frame>

                                </Grid>

                            </DataTemplate>
                        </CollectionView.ItemTemplate>

                    </CollectionView>

任何帮助将不胜感激,提前致谢。

这是一个公开 PR here 的已知错误。我希望在下一个版本之前合并它:)

您已经可以在您的代码上测试此修复,并且很乐意要求您这样做,以便我们可以验证另一个已修复的场景。如果您需要相关说明,请告诉我。