Xamarin формирует стиль элемента шаблона оболочки

#c# #xamarin.forms

#c# #xamarin.forms

Вопрос:

Как изменить цвет ярлыка, который находится внутри сетки FlyoutItem? В приведенном выше коде я попытался изменить цвет фона сетки и цвет шрифта ярлыка при выборе определенного пункта меню. Фон сетки меняется. Но цвет шрифта этого не делает. Стили:

 <Shell.Resources>
    <Style x:Key="FloutItemStyle" TargetType="Grid">
        <Setter Property="VisualStateManager.VisualStateGroups">
            <VisualStateGroupList>
                <VisualStateGroup x:Name="CommonStates">
                    <VisualState x:Name="Normal">
                        <VisualState.Setters>
                            <Setter Property="BackgroundColor" Value="Orange"/>
                        </VisualState.Setters>
                    </VisualState>
                    <VisualState x:Name="Selected">
                        <VisualState.Setters>
                            <Setter Property="BackgroundColor" Value="DarkOrange"/>
                        </VisualState.Setters>
                    </VisualState>
                </VisualStateGroup>
            </VisualStateGroupList>
        </Setter>
    </Style>
    <Style x:Key="FlyoutLabelStyle" TargetType="Label">
        <Setter Property="VisualStateManager.VisualStateGroups">
            <VisualStateGroupList>
                <VisualStateGroup>
                    <VisualState x:Name="Normal">
                        <VisualState.Setters>
                            <Setter Property="TextColor" Value="Black"/>
                        </VisualState.Setters>
                    </VisualState>
                    <VisualState x:Name="Selected">
                        <VisualState.Setters>
                            <Setter Property="TextColor" Value="DarkGray"/>
                        </VisualState.Setters>
                    </VisualState>
                </VisualStateGroup>
            </VisualStateGroupList>
        </Setter>
    </Style>
</Shell.Resources>
  

Элемент шаблона оболочки:

 <DataTemplate >
        <Grid Style="{StaticResource FloutItemStyle}">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="0.2*" />
                <ColumnDefinition Width="0.8*" />
            </Grid.ColumnDefinitions>
            <Image Source="{Binding FlyoutIcon}"
                Margin="5"
                HeightRequest="45" />
            <Label Style="{StaticResource FlyoutLabelStyle}" 
                Grid.Column="1"
                FontSize="Large"
                Text="{Binding Title}"
                FontAttributes="Bold"
                VerticalTextAlignment="Center" />
        </Grid>
    </DataTemplate>
  

Ответ №1:

Вы можете попробовать использовать триггеры.

  <Label Grid.Column="1"
                       TextColor="Black"
                       Text="{Binding Title}"
                       FontAttributes="Italic"
                       VerticalTextAlignment="Center" >
                <Label.Triggers>
                    <DataTrigger TargetType="Label" Binding="{Binding Source={x:Reference grid},Path=BackgroundColor}" Value="Accent">
                        <Setter Property="TextColor" Value="White"/>
                    </DataTrigger>
                </Label.Triggers>
            </Label>
  

для справки