簡體   English   中英

無法獲取自定義字體以在運行時顯示-Windows Phone 8.1 MVVM-FontAwesome

[英]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="&#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,該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="&#xf07a;" Style="{ThemeResource ListViewItemTripNameTextBlockStyle}" 
                   VerticalAlignment="Center" Visibility="{Binding VisGeneric}" />

然后,當我根據API響應創建對象集合時,根據響應中的標記,將適當的可見性屬性設置為Visible。

我想要一個比這更優雅的解決方案,但從本質上講,它可以工作...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM