为ImageBrush添加加载指示器

时间:2011-10-18 09:24:49

标签: c# silverlight windows-phone-7

我在windowslight手机的silverlight中有以下代码:

 <Border CornerRadius="0" x:Name="brdTest" BorderBrush="Black" BorderThickness="4" Width="100" Height="60">
                                <Border.Background>
                                    <ImageBrush x:Name="backgroundImageBrush" Stretch="Fill">
                                        <ImageBrush.ImageSource>
                                            <BitmapImage x:Name="bmpBackground" UriSource="http://www.images.com/1.jpg">
                                            </BitmapImage>
                                        </ImageBrush.ImageSource>
                                    </ImageBrush>
                                </Border.Background>
                            </Border>

如何在图像加载时从图像位置的silverlight工具包添加加载活动指示器(http://www.images.com/1.jpg)并在图像加载时将其删除?

图像是否在后台线程中加载?或者他们阻止主UI线程? (即我想在模板中使用它来处理大量列表框项目)

更新我尝试了这段代码并加载了一张大图片(70MP),当图片加载时,应用的主UI线程没有冻结

3 个答案:

答案 0 :(得分:0)

检查this link。在这里,作者解释了进度指示器并使用Dispatcher.BeginInvoke使用不同的线程 完成后,您可以切换进度条的可见性,并显示图像。 希望这会有所帮助。

答案 1 :(得分:0)

刚刚添加到BitmapImage:ImageOpened =“bmpBackground_ImageOpened”,这调用一个方法,以便我可以删除一个子(工具包加载项)。

编辑

如何调用包含名为“bmpBackground_ImageOpened”的图像的列表框来删除子项?实际上我想调用这个空间BitmapImage的父listboxItem,以便我可以删除一个孩子(加载图像)。

答案 2 :(得分:0)

您可以使用ProgressOverlayPerformanceProgressBar。以下是ProgressOverlay

的示例
<Grid>
    <Border CornerRadius="0" x:Name="brdTest" BorderBrush="Black" BorderThickness="4" Width="400" Height="360">
        <Border.Background>
            <ImageBrush x:Name="backgroundImageBrush" Stretch="Fill">
                <ImageBrush.ImageSource>
                    <BitmapImage x:Name="bmpBackground" 
                                 UriSource="http://www.bestmotherofthegroomspeeches.com/wp-content/themes/thesis/rotator/sample-4.jpg"
                                 ImageOpened="bmpBackground_ImageOpened">
                    </BitmapImage>
                </ImageBrush.ImageSource>
            </ImageBrush>
        </Border.Background>
    </Border>

    <Controls:ProgressOverlay 
        x:Name="overlay"
        Width="400" Height="360">
        <Controls:ProgressOverlay.Content>
            <StackPanel>
                <TextBlock HorizontalAlignment="Center">Loading Image</TextBlock>
                <toolkit:PerformanceProgressBar IsIndeterminate="True"/>
            </StackPanel>
        </Controls:ProgressOverlay.Content>
    </Controls:ProgressOverlay>
</Grid>

bmpBackground_ImageOpened事件处理程序中,您添加overlay.Hide();,隐藏了OverlayProgress

这种方法似乎比单独使用PerformanceProgressBar更好,因为它可以让用户了解正在发生的事情。

PS:OverlayProgress对我来说无效,直到我在代码中显示的“内容”中添加了PerformanceProgressBar。 (尝试删除它,看看它是否适合你)。

我希望这会有所帮助:)