【发布时间】:2020-12-21 22:17:15
【问题描述】:
我使用 Material Design Font Icons 作为我项目的图标源。问题是,由于它是一种 字体,因此在选择时和取消选择时需要不同的颜色(如图所示 - 取消选择的白色图标有白色图标,这不太好)。
如何修改Style 来改变图标的颜色,就像改变文本和背景颜色一样?
<!-- redacted because it would've never worked -->
编辑 1:
共识是使用 VSM 是行不通的,因为它不是从 VisualElement 派生的。我已经使用Trigger 让它工作了——但我对实现不满意。这有效:
<Shell.Resources>
<ResourceDictionary>
<Style TargetType="FlyoutItem" BasedOn="{StaticResource BaseStyle}">
<Style.Triggers>
<Trigger TargetType="FlyoutItem" Property="IsChecked" Value="True">
<Setter Property="Title" Value="Checked" />
<Setter Property="FlyoutIcon" >
<Setter.Value>
<FontImageSource FontFamily="MaterialDesignIconFont"
Glyph="{StaticResource InformationOutlineGlyph}"
Color="White" />
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
</ResourceDictionary>
</Shell.Resources>
<FlyoutItem Title="About" >
<FlyoutItem.Icon>
<FontImageSource FontFamily="MaterialDesignIconFont"
Glyph="{StaticResource InformationOutlineGlyph}"
Color="Green" />
</FlyoutItem.Icon>
<ShellContent Route="AboutPage" ContentTemplate="{DataTemplate local:AboutPage}" />
</FlyoutItem>
...但是如您所见,我必须设置整个 FontImageSource 值 - 它具有 Glyph 属性 - 所以我必须每次为每个 FlyoutItem 重复此 Style。
我怎样才能将这个Style 重写为可重复使用并且只更改颜色,而不更改其他属性?
【问题讨论】:
-
可能不支持。 “图标”是FlyoutItem 的属性。基于description in visual-state-manager,“从 VisualElement 派生的所有类都支持此视觉状态组”,其中不包括弹出项。
-
是的,我同意。感谢您的链接。
-
Material Design Font Icons可以用Triggers做你想做的事。我稍后会提供代码示例。
标签: xaml xamarin xamarin.forms app.xaml app-shell