嘿,我想創建一個條形碼輸入框。在它上面,文本塊顯示了文本輸入在指定的條碼類型中的樣子。 我有一堆.TTF文件是條形碼字體,它們已用於WinForms應用程序,所以我相信它們是正確的。我試圖把它們加載到內存(不想安裝它們)使用:加載和使用TextBlock中的條形碼字體
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類中,我有一個MyFontFamily屬性,其中包含對應於加載文件的System.Media.FontFamily。 這個屬性被加載這樣的:
MyFontFamily = new System.Windows.Media.FontFamily(sBarCodeFonts.Families[0].Name);
而且它似乎正確加載爲好。
然後,我有一個條形碼的對象,我使用一個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);
它仍然顯示默認字體。
這沒有奏效:( – 2011-05-03 16:28:27
工作正常,當我測試它時,你確定你已將WpfTest重命名爲你的項目命名空間名稱,並且你的字體位於名爲Resources的文件夾中,字體上的Build Action是「Resources」,而你將FontFamily聲明放入您使用的xaml文件的參考資料部分,並將「Airplanes ..」更改爲打開ttf文件時看到的字體名稱? – 2011-05-03 17:24:05
Duh!就是這樣,非常感謝您,我錯過的主要是構建資源的行動 – 2011-05-03 20:58:08