Как изменить визуальный элемент flyoutitem в оболочке xamarin при выборе? - PullRequest
0 голосов
/ 28 января 2020

Я хочу выделить текущую страницу, изменив цвет фона элемента flyout, но мне также нужно изменить цвет текста внутри рамки. Мой шаблон

<Grid ...>
 <Frame CornerRadius="10"
        Padding="0"
        BackgroundColor="White"
        Grid.Column="1">
        <Label Text="{Binding Title}"
               Margin="50,0,0,0"
               HorizontalOptions="FillAndExpand"
               VerticalOptions="FillAndExpand"
               VerticalTextAlignment="Center"
               TextColor="Black"
               Grid.Column="1"/>
</Frame>
</Grid>

Мне нужно изменить цвет рамки на темно-зеленый и пометить цвет текста белым, когда я перейду на определенную страницу. Я пробовал визуальный менеджер состояний, но он не работает даже с фоновым режимом. Я нашел решение, чтобы прикрепить триггер на фрейме, но ничего не происходит

protected override void Invoke(Frame sender)
{
    sender.BackgroundColor = Color.FromHex("#229904");
    (sender.Content as Label).TextColor = Color.White;
}

1 Ответ

0 голосов
/ 29 января 2020

Во-первых, вам нужно добавить собственный стиль в свои ресурсы:

<Style x:Key="FloutItemStyle" TargetType="Grid">
    <Setter Property="VisualStateManager.VisualStateGroups">
        <VisualStateGroupList>
            <VisualStateGroup x:Name="CommonStates">
                <VisualState x:Name="Normal" />
                <VisualState x:Name="Selected">
                    <VisualState.Setters>
                        <Setter Property="BackgroundColor" Value="xxx"/>
                    </VisualState.Setters>
                </VisualState>
            </VisualStateGroup>
        </VisualStateGroupList>
    </Setter>
</Style>

Затем использовать его в своей командной оболочке:

<Shell.ItemTemplate>
    <DataTemplate >
        <Grid Style="{StaticResource FloutItemStyle}">

         //...
        </Grid>
    </DataTemplate>
</Shell.ItemTemplate>
...