WPF UserControl vb.net不会显示自定义字体系列

时间:2017-02-08 18:13:15

标签: wpf vb.net winforms xaml visual-studio-2015

我是VB.net窗体中WPF互操作性的新手。

我正在创建一个Windows窗体应用程序,我正在尝试使用自定义字体系列的ElementHost添加自定义用户控件。

我已经创建了一个带有标签的自定义按钮,我已经在Google Fonts中应用了自定义字体“Raleway”,我已将其加载到参考资料中。

<UserControl x:Class="ButtonDark"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         xmlns:local="clr-namespace:prjButtonTestFont"
         mc:Ignorable="d" 
         d:DesignHeight="50" d:DesignWidth="150">

<Button Content="Button" BorderBrush="{x:Null}" Foreground="{x:Null}" >
    <Button.Template>
        <ControlTemplate TargetType="{x:Type Button}">
            <Border x:Name="Border" Background="#ff332d2f" CornerRadius="4" BorderBrush="#ff4e4749" BorderThickness="4">
                <Label x:Name="Labelx" Content="Click" FontFamily="/prjButtonTestFont;component/Resources/#Raleway Thin" HorizontalAlignment="Center" VerticalAlignment="Center"  Foreground="#ff4e4749" FontSize="24" />
            </Border>
            <ControlTemplate.Triggers>
                <Trigger Property="IsMouseOver" Value="true">
                    <Setter TargetName="Border" Property="BorderBrush"  Value="green"/>
                    <Setter TargetName="Labelx" Property="Foreground" Value="green"/>
                </Trigger>
                <Trigger Property="IsPressed" Value="true">
                    <Setter TargetName="Border" Property="BorderBrush"  Value="white"/>
                    <Setter TargetName="Labelx" Property="Foreground" Value="white"/>
                </Trigger>
            </ControlTemplate.Triggers>
        </ControlTemplate>
    </Button.Template>
</Button>

xaml设计预览的图像正确显示字体 enter image description here

Windows窗体的图像,其中usercontrol按钮显示错误的字体 enter image description here

问题是我运行应用程序时不会显示字体,但它会在xaml设计预览窗口中正确显示。

我已经尝试了以下所有字体文件路径,它们都在xaml设计预览窗口中显示正确的字体,但在运行应用程序时却没有。

FontFamily =“./# Raleway Thin”

FontFamily =“/ prjButtonTestFont; component / Resources / #Raleway Thin”

FontFamily =“../ Resources /#Raleway Thin”

FontFamily =“../# Raleway Thin”

FontFamily =“Raleway-Thin.ttf /#Raleway Thin”

FontFamily =“../ Resources / Raleway-Thin.ttf /#Raleway Thin”

FontFamily =“/ prjButtonTestFont; component / Resources / Raleway-Thin.tff /#Raleway Thin”

FontFamily =“/ Resources / Raleway-Thin.ttf#Raleway Thin”

FontFamily =“Raleway-Thin.ttf#Raleway Thin”

FontFamily =“Raleway-Thin.TTF#Raleway Thin”

FontFamily =“/ Resources / Raleway-Thin.TTF#Raleway Thin”

我也尝试将FontFamily应用于并获得相同的结果!

我正在寻找任何解决方案,无论是以编程方式还是通过xaml编程。我只需要在应用程序启动后显示字体。

2 个答案:

答案 0 :(得分:0)

这个问题也回答了我的问题 Reference custom view in other project with custom font

问题是'Build Action'未设置为'Resource'。为此,请在“资源”文件夹中选择字体,然后在“属性”窗口中将“构建操作”设置为“资源”。

现在,程序运行时会显示字体。

答案 1 :(得分:0)

我显示字体的方式是参考字体的绝对路径。每当您使用位于中的资源(而不是应用程序)时,您几乎总是需要绝对路径

FontFamily="pack://application:,,,/YourAssemblyName;component/Fonts/#Actual Font Name"

修改:值得一提的是,您提供的样本均未反映有效(绝对)路径。 /prjButtonTestFont;component/Resources/#Raleway Thin非常接近,但并不完全正确。另外,我会仔细检查字体名称是否有效。要执行此操作,只需打开实际的字体文件,并确保文档顶部的名称与项目中的名称相同。