Изображение WPF: получение фактического размера после нескольких обновлений исходного кода - PullRequest
5 голосов
/ 21 февраля 2011

Я обновляю источник элемента управления изображения на основе выбора ComboBox.

После обновления источника изображения мне нужно прочитать значения ActualWidth и ActualHeight изображения

Iудалось это сработать при первом открытии диалога, используя событие Loaded элемента управления Image, но это событие, очевидно, не возникает каждый раз, когда я обновляю источник.

Есть ли способ получить фактический размеризображения загружаются в элемент управления после каждого обновления источника?

1 Ответ

0 голосов
/ 19 декабря 2011

Вы можете попытаться использовать событие sourceupdated изображения, но мне не всегда везет с этим.

Лучшее решение, в зависимости от вашего источника, - добавить обработчик для загрузки.

вы можете попробовать что-то вроде этого:

Dim src As BitmapImage = New BitmapImage()
src.BeginInit()
src.UriSource = tURI
src.CacheOption = BitmapCacheOption.OnLoad
src.EndInit()
imgImage.SetCurrentValue(Image.SourceProperty, src)
AddHandler src.DownloadCompleted, AddressOf ImageDownloadCompleted

, затем вы можете написать код для ImageDownloadCompleted, чтобы получить фактическую высоту и ширину изображения.

Чтобы получить фактическую ширину, я использую ширину исходного изображения, а не элемент управления изображением, как показано ниже:

Sub ImageDownloadCompleted(sender As Object, e As System.EventArgs)
    Dim src As BitmapImage
    Dim dwidth as Double
    Dim dheight as Double

    src = DirectCast(sender, BitmapImage)
    dwidth = src.Width 
    dheight = src.Height
    RemoveHandler src.DownloadCompleted, AddressOf ImageDownloadCompleted
End Sub
...