C# BitmapImage的延迟加载
我试图在WindowsPhone8的列表框中加载位图图像,并看到奇怪的行为。第一次显示页面时,列表框显示为空,但如果返回,则返回图像加载的页面。在我看来,图像似乎没有在需要时加载。这是我正在使用的代码(通过转换器):C# BitmapImage的延迟加载,c#,.net,windows-phone-8,windows-phone,bitmapimage,C#,.net,Windows Phone 8,Windows Phone,Bitmapimage,我试图在WindowsPhone8的列表框中加载位图图像,并看到奇怪的行为。第一次显示页面时,列表框显示为空,但如果返回,则返回图像加载的页面。在我看来,图像似乎没有在需要时加载。这是我正在使用的代码(通过转换器): 我尝试过创建选项,但没有效果。听起来可能是源代码设置后视图没有刷新。加载一个空列表框。然后加载所有图像。什么也看不出来啊!但是当你回到页面,魔术!它们都在那里,因为整个视图被重新绘制(现在使用图像源)。如果在返回应用程序之前关闭了该应用程序,则应再次看到一个空列表框,因为必须重置源
我尝试过创建选项,但没有效果。听起来可能是源代码设置后视图没有刷新。加载一个空列表框。然后加载所有图像。什么也看不出来啊!但是当你回到页面,魔术!它们都在那里,因为整个视图被重新绘制(现在使用图像源)。如果在返回应用程序之前关闭了该应用程序,则应再次看到一个空列表框,因为必须重置源。我不确定这在windows 8中是如何工作的,但您应该能够调用类似listbox.RefreshView()的函数来强制它重新绘制自身 听起来可能是源设置后视图没有刷新。加载一个空列表框。然后加载所有图像。什么也看不出来啊!但是当你回到页面,魔术!它们都在那里,因为整个视图被重新绘制(现在使用图像源)。如果在返回应用程序之前关闭了该应用程序,则应再次看到一个空列表框,因为必须重置源。我不确定这在windows 8中是如何工作的,但您应该能够调用类似listbox.RefreshView()的函数来强制它重新绘制自身 我实际上需要在我的ViewModel中的属性上调用
RaisePropertyChanged
,以强制更新,但您的回答为我指明了正确的方向。谢谢@teabags
奇怪的是,当我使用Pivot控件作为根元素时,这一点起了作用,但切换到Panorama肯定改变了事件顺序。我实际上需要调用ViewModel中属性的
RaisePropertyChanged
来强制更新,但您的回答为我指明了正确的方向。谢谢@teabags
奇怪的是,当我使用Pivot控件作为根元素时,这种方法起作用了,但切换到Panorama肯定改变了事件顺序。使用以下方法:
img.CreateOptions=BitmapCreateOptions.BackGround
分配
private void BitmapImage\u ImageFailed(对象发送方,例外RoutedEventTargets e)
{
BitmapImage img=新的BitmapImage();
img.UriSource=newURI(“您的本地图像”,UriKind.Relative);
}
你的本地形象。
无论如何,渲染图像需要时间,这是迄今为止我发现的最好、最快的方法使用以下方法:
img.CreateOptions=BitmapCreateOptions.BackGround
分配
private void BitmapImage\u ImageFailed(对象发送方,例外RoutedEventTargets e)
{
BitmapImage img=新的BitmapImage();
img.UriSource=newURI(“您的本地图像”,UriKind.Relative);
}
你的本地形象。
无论如何,渲染图像需要时间,这是迄今为止我发现的最好、最快的方法,听起来很合理。我添加了对
lstIcon.UpdateLayout()的调用
和lstIcon.GetBindingExpression(ItemsControl.ItemsSourceProperty).UpdateSource()代码>在页面加载事件之后,但仍然没有骰子。听起来很合理。我添加了对lstIcon.UpdateLayout()的调用
和lstIcon.GetBindingExpression(ItemsControl.ItemsSourceProperty).UpdateSource()代码>在页面加载事件之后,但仍然没有骰子。
BitmapImage img = null;
StreamResourceInfo res = Application.GetResourceStream(new Uri("/MyAssembly;component/Resource/images/myimage.png", UriKind.Relative));
Stream s = res.Stream;
using (s) {
img= new BitmapImage();
img.SetSource(s);
}
img.CreateOptions = BitmapCreateOptions.None;