无法在运行时显示自定义字体 - 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="" 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。这应该会显示适当的 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 响应创建对象集合时,根据响应中的标记,我将适当的可见性 属性 设置为可见。
我想要一个比这更优雅的解决方案,但基本上它是有效的...
我在 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。这应该会显示适当的 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 响应创建对象集合时,根据响应中的标记,我将适当的可见性 属性 设置为可见。
我想要一个比这更优雅的解决方案,但基本上它是有效的...