Загрузите и используйте шрифт штрих-кода в TextBlock - PullRequest
1 голос
/ 03 мая 2011

Эй, я пытаюсь создать поле ввода 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);

И он по-прежнему показывает шрифт по умолчанию.

Ответы [ 3 ]

2 голосов
/ 03 мая 2011
<FontFamily x:Key="MyFont">/WpfTest;component/Resources/#Airplanes in the Night Sky</FontFamily>

<TextBlock FontFamily="{StaticResource MyFont}">Hello world</TextBlock>

Учитывая, что при открытии .ttf «Имя шрифта: ..» равно «Самолеты в ночном небе», а пространство имен вашего проекта - «WpfTest», и вы перетаскивали шрифт в папку с именем «Ресурсы».

0 голосов
/ 26 марта 2014

Я не нашел ответа именно на это. Но я нашел решение, которого не увидел в интернете.

Я последовал рекомендации сделать папку и пометить все файлы внутри как Ресурсы. Но мне нужно было перечислить их, и это было моей главной проблемой, потому что мне нужно было загрузить все на мой экран, не записав где-нибудь имя. Я просто хочу добавить другой шрифт в эту папку и перечислить его.

Я нашел это решением для перечисления всех файлов в моей папке resources/fonts

Fonts.GetFontFamilies(new Uri("pack://application:,,,/resources/fonts/#"))

Я ожидаю, что это поможет вам организовать ваши шрифты.

0 голосов
/ 03 мая 2011

Я не знаю, какой метод вы используете, но я успешно встраивал шрифты в приложение WPF, добавив файлы в проект в качестве ресурсов, а затем создав ресурс WPF / XAML в разметке для ссылки.файл шрифта (используя пакет Uri).Для этого не требуется устанавливать шрифты на компьютере - они встроены в ваш файл .exe или .dll.

...