预加载资源程序集?

时间:2013-01-08 21:54:04

标签: c# wpf xaml

我在一个窗口上有一个组合框,它使用外部资源程序集为它的字体,它的运行速度非常慢(拉下7-8秒)。

<ComboBox ItemTemplate="{StaticResource LangComboboxItemTemplate}" 
x:Name="Lang_Cbx" Width="295" ItemsSource="{Binding Locales}" Height="32" 
FontFamily="/FontLibrary;component/Fonts/Font.CompositeFont#Font"
SelectedValue="{Binding CurrentLanguage}"  SelectedValuePath="LocaleId"  
/>

当我删除'FontFamily'属性时,组合框按预期运行。

有更好的方法吗?可能要预加载资源程序集吗?

(使用VS2010&amp; .Net 4.0,资源程序集约为40MB。)

1 个答案:

答案 0 :(得分:1)

在App.xaml中:

<Application.Resources>
    <FontFamily x:Key="FontFamilyComboBox">/FontLibrary;component/Fonts/Font.CompositeFont#Font</FontFamily>
</Application.Resources>

在视图中:

FontFamily="{DynamicResource FontFamilyComboBox}"

这将导致资源在应用程序启动时加载(您将“支付”那些7-8秒),但组合将按预期运行。

您也可以使用StaticResource而不是DynamicResource,但如果程序集的加载速度太慢,则视图可能会在资源可用之前开始初始化并导致抛出异常。