Wp7 ListView с использованием компонента Image, не показывающего изображения до прокрутки - PullRequest
0 голосов
/ 22 октября 2011

У меня есть класс, производный от ListView, который создает группу пользовательских элементов управления, которые являются классами, производными от Panel, и содержат несколько элементов управления, каждый из которых наиболее важен - элемент управления Image (m_labelIcon).Я устанавливаю источник изображения для этого элемента управления динамически для одного из PNG в моем ресурсе:

Uri uri = new Uri("/MyApp;component/Common/Main/res/drawable/some_icon.png");
StreamResourceInfo resourceInfo = Application.GetResourceStream(uri);
BitmapImage bitmapSource = new BitmapImage();

bitmapSource.CreateOptions = BitmapCreateOptions.None;

bitmapSource.SetSource(resourceInfo.Stream);
m_labelIcon.Source = bitmapSource;

Однако, когда появляется представление списка, все изображения отсутствуют.Если прокрутить список до самого низа, а затем до самого верха, изображения начнут появляться.Я указал BitmapCreateOptions.None, который должен предотвращать задержку загрузки изображений (они находятся на моем ресурсе, а не в Интернете).

Я также пытался использовать событие ImageOpened, но это неработа.

Есть мысли?

Спасибо, свинья

1 Ответ

0 голосов
/ 02 ноября 2011

После нескольких часов отладки я наткнулся на простое решение. Хотя я переопределял ArrangeOverride () и MeasureOverride () примерно так:

protected override Size MeasureOverride(Size availableSize)
{
  Size panelDesiredSize = new Size();

  double height = Math.Max(getIconSizeToUseInPixels(),
    m_labelName.DesiredSize.Height);

  panelDesiredSize = new Size(availableSize.Width, height);

  return panelDesiredSize;
}

protected override Size ArrangeOverride(Size finalSize)
{
  double x = 0;
  double y = 0;

  m_labelName.Measure(finalSize);

  double iconWidth = getIconSizeToUseInPixels();
  Size iconSize = new Size(iconWidth, iconWidth);

  double nameWidth = m_labelName.DesiredSize.Width;
  double nameHeight = m_labelName.DesiredSize.Height;

  m_labelIcon.Arrange(new Rect(
    new Point(x, y), iconSize));

  m_labelName.Arrange(new Rect(
    new Point(iconWidth, y + (finalSize.Height - nameHeight) / 2),
    new Size(nameWidth, nameHeight)));
  m_labelName.Width = nameWidth;
  m_labelName.Height = nameHeight;

  return finalSize; // Returns the final Arranged size
}

Мне все еще нужно было установить свойства Width и Height элемента управления Image вручную в конструкторе моего настраиваемого элемента управления следующим образом:

ЭТА ИСПРАВЛЕНА ПРОБЛЕМА:

  m_labelIcon.Width = getIconSizeToUseInPixels();
  m_labelIcon.Height = getIconSizeToUseInPixels();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...