Всплывающее окно Навигации По Оболочке Xamarin Выбранный Цвет Метки Не Меняется

#c# #xamarin #xamarin.forms #flyout #xamarin-shell

Вопрос:

  • вот мой код в оболочке.xaml выбранный цвет рамки для всплывающего элемента работает для меня, его зеленый цвет хорошо виден, но для выбранной метки он такой же, как и обычный цвет всплывающей метки, я не знаю, чего мне здесь не хватает
  • это для рамки всплывающего элемента
     <Style x:Key="FloutItemStyle" TargetType="Frame">
    <Setter Property="VisualStateManager.VisualStateGroups">
    <VisualStateGroupList>
    <VisualStateGroup x:Name="CommonStates">
    <VisualState x:Name="Normal" />
    <VisualState x:Name="Selected">
    <VisualState.Setters>
    <Setter Property="BackgroundColor" Value="#384a1a"/>                                    
    </VisualState.Setters>
    </VisualState>
    </VisualStateGroup>
    </VisualStateGroupList>
    </Setter>
    </Style>
     
  • это для стиля этикетки
     <Style x:Key="FloutItemStyles" TargetType="Label">
    <Setter Property="VisualStateManager.VisualStateGroups">
    <VisualStateGroupList>
    <VisualStateGroup x:Name="CommonStates">
    <VisualState x:Name="Normal">
    <VisualState.Setters>                                    
    <Setter Property="TextColor" Value="#6b6b6b"/>
    </VisualState.Setters>
    </VisualState>
    <VisualState x:Name="Selected">
    <VisualState.Setters>                                    
    <Setter Property="TextColor" Value="#fff"/>
    </VisualState.Setters>
    </VisualState>
    </VisualStateGroup>
    </VisualStateGroupList>
    </Setter>
    </Style>
     
  • это мой шаблон
     <Shell.FlyoutHeaderTemplate>
    <DataTemplate>
    <Grid HeightRequest="110">
    <Grid.RowDefinitions>
    <RowDefinition Height="2*"/>
    </Grid.RowDefinitions>
    <FlexLayout x:Name="imageHolder" AlignItems="Center" JustifyContent="Center" Padding="20,10" BackgroundColor="#fff">
    <Image Source="logo.png" />
    <Label TextColor="#6b6b6b" x:Name="UserName"></Label>
    </FlexLayout>
    </Grid>
    </DataTemplate>
    </Shell.FlyoutHeaderTemplate>
    <Shell.ItemTemplate >
    <DataTemplate  >
    <Frame Style="{StaticResource FloutItemStyle}"  Padding="25,5">                
    <FlexLayout Margin="0,5" AlignItems="Center" JustifyContent="Start">
    <Frame Padding="5" HeightRequest="30"  WidthRequest="30" CornerRadius="100"> <Image Source="{Binding FlyoutIcon}"
    Margin="5"
    WidthRequest="30"
    HeightRequest="30" />
    </Frame>
    <Label  Style="{StaticResource FloutItemStyles}"  Padding="25,0,0,0" 
    Text="{Binding Title}"
    FontAttributes="Bold"
    FontSize="18"
    VerticalTextAlignment="Center" />
    </FlexLayout>       
    </Frame>
    </DataTemplate>
    </Shell.ItemTemplate>
     

Ответ №1:

Я думаю, что это связано с тем, что метка находится внутри рамки, и это приводит к тому, что состояние метки не меняется

Если вы хотите инициировать несколько изменений при выборе, вы можете проверить документацию Microsoft о стиле всплывающего окна в сочетании с этим другим примером

Таким образом, когда выбирается всплывающий элемент, он инициирует все изменения, которые вы хотите, ссылаясь на элемент по их имени