2016-06-23 50 views
2

我在Windows Phone 8.1 MVVM應用程序中遇到自定義字體問題。無法在運行時顯示自定義字體 - Windows Phone 8.1 MVVM - FontAwesome

我正在使用FontAwesome圖標。我在我的項目中包含了FontAwesome字體文件。當我設置這樣的靜態控制時,它完美地工作;

<TextBlock x:Name="txtTest" Grid.Row="3" Text="&#xf236;" Foreground="Black" FontSize="20" FontFamily="/Assets/Fonts/FontAwesome.ttf#FontAwesome"/> 

但是,我需要的是爲此動態工作。我在應用程序的主頁上有一個Hub控件,每個Hub部分都有ListViews。這些綁定到一組自定義對象,從API響應填充。創建對象集合時,代碼會在響應中查找標記,並根據標記動態設置FontAwesome圖標。

輪轂部代碼:

<HubSection x:Uid="hubApproved" Header="Approved" 
        DataContext="{Binding MyObjects.Approved}" 
        d:DataContext="{Binding MyObjects.Approved}" 
        HeaderTemplate="{ThemeResource HubSectionHeaderTemplate}" > 
      <DataTemplate> 
       <ListView 
        ItemsSource="{Binding}"             
        ItemTemplate="{ThemeResource ApprovedTemplate}"       
        IsItemClickEnabled="True" 
        ItemClick="ListView_ItemClick" 
        ContinuumNavigationTransitionInfo.ExitElementContainer="True"> 
       </ListView> 
      </DataTemplate> 
     </HubSection> 

這裏是批准模板結合本:

<DataTemplate x:Key="ApprovedTemplate"> 
    <StackPanel Margin="0,0,0,19" Background="{x:Null}" > 
     <TextBlock FontFamily="/Assets/Fonts/FontAwesome.ttf#FontAwesome" Text="{Binding Icon}" Foreground="Black" /> 
     <TextBlock Text="{Binding SupplierName}" Style="{ThemeResource ListViewItemTripNameTextBlockStyle}" />    
     <TextBlock Style="{ThemeResource ListViewItemSubheaderTextBlockStyle}" Text="{Binding StartDate}"></TextBlock> 
    </StackPanel> 
</DataTemplate> 

模板包含結合到我的對象的圖標屬性一個TextBlock。這是應該然後顯示適當FontAwesome圖標,而是隻顯示圖標的Unicode:

enter image description here

我試圖限定從視圖中的後面的代碼集線器控制的字體,但它沒有任何效果:

Hub.FontFamily = new FontFamily("ms-appx:///Assets/Fonts/FontAwesome.otf#FontAwesome"); 

如何動態獲取這些圖標可顯示任何想法...?由於

回答

0

我解決了這個用一種變通方法。我的ListView中的圖標將只能是5個可能圖標中的1個。因此,我不是設置unicode,而是在模板定義中創建了5個不同的文本框對象,每個圖標對應一個。 unicode是靜態的,所以動態方面是每個對象的可見性。我在自定義對象上創建了相應的XAML可見性屬性。在這之後,作風對象綁定到其Visibility屬性,像這樣:

<!--Generic (shopping cart icon)--> 
<TextBlock FontFamily="/Assets/Fonts/FontAwesome.otf#FontAwesome" Grid.Column="0" Text="&#xf07a;" Style="{ThemeResource ListViewItemTripNameTextBlockStyle}" 
        VerticalAlignment="Center" Visibility="{Binding VisGeneric}" /> 

然後當我從API響應創建對象集合,我設置相應的可見性屬性可見,根據該標誌的響應。

我想比這個稍微更優雅的解決方案,但本質上它的工作原理...

0

你應該能夠做到這一點是這樣的:

FontFamily fontFam = new FontFamily("ms-appx:///Assets/Fonts/FontAwesome.otf#FontAwesome"); 

並且fontFamily設置是這樣的:

Hub.FontFamily = fontFam 
+0

不幸的是,沒有工作。它仍然只是顯示unicode。如果我將文本設置爲unicode,它就可以工作。但是,這是弄糟它的{綁定圖標}。幾乎就好像在控件創建後加載字體一樣 – odinel

相關問題