如何在WPF中为Segoe MDL2图标着色?

wil*_*ord 6 wpf

我正在寻找一种为Segoe MDL2图标添加颜色的方法。我的应用程序中的字形当前是TextBlock资源,其定义如下:

<TextBlock x:Key="PenSymbol" x:Shared="False" FontFamily="Segoe MDL2 Assets" Text="&#xE76D;" FontSize="16" TextOptions.TextRenderingMode="Grayscale"/>
Run Code Online (Sandbox Code Playgroud)

我追求的效果是左侧3个图标中的一个: SketchPad工具栏

这是Window 10 Sketchpad中工具栏的屏幕截图(应用了Creators更新之后)。

编辑:我知道如何更改文本颜色,我试图弄清楚如何获得“部分填充”效果(屏幕截图中的蓝色,黑色和黄色)。

Edit2:必须显示2个不同的字形才能实现此效果。在最后一次更新中,背景所需的字形已添加到Segoe MDL2字体中。感谢mm8向我指出正确的方向。

XAML:

<Style x:Key="SymbolText" TargetType="{x:Type TextBlock}">
    <Setter Property="FontSize" Value="16"/>
    <Setter Property="UseLayoutRounding" Value="True"/>
    <Setter Property="TextAlignment" Value="Center"/>
    <Setter Property="VerticalAlignment" Value="Center"/>
    <Setter Property="FontFamily" Value="Segoe MDL2 Assets"/>
    <Setter Property="TextOptions.TextRenderingMode" Value="Grayscale"/>
</Style>

<StackPanel Orientation="Horizontal">
    <Grid Margin="4">
        <TextBlock Text="&#xE88F;" Style="{StaticResource SymbolText}" Foreground="OrangeRed"/>
        <TextBlock Text="&#xE76D;" Style="{StaticResource SymbolText}"/>
    </Grid>
    <Grid Margin="4">
        <TextBlock Text="&#xF0C6;" Style="{StaticResource SymbolText}" Foreground="LightGreen"/>
        <TextBlock Text="&#xED63;" Style="{StaticResource SymbolText}"/>
    </Grid>
    <Grid Margin="4">
        <TextBlock Text="&#xE891;" Style="{StaticResource SymbolText}" Foreground="LightBlue"/>
        <TextBlock Text="&#xE193;" Style="{StaticResource SymbolText}"/>
    </Grid>
</StackPanel>
Run Code Online (Sandbox Code Playgroud)

结果: 在此处输入图片说明

mm8*_*mm8 7

Foreground属性设置为Brush

<TextBlock x:Key="PenSymbol" x:Shared="False" Foreground="Red" FontFamily="Segoe MDL2 Assets" Text="&#xE76D;" FontSize="16"/>
Run Code Online (Sandbox Code Playgroud)

否则,可以通过直接在彼此之上绘制字形来实现分层和着色效果,如 MSDN 文档中所述:https: //learn.microsoft.com/en-us/windows/uwp/style/segoe-ui-symbol -字体

在此输入图像描述

  • 谢谢,我以前读过该页;它说你可以做到这一点,但没有说如何做到。它也适用于 UWP,因此我什至不完全确定您是否可以在 WPF 中执行相同的操作。我还更新了原来的问题,以更清楚地表明我不想改变前景。 (3认同)

Mik*_*nov 5

您可以将一个 gliph 放在另一个 gliph 上并以这种方式对其进行着色。例子:

<Grid>
    <FontIcon Foreground="#f8d876" FontFamily="Segoe MDL2 Assets" Glyph="&#xE8D5;" />
    <FontIcon  FontFamily="Segoe MDL2 Assets" Glyph="&#xE8B7;" />
</Grid>
Run Code Online (Sandbox Code Playgroud)

结果:

在此处输入图片说明