我的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图标。
Hub Section代码:
<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,它绑定到我对象的Icon属性。这应该会显示相应的FontAwesome图标,而只显示图标的unicode:
我尝试从视图中的代码中定义Hub控件的字体系列,但它没有效果:
Hub.FontFamily = new FontFamily("ms-appx:///Assets/Fonts/FontAwesome.otf#FontAwesome");
有关如何动态显示这些图标的任何想法......?感谢
答案 0 :(得分:0)
你应该能够这样做:
FontFamily fontFam = new FontFamily("ms-appx:///Assets/Fonts/FontAwesome.otf#FontAwesome");
并像这样设置FontFamily:
Hub.FontFamily = fontFam
答案 1 :(得分:0)
我通过解决方法解决了这个问题。我的ListView中的图标只能是5种可能的图标中的一种。因此,我没有设置unicode,而是在模板定义中创建了5个不同的文本框对象,每个图标对应一个。 unicode是静态的,因此动态方面是每个对象的可见性。我在自定义对象上创建了相应的XAML Visibility属性。在此之后,样式对象绑定到其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响应创建对象集合时,根据响应中的标记,将相应的visibility属性设置为Visible。
我想要一个比这更优雅的解决方案,但基本上它可以工作......