1

バーコード入力ボックスを作成しようとしています。その上で、テキストブロックは、指定されたバーコード タイプでテキスト入力がどのように見えるかのプレビューを表示しています。バーコード フォントである .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 が正しく読み込まれているように見えます。クイックウォッチはそのように示しています。

Barcode クラスには、読み込まれたファイルに対応する System.Media.FontFamily を含む MyFontFamily プロパティがあります。このプロパティは次のようにロードされます。

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# コードで読み込まれたものの 1 つに正しく設定されています。

手がかりはありますか?

ありがとう。

編集:問題を単純化しようとして、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);

それでもデフォルトのフォントが表示されます。

4

3 に答える 3

2
<FontFamily x:Key="MyFont">/WpfTest;component/Resources/#Airplanes in the Night Sky</FontFamily>

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

.ttf を開くと、"フォント名: .." は "Airplanes in the Night Sky" で、プロジェクトの名前空間は "WpfTest" で、フォントを "Resources" というフォルダーにドラッグしたとします。

于 2011-05-03T15:25:10.073 に答える
0

使用している方法についてはわかりませんが、ファイルをリソースとしてプロジェクトに追加し、マークアップで WPF/XAML リソースを作成してフォント ファイルを参照することで、以前に WPF アプリケーションにフォントを埋め込むことに成功しました。 (パックウリを使用)。これには、フォントをマシンにインストールする必要はありません。フォントは .exe または .dll ファイルに埋め込まれています。

于 2011-05-03T14:56:18.323 に答える