我是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编程。我只需要在应用程序启动后显示字体。
答案 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
非常接近,但并不完全正确。另外,我会仔细检查字体名称是否有效。要执行此操作,只需打开实际的字体文件,并确保文档顶部的名称与项目中的名称相同。