嘿,我正在尝试创建一个BarCode输入框。在其上,文本块显示文本输入在指定条形码类型中的外观预览。 我有一堆.TTF文件是条形码字体,它们已经在WinForms应用程序中使用,所以我确信它们是正确的。我尝试使用以下方法将它们加载到内存中(不想安装它们):
sBarCodeFonts = new PrivateFontCollection();
unsafe
{
fixed (byte* p = Resources.Code39)
{
IntPtr MyIntPtr = (IntPtr)p;
sBarCodeFonts.AddMemoryFont(MyIntPtr, Resources.Code39.Length);
}
fixed (byte* p = Resources.Code128b)
{
IntPtr MyIntPtr = (IntPtr)p;
sBarCodeFonts.AddMemoryFont(MyIntPtr, Resources.Code128b.Length);
}
fixed (byte* p = Resources.i2of5)
{
IntPtr MyIntPtr = (IntPtr)p;
sBarCodeFonts.AddMemoryFont(MyIntPtr, Resources.i2of5.Length);
}
fixed (byte* p = Resources.ean13)
{
IntPtr MyIntPtr = (IntPtr)p;
sBarCodeFonts.AddMemoryFont(MyIntPtr, Resources.ean13.Length);
}
}
这似乎正确加载了PrivateFontCollection,quickwatch表示如此。
在Barcode类中,我有一个MyFontFamily属性,它包含与加载文件对应的System.Media.FontFamily。 此属性加载如下:
MyFontFamily = new System.Windows.Media.FontFamily(sBarCodeFonts.Families[0].Name);
它似乎也正确加载。
然后,我有一个Barcode对象,我正在使用TextBlock来显示它的文本,使用它的FontFamily:
<TextBlock Text="{Binding Path=MyBarcode.TextContent, RelativeSource={RelativeSource AncestorType={x:Type UserControl}, Mode=FindAncestor}, Mode=OneWay}"
FontFamily="{Binding Path=MyBarcode.MyFontFamily, RelativeSource={RelativeSource AncestorType={x:Type UserControl}, Mode=FindAncestor}, Mode=OneWay}"
Name="txt"
Grid.Row="2" />
TextBlock每次都使用默认字体显示文本。我已经调试过,并且FontFamily被正确设置为之前C#代码中的一个已加载的。
任何线索?
感谢。
编辑: 为了简化问题,我创建了一个非常快速和肮脏的测试应用程序来加载TTF并显示它,这是唯一的代码(除了只有网格的XAML):
System.Windows.Media.FontFamily lFamily = new System.Windows.Media.FontFamily(new Uri(@"E:\Prototypes\TestApp\Resources\Code128b.ttf", UriKind.Absolute), "Code128bWin");
TextBlock lTextBlock = new TextBlock();
lTextBlock.Text = "jsldkasjLKJOSDIFUEWR32849792837.,´` ";
lTextBlock.FontFamily = lFamily;
lTextBlock.FontSize = 50.0;
grid.Children.Add(lTextBlock);
它仍显示默认字体。
答案 0 :(得分:2)
<FontFamily x:Key="MyFont">/WpfTest;component/Resources/#Airplanes in the Night Sky</FontFamily>
<TextBlock FontFamily="{StaticResource MyFont}">Hello world</TextBlock>
鉴于当你打开.ttf时,“字体名称:..”是“夜空中的飞机”,你的项目命名空间是“WpfTest”,你将字体拖到一个名为“Resources”的文件夹中
答案 1 :(得分:0)
我不知道您正在使用的方法,但我已成功在WPF应用程序中嵌入字体,然后将文件作为资源添加到项目中,然后在标记中创建WPF / XAML资源以引用字体文件(使用包Uri)。这不需要在机器上安装字体 - 它们嵌入在.exe或.dll文件中。
答案 2 :(得分:0)
我没有找到任何答案。 但我找到了一个我在互联网上没有看到的解决方案。
我遵循建议做一个文件夹并将所有文件标记为资源。 但我需要枚举它们,这是我的主要问题,因为我需要将所有内容加载到我的屏幕而不在某处记录名称。我只是想简单地将另一种字体拖放到该文件夹并列出它。
我发现这是列出我resources/fonts
文件夹
Fonts.GetFontFamilies(new Uri("pack://application:,,,/resources/fonts/#"))
我希望它可以帮助您整理字体。