Эй, я пытаюсь создать поле ввода 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 для отображения егоtext, используя его 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);
И он по-прежнему показывает шрифт по умолчанию.