2016-06-23 14 views
2

Ich habe Probleme mit benutzerdefinierten Schriftarten in meiner Windows Phone 8.1 MVVM-App.Benutzerdefinierte Schriftarten können zur Laufzeit nicht angezeigt werden - Windows Phone 8.1 MVVM - FontAwesome

Ich benutze FontAwesome Symbole. Ich habe die FontAwesome-Schriftartdatei in mein Projekt eingefügt. Wenn ich ein statisches Steuerelement wie dieses setze, funktioniert es perfekt;

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

Aber was ich brauche ist, dass dies dynamisch funktioniert. Ich habe ein Hub-Steuerelement auf der Hauptseite der App, mit ListViews in jedem Hub-Bereich. Diese sind an eine Sammlung von benutzerdefinierten Objekten gebunden, die aus einer API-Antwort stammen. Beim Erstellen der Auflistung von Objekten sucht der Code nach einer Markierung in der Antwort und legt das FontAwesome-Symbol abhängig vom Marker dynamisch fest.

Hub Abschnitt Code:

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

Und hier ist die genehmigte Vorlage, die an diese bindet:

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

Die Vorlage enthält einen Textblock, die an die Eigenschaft Symbol meines Objekt bindet. Dies soll dann das entsprechende FontAwesome Symbol angezeigt werden, sondern zeigt nur die Unicode des Symbols:

enter image description here

Ich habe versucht, die Definition der Schriftfamilie der Hub Steuerung aus dem Code hinter in der Ansicht, aber es hat keine Wirkung:

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

Irgendwelche Ideen, wie man diese Ikonen dynamisch zur Anzeige bringt ...? Dank

Antwort

0

Ich löste dies mit einem Problem zu umgehen. Die Symbole in meiner ListView werden immer nur 1 von 5 möglichen Icons sein. Anstatt also den Unicode zu setzen, habe ich in der Template-Definition 5 verschiedene Textbox-Objekte erstellt, eines für jedes Icon. Der Unicode ist statisch, daher ist der dynamische Aspekt die Sichtbarkeit jedes Objekts. Ich erstellte entsprechende XAML-Sichtbarkeitseigenschaften für das benutzerdefinierte Objekt. Danach wird das Stil-Objekt seiner Sichtbarkeit Eigenschaft gebunden, etwa so:

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

Dann, wenn ich die Objektsammlung von der API-Antwort zu erstellen, I die geeignete Sichtbarkeit Eigenschaft die dem Marker Visible gemäß sein in die Antwort.

Ich möchte eine etwas elegantere Lösung als das, aber im Wesentlichen funktioniert es ...

0

sollten Sie in der Lage sein, es so zu tun:

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

und Fontfamily wie folgt festgelegt:

Hub.FontFamily = fontFam 
+0

Leider hat das nicht funktioniert. Es zeigt nur noch den Unicode. Wenn ich den Text als Unicode einstelle, funktioniert es. Aber es ist das {Bindungssymbol}, das es vermasselt. Fast so, als wäre die Schriftart geladen, nachdem das Steuerelement erstellt wurde – odinel