2016-06-23 1 views
2

J'ai des problèmes avec les polices personnalisées dans mon application Windows Phone 8.1 MVVM. J'utilise les icônes FontAwesome. J'ai inclus le fichier de police FontAwesome dans mon projet. Quand je mets un contrôle statique comme celui-ci, cela fonctionne parfaitement;Impossible d'afficher les polices personnalisées à l'exécution - Windows Phone 8.1 MVVM - FontAwesome

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

Cependant, ce dont j'ai besoin, c'est que cela fonctionne dynamiquement. J'ai un contrôle Hub sur la page principale de l'application, avec ListViews dans chaque section Hub. Ceux-ci sont liés à une collection d'objets personnalisés, renseignés à partir d'une réponse API. Lors de la création de la collection d'objets, le code recherche un marqueur dans la réponse et définit dynamiquement l'icône FontAwesome en fonction du marqueur.

Hub Code article:

<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> 

Et voici le modèle approuvé qui se lie à ceci:

<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> 

Le modèle contient un TextBlock qui se lie à la propriété de l'icône de mon objet. Ceci est censé afficher l'icône de FontAwesome appropriée, mais affiche simplement l'unicode de l'icône:

enter image description here

J'ai essayé de définir la famille de police du contrôle Hub du code sous-jacent dans la vue, mais il n'a aucun effet:

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

Des idées sur la façon d'obtenir dynamiquement ces icônes à afficher ...? Merci

Répondre

0

Je résolu cela avec une solution de contournement. Les icônes de ma ListView ne seront jamais que l'une des 5 icônes possibles. Ainsi, au lieu de définir l'Unicode, j'ai créé 5 objets de zone de texte différents dans la définition du modèle, un pour chaque icône. L'Unicode est statique, donc l'aspect dynamique est à la place la Visibilité de chaque objet. J'ai créé les propriétés de visibilité XAML correspondantes sur l'objet personnalisé. Après cela, l'objet de style est lié à sa propriété de visibilité, comme ceci:

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

Puis, quand je crée la collection d'objets de la réponse de l'API, je définissez la propriété de visibilité appropriée pour être visible, selon le marqueur dans la réponse. Je voudrais une solution légèrement plus élégante que cela, mais essentiellement cela fonctionne ...

0

Vous devriez être en mesure de le faire comme ceci:

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

et mis en FontFamily comme ceci:

Hub.FontFamily = fontFam 
+0

Il montre encore juste l'Unicode. Si je définis le texte comme étant unicode, cela fonctionne. Mais c'est {l'icône de liaison} que ça gâche. Presque comme si la police était chargée après la création du contrôle – odinel