C# WPF-从自定义字体显示符号时出现问题

C# WPF-从自定义字体显示符号时出现问题,c#,wpf,fonts,C#,Wpf,Fonts,我有一个自定义字体。字体包含特定地址的符号。我想在文本块中显示一个符号 字体ttf文件位于我的应用程序的“字体”文件夹中。我已经将字体包含在应用程序中,并将BuildAction设置为Resource XAML 我从字体中的特定地址加载符号 但是我的应用程序无法显示符号。相反,我看到了一个 这是我的密码。请注意样式和两个文本块 同样的问题 有什么问题吗 我也在我的计算机上安装了字体,但没有成功。我不确定这是否是问题的根本原因,但是,您是否可以尝试在您的样式中使用TargetType属性,如下所示

我有一个自定义字体。字体包含特定地址的符号。我想在文本块中显示一个符号

字体ttf文件位于我的应用程序的“字体”文件夹中。我已经将字体包含在应用程序中,并将BuildAction设置为Resource

XAML 我从字体中的特定地址加载符号

但是我的应用程序无法显示符号。相反,我看到了一个

这是我的密码。请注意样式和两个文本块

同样的问题

有什么问题吗


我也在我的计算机上安装了字体,但没有成功。

我不确定这是否是问题的根本原因,但是,您是否可以尝试在您的样式中使用TargetType属性,如下所示:

<Window.Resources><Style x:Key="Foo" TargetType="TextBlock">
        <Setter Property="FontFamily" Value="pack://application:,,,/Main;component/Fonts/#MyFont" />
    </Style></Window.Resources>

您确定TextBlock正在使用吗?我会试试。如果你能在客户端电脑上安装字体,那么这是明智的。fontfamily的所有相对地址都存在内存泄漏。这是一个相对地址。除非您的url以c:\开头,否则它将是相对的。鉴于您有一个textblock,您正在显式设置样式,我认为将fontfamily定义为一个资源,并将textblock fontfamily直接设置为该资源,这将比您在那里所做的更清楚。TextElement.fontfamily肯定有效。确保MyFont实际上是字体名,Main是程序集的名称。或者只是写pack://application:,,,/Fonts/MyFont。正如我在问题中所写:字体的路径和名称应该是正确的。我已经检查过好几次了。
<Window x:Class="Main.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:Main"
    mc:Ignorable="d"
    Loaded="Window_Loaded"
    Title="MainWindow" Height="450" Width="800">

<Window.Resources>
    <Style x:Key="Foo">
        <Setter Property="TextElement.FontFamily" Value="pack://application:,,,/Main;component/Fonts/#GuardTools-Symbol-Bold" />
    </Style>
</Window.Resources>

<StackPanel Orientation="Vertical">
    <TextBlock Text="&#xe905;" Style="{StaticResource Foo}" />
    <TextBlock FontFamily="Segoe MDL2 Assets" Text="&#xE777;" />
    <TextBlock x:Name="txt" />
</StackPanel>
private void Window_Loaded(object sender, RoutedEventArgs e)
{
    txt.FontFamily = new FontFamily("pack://application:,,,/Main;component/Fonts/#GuardTools-Symbol-Bold");
    txt.Text = "\xe905";  // &#xe905
}
<Window.Resources><Style x:Key="Foo" TargetType="TextBlock">
        <Setter Property="FontFamily" Value="pack://application:,,,/Main;component/Fonts/#MyFont" />
    </Style></Window.Resources>