Wp7 ListView使用图像组件不显示图像,直到滚动

本文关键字:图像 显示图 滚动 显示 ListView 组件 Wp7 | 更新日期: 2023-09-27 18:12:10

我有一个listview派生类,它创建了一堆用户控件,这些控件是面板派生类,每个控件包含几个控件,最重要的是图像控件(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。没有,这应该防止延迟加载图像(它们在我的资源中,而不是在web上)。

我也试过使用ImageOpened事件,但这不起作用。

任何想法吗?

谢谢,猪

Wp7 ListView使用图像组件不显示图像,直到滚动

经过几个小时的调试,我偶然发现了一个简单的解决方案。尽管我重写了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
}

我仍然需要在自定义控件的构造函数中手动设置图像控件的宽度和高度属性,如下所示:

这个修复了这个问题:

  m_labelIcon.Width = getIconSizeToUseInPixels();
  m_labelIcon.Height = getIconSizeToUseInPixels();