我的应用程序中有两个简单的ResourceDictionary
。
Converters.xaml
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:l="clr-namespace:MyApp" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<l:BitmapToBitmapSourceConverter x:Key="BitmapToBitmapSourceConverter"/>
<l:ObjectToVisibilityConverter x:Key="ObjectToVisibilityConverter"/>
</ResourceDictionary>
Styles.xaml
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style x:Key="ComboBoxBase" TargetType="{x:Type ComboBox}">
<Setter Property="ItemTemplate">
<Setter.Value>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Image Height="16" Margin="0,2,2,2" Source="{Binding Image, Converter={StaticResource BitmapToBitmapSourceConverter}}" VerticalAlignment="Center" Width="16"/>
<TextBlock Text="{Binding}" VerticalAlignment="Center"/>
</StackPanel>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
当它们在我的MainWindow.xaml中合并时:
<Window>
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Properties/Converters.xaml"/>
<ResourceDictionary Source="Properties/Styles.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
<Canvas>
<ComboBox ItemsSource="{Binding Path=Items}" SelectedItem="{Binding Mode=TwoWay, Path=SelectedItem}" Style="{StaticResource ComboBoxBase}"/>
我在BitmapToBitmapSourceConverter
内找到Styles.xaml
时会收到异常,因为它已在另一个ResourceDictionary
内定义。
有人建议我将资源从MainWindow.xaml
移到App.xaml
,以避免出现这种情况。我做到了,突然......戏剧!我不再得到那个例外,但我的应用程序加载时间已经变长了10倍。有时在我的屏幕上显示的时间超过5秒,通常Window
内容为纯白色1秒或2秒。
我尝试从exe
本身运行我的应用程序,我尝试在Debug
和Release
模式下运行它......没有。移动我的资源文件后无法获得良好的性能,我实际上无法将应用程序交付给我的客户。
任何人都可以解释为什么并为此提供一个好的解决方案?!