[英]Can't get custom fonts to display at runtime - Windows Phone 8.1 MVVM - FontAwesome
我在Windows Phone 8.1 MVVM應用程序中無法使用自定義字體。
我正在使用FontAwesome圖標。 我在項目中包含了FontAwesome字體文件。 當我設置這樣的靜態控件時,它可以完美運行;
<TextBlock x:Name="txtTest" Grid.Row="3" Text="" 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,該TextBlock綁定到我的對象的Icon屬性。 然后應該顯示適當的FontAwesome圖標,但只顯示圖標的unicode:
我試圖從視圖中的代碼定義Hub控件的字體系列,但是沒有效果:
Hub.FontFamily = new FontFamily("ms-appx:///Assets/Fonts/FontAwesome.otf#FontAwesome");
關於如何動態顯示這些圖標的任何想法...? 謝謝
您應該可以這樣做:
FontFamily fontFam = new FontFamily("ms-appx:///Assets/Fonts/FontAwesome.otf#FontAwesome");
並這樣設置FontFamily:
Hub.FontFamily = fontFam
我用一種解決方法解決了這個問題。 我的ListView中的圖標只會是5個可能圖標中的1個。 因此,我沒有設置unicode,而是在模板定義中創建了5個不同的文本框對象,每個圖標一個。 unicode是靜態的,因此動態方面是每個對象的可見性。 我在自定義對象上創建了相應的XAML可見性屬性。 之后,將樣式對象綁定到其Visibility屬性,如下所示:
<!--Generic (shopping cart icon)-->
<TextBlock FontFamily="/Assets/Fonts/FontAwesome.otf#FontAwesome" Grid.Column="0" Text="" Style="{ThemeResource ListViewItemTripNameTextBlockStyle}"
VerticalAlignment="Center" Visibility="{Binding VisGeneric}" />
然后,當我根據API響應創建對象集合時,根據響應中的標記,將適當的可見性屬性設置為Visible。
我想要一個比這更優雅的解決方案,但從本質上講,它可以工作...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.