#c# #silverlight #windows-phone-7.1 #windows-phone-7
#c# #silverlight #windows-phone-7.1 #windows-phone-7
Вопрос:
У меня есть класс, производный от 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.Нет, что должно предотвратить задержку загрузки изображений (они находятся в моем ресурсе, а не в Интернете).
Я также пытался использовать событие ImageOpened, но это не работает.
Есть мысли?
Спасибо, свинья
Комментарии:
Ответ №1:
После нескольких часов отладки я наткнулся на простое решение. Несмотря на то, что я переопределял 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();