我正在尝试从网站加载新闻列表,所以首先我请求获取新闻(使用缩略图),然后使用Binding功能,我将Fetched新闻分配到我的列表框中,包含图像(ImageUrl)。
<ListBox Name="lstNews">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid Margin="0,0,12,12" Width="180" Height="180">
<Grid.Background>
<ImageBrush ImageSource="{Binding ImageUrl}" />
</Grid.Background>
<StackPanel Background="#AA000000" VerticalAlignment="Bottom" Height="60" >
<TextBlock TextWrapping="Wrap" VerticalAlignment="Bottom" TextAlignment="Center" Text="{Binding Title}" />
</StackPanel>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
它运行正常,但UI会冻结,直到图像显示出来。我该如何解决?
答案 0 :(得分:6)
实际上,默认情况下,BitmapImages会加载UI线程,这会导致阻塞。在您的xaml中,您应该能够执行以下操作:
<ImageBrush>
<ImageBrush.ImageSource>
<BitmapImage CreateOptions="BackgroundCreation" UriSource="{Binding ImageUrl}"/>
</ImageBrush.ImageSource>
</ImageBrush>
确保为CreateOptions指定BackgroundCreation。有关详细信息,我个人认为此blog post非常有用。
答案 1 :(得分:0)
您是否测试过以确保在注释掉ImageBrush系列时UI不会冻结?我相信自动转换会从ImageUrl创建一个BitmapImage,它通常会加载到后台线程上,因此您的UI线程不应该阻塞。有可能其他东西一直在阻止UI,例如需要布局的文本过多,或者数据层代码将数据提供给列表。