【问题标题】:FontIcon's style override by local propertiesFontIcon 的样式被本地属性覆盖
【发布时间】:2016-12-13 18:27:49
【问题描述】:

我正在尝试将所有组件的样式外部化,以便在需要时重复使用它们。

我有一个名为 MainMenuItemFontStyle 的资源,其中包含多个设置器,包括将 FontSize 设置器设置为 14。

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

样式位于单独的文件 (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}"/>

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

如您所见,我的样式是存在的,但有一些本地参数。而 MainContainerView.xaml 的链接指向之前显示的 FontIcon

我做错了吗?

谢谢。

【问题讨论】:

  • 你能不能也分享一下 FontIconBase 样式
  • 完成,它只是 FontFamily 属性的设置器。
  • 从 MainContainerView.xaml 中删除 MainMenuItemFontStyle
  • 抱歉,我认为从屏幕上可以清楚地看出样式位于名为 Styles.xaml 的单独文件中。我正在编辑问题。

标签: xaml uwp


【解决方案1】:

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

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

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

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

【讨论】:

  • 感谢您的帮助,子类可以解决问题。很遗憾,我无法访问您的帖子。
【解决方案2】:

我认为 MainContainerView.xaml 也有样式 MainMenuItemFontStyle ,其中字体大小为 20。因此您在 Styles.xaml 上编写的样式将被覆盖。

【讨论】:

  • 我刚刚仔细检查过,样式只在 Styles.xaml 文件中声明过一次,并在 FontIcon 组件中使用过一次。
猜你喜欢
  • 1970-01-01
  • 2013-06-10
  • 1970-01-01
  • 1970-01-01
  • 2018-05-08
  • 1970-01-01
  • 2020-05-27
  • 2013-01-19
  • 1970-01-01
相关资源
最近更新 更多