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 的已知错误。我希望在下一个版本之前合并它:)
您已经可以在您的代码上测试此修复,并且很乐意要求您这样做,以便我们可以验证另一个已修复的场景。如果您需要相关说明,请告诉我。
所以,
我有一个 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 的已知错误。我希望在下一个版本之前合并它:)
您已经可以在您的代码上测试此修复,并且很乐意要求您这样做,以便我们可以验证另一个已修复的场景。如果您需要相关说明,请告诉我。