为ImageBrush添加加载指示器

本文关键字:指示器 加载 添加 ImageBrush | 更新日期: 2023-09-27 18:11:46

我有以下代码在silverlight windows phone:

 <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线程?(也就是说,我想在一个模板中使用这个很多列表框项)

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

为ImageBrush添加加载指示器

您可以使用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,如代码所示。(试着移除它,看看是否对你有效)。

我希望这对你有帮助。

点击此链接。在这里,作者解释了进度指示器和使用Dispatcher使用不同的线程。BeginInvoke完成后,您可以切换进度条的可见性,并显示图像。

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

编辑

我怎么能调用包含称为"bmpBackground_ImageOpened"的图像的列表框来删除一个孩子?实际上,我想调用这个特定BitmapImage的父listboxItem,这样我就可以删除一个子(加载图像)。