FontIcon的样式由本地属性覆盖

时间:2016-12-13 08:43:21

标签: xaml uwp

我试图外化我的所有组件'风格,所以我可以在需要时重复使用它们。

我有一个名为 MainMenuItemFontStyle 的资源,其中有几个setter,包括FontSize setter到14。

当我将此资源应用于我的FontIcon时,Style会被一些本地参数覆盖。问题是我从来没有设置这些本地参数,我找不到它们。

样式位于单独的文件( Styles.xaml )中,如下所示:

<Style x:Name="FontIconBase" TargetType="FontIcon">
    <Setter Property="FontFamily" Value="Segoe MDL2 Assets"/>
</Style>
<Style x:Name="MainMenuItemFontStyle" TargetType="FontIcon" BasedOn="{StaticResource ResourceKey=FontIconBase}">
    <Setter Property="FontSize" Value="14"/>
    <Setter Property="VerticalAlignment" Value="Center"/>
    <Setter Property="Foreground" Value="Black"/>
</Style>

我只是使用 Style 参数调用它:

<FontIcon Grid.Column="0" Glyph="{Binding Icon}" Style="{StaticResource ResourceKey=MainMenuItemFontStyle}"/>

这是我从属性资源管理器中得到的:

Properties explorer

正如您所看到的,我的样式是礼物,但有一些本地参数。指向 MainContainerView.xaml 的链接指向之前显示的 FontIcon

我做错了吗?

感谢。

2 个答案:

答案 0 :(得分:2)

我最近也注意到了这一点。

FontIcon类似乎将值20设置为FontSize依赖项属性的本地值,它将优先于样式设置器。我检查了文档,并没有提到它为什么会这样做的任何具体原因,所以我认为这可能是一个错误。确实应该通过dependency property metadata设置依赖项属性的默认值。 Here's a link to a feedback hub post I made如果你想提醒他们注意它。

您可以通过调用特定ClearValue(FontSizeProperty)实例上的FontIcon来解决此问题,或者只是将其子类化并使用子类代替FontIcon

public class FontIconFixed : FontIcon
{
    public FontIconFixed()
    {
        ClearValue(FontSizeProperty);
    }
}

答案 1 :(得分:0)

我认为MainContainerView.xaml还具有样式MainMenuItemFontStyle,其中fontsize为20.因此,您在Styles.xaml上编写的样式被覆盖。

相关问题