xaml - 如何在选择时更改 xamarin shell 中 flyoutitem 的视觉效果?
问题描述
我想通过更改 Flyoutitem 的背景颜色来突出显示当前页面,但我还需要更改框架内的文本颜色。我的模板
<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;
}
解决方案
首先,您需要在资源中添加自定义样式:
<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 中使用它:
<Shell.ItemTemplate>
<DataTemplate >
<Grid Style="{StaticResource FloutItemStyle}">
//...
</Grid>
</DataTemplate>
</Shell.ItemTemplate>
推荐阅读
- assembly - 谁能帮我解释一下这个 mips 问题的答案?
- android - 片段中未解决的 getSupportFragmentManager()
- azure - Azure 存储帐户专用链接自定义域
- javascript - 带有动态日期和标题的倒数计时器
- javascript - React 路由器、redux、异步 API 请求和旧数据闪存
- r - 在 R 中使用 While for 循环模拟硬币翻转
- python - sqlalchemy 中具有单表继承的多态引用
- angular - 在 Dialog 中显示相同的内容
- c# - 编辑正则表达式以实现角色(至少需要一个字母)
- php - 如何压缩文件夹内的文件并单击下载?