добавление индикатора загрузки для ImageBrush - PullRequest
1 голос
/ 18 октября 2011

У меня есть следующий код в 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) загружается, и удалять егокогда изображение загружено?

Загружаются ли изображения в фоновом потоке?Или они блокируют основной поток пользовательского интерфейса?(т.е. я хотел бы использовать это в шаблоне для множества элементов списка)

ОБНОВЛЕНИЕ Я попробовал этот код и загрузил большое изображение (70MP), и пока изображение загружалось, основной поток пользовательского интерфейса приложения не застыл

Ответы [ 3 ]

0 голосов
/ 18 октября 2011

только что добавлено в BitmapImage: ImageOpened = "bmpBackground_ImageOpened", и это вызывает метод, чтобы я мог удалить дочерний элемент (элемент загрузки инструментария).

РЕДАКТИРОВАТЬ

как я могу вызвать этот список, содержащий изображение с именем "bmpBackground_ImageOpened", чтобы удалить дочерний элемент? Практически я хочу вызвать родительский listboxItem этого пространственного BitmapImage, чтобы я мог удалить дочерний элемент (загрузочное изображение).

0 голосов
/ 18 октября 2011

Вы можете использовать ProgressOverlay или PerformanceProgressBar. Вот пример с 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 в его «Содержимое», как показано в коде. (попробуйте удалить его и посмотреть, работает ли он у вас).

Надеюсь, это поможет:)

0 голосов
/ 18 октября 2011

Проверьте эту ссылку . Здесь автор объяснил о показателях прогресса и использовании различных потоков с помощью Dispatcher.BeginInvoke После этого вы можете переключать видимость индикатора выполнения и отображать изображение. Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...