Проблема с VisualStateManager для CollectionView в формах Xamarin

#xamarin.forms #collectionview #datatrigger #visualstatemanager

Вопрос:

У меня проблема с CollectionView и VisualStateManager. Это мой взгляд на коллекцию. Я также пытался использовать скомпилированные привязки.

     <CollectionView Grid.Row="1"
                        ItemSizingStrategy="MeasureAllItems"
                        ItemsSource="{Binding SizeOptions}"
                        Margin="0"
                        SelectionChangedCommand="{Binding SelectionChangedCommand}"
                        SelectedItem="{Binding SelectedSizeOption}"
                        SelectionMode="Single">
            <CollectionView.Header>
                <BoxView VerticalOptions="Start"
                         HeightRequest="1"
                         Color="{StaticResource DividerColor}"/>
            </CollectionView.Header>
            <CollectionView.ItemTemplate>
                <DataTemplate x:DataType="tpViewModels:SizeOption">
                    <StackLayout IsEnabled="{Binding IsEnabled}">
                        <StackLayout AutomationId="{Binding Text}"
                                     AutomationProperties.IsInAccessibleTree="True"
                                     HeightRequest="64"
                                     IsEnabled="{Binding IsEnabled}"
                                     Margin="10, 0, 0, 0"
                                     MinimumHeightRequest="64"
                                     Orientation="Horizontal"
                                     Padding="0"
                                     x:Name="Holder">
                            <Image HeightRequest="20"
                                   IsEnabled="{Binding IsEnabled}"
                                   WidthRequest="20"
                                   x:Name="RadioButtonImage">
                            </Image>
                            <Label FontSize="14"
                                   HorizontalOptions="StartAndExpand"
                                   IsEnabled="{Binding IsEnabled}"
                                   Padding="10, 0"
                                   Text="{Binding Text}"
                                   Style="{StaticResource MediumFontFamily}"
                                   VerticalTextAlignment="Center"
                                   x:Name="RadioButtonLabel">
                            </Label>
                        </StackLayout>
                        <BoxView VerticalOptions="Start"
                                 HeightRequest="1"
                                 Color="{StaticResource DividerColor}"/>
                    </StackLayout>
                </DataTemplate>
            </CollectionView.ItemTemplate>
        </CollectionView>
 

Когда я не использую тип данных в DataTemplate, то IsEnabled = false идеально подходит, мы не можем выбрать элемент в списке. Но когда я использую тип данных, я могу выбрать элемент diabled.
Также я хочу изменить цвет текста, атрибуты шрифта и изображение.Источник, когда элемент должен быть отключен.

Он устанавливает для меня только VisualStates = Нормальное или выбранное, VisualStateManager не работает с состоянием = Отключено. Я добавил VisualStateManager в первый StackLayout с именем цели, установленным на x:Имя метки и изображения.

Подставка для данных для этикетки и изображения работает, но я могу выбрать отключенный элемент 🙁

Кто-нибудь знает, почему?

Ответ №1:

Вы могли бы попробовать установить Visual State Manager это на ContentPage.Resources .

Нравится:

 <ContentPage.Resources>
    <Style TargetType="Label">
        <Setter Property="VisualStateManager.VisualStateGroups">
            <VisualStateGroupList>
                <VisualStateGroup x:Name="CommonStates">
                    <VisualState x:Name="Normal" >
                        <VisualState.Setters>
                            <Setter Property="TextColor"
                                    Value="LightSkyBlue" />
                        </VisualState.Setters>
                    </VisualState>
                    <VisualState x:Name="Selected">
                        <VisualState.Setters>
                            <Setter Property="TextColor"
                                    Value="LightSkyBlue" />
                        </VisualState.Setters>
                    </VisualState>
                    <VisualState x:Name="Disabled">
                        <VisualState.Setters>
                            <Setter Property="TextColor"
                                    Value="Green" />
                        </VisualState.Setters>
                    </VisualState>
                </VisualStateGroup>
            </VisualStateGroupList>
        </Setter>
    </Style>
    <Style TargetType="Image">
        <Setter Property="VisualStateManager.VisualStateGroups">
            <VisualStateGroupList>
                <VisualStateGroup x:Name="CommonStates">
                    <VisualState x:Name="Normal" >
                        <VisualState.Setters>
                            <Setter Property="Source"
                                    Value="normalicon.png" />
                        </VisualState.Setters>
                    </VisualState>
                    <VisualState x:Name="Selected">
                        <VisualState.Setters>
                            <Setter Property="Source"
                                    Value="normalicon.png" />
                        </VisualState.Setters>
                    </VisualState>
                    <VisualState x:Name="Disabled">
                        <VisualState.Setters>
                            <Setter Property="Source"
                                    Value="disableicon.png" />
                        </VisualState.Setters>
                    </VisualState>
                </VisualStateGroup>
            </VisualStateGroupList>
        </Setter>
    </Style>
</ContentPage.Resources>